grain.social is a photo sharing platform built on atproto.
1/** 2 * GENERATED CODE - DO NOT MODIFY 3 */ 4import { 5 type LexiconDoc, 6 Lexicons, 7 ValidationError, 8 type ValidationResult, 9} from "npm:@atproto/lexicon" 10import { type $Typed, is$typed, maybe$typed } from './util.ts' 11 12export const schemaDict = { 13 AppBskyEmbedDefs: { 14 lexicon: 1, 15 id: 'app.bsky.embed.defs', 16 defs: { 17 aspectRatio: { 18 type: 'object', 19 required: ['width', 'height'], 20 properties: { 21 width: { 22 type: 'integer', 23 minimum: 1, 24 }, 25 height: { 26 type: 'integer', 27 minimum: 1, 28 }, 29 }, 30 description: 31 'width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit.', 32 }, 33 }, 34 }, 35 AppBskyEmbedRecord: { 36 lexicon: 1, 37 id: 'app.bsky.embed.record', 38 description: 39 'A representation of a record embedded in a Bluesky record (eg, a post). For example, a quote-post, or sharing a feed generator record.', 40 defs: { 41 main: { 42 type: 'object', 43 required: ['record'], 44 properties: { 45 record: { 46 ref: 'lex:com.atproto.repo.strongRef', 47 type: 'ref', 48 }, 49 }, 50 }, 51 view: { 52 type: 'object', 53 required: ['record'], 54 properties: { 55 record: { 56 refs: [ 57 'lex:app.bsky.embed.record#viewRecord', 58 'lex:app.bsky.embed.record#viewNotFound', 59 'lex:app.bsky.embed.record#viewBlocked', 60 'lex:app.bsky.embed.record#viewDetached', 61 'lex:app.bsky.feed.defs#generatorView', 62 'lex:app.bsky.graph.defs#listView', 63 'lex:app.bsky.labeler.defs#labelerView', 64 'lex:app.bsky.graph.defs#starterPackViewBasic', 65 ], 66 type: 'union', 67 }, 68 }, 69 }, 70 viewRecord: { 71 type: 'object', 72 required: ['uri', 'cid', 'author', 'value', 'indexedAt'], 73 properties: { 74 cid: { 75 type: 'string', 76 format: 'cid', 77 }, 78 uri: { 79 type: 'string', 80 format: 'at-uri', 81 }, 82 value: { 83 type: 'unknown', 84 description: 'The record data itself.', 85 }, 86 author: { 87 ref: 'lex:app.bsky.actor.defs#profileViewBasic', 88 type: 'ref', 89 }, 90 embeds: { 91 type: 'array', 92 items: { 93 refs: [ 94 'lex:app.bsky.embed.images#view', 95 'lex:app.bsky.embed.video#view', 96 'lex:app.bsky.embed.external#view', 97 'lex:app.bsky.embed.record#view', 98 'lex:app.bsky.embed.recordWithMedia#view', 99 ], 100 type: 'union', 101 }, 102 }, 103 labels: { 104 type: 'array', 105 items: { 106 ref: 'lex:com.atproto.label.defs#label', 107 type: 'ref', 108 }, 109 }, 110 indexedAt: { 111 type: 'string', 112 format: 'datetime', 113 }, 114 likeCount: { 115 type: 'integer', 116 }, 117 quoteCount: { 118 type: 'integer', 119 }, 120 replyCount: { 121 type: 'integer', 122 }, 123 repostCount: { 124 type: 'integer', 125 }, 126 }, 127 }, 128 viewBlocked: { 129 type: 'object', 130 required: ['uri', 'blocked', 'author'], 131 properties: { 132 uri: { 133 type: 'string', 134 format: 'at-uri', 135 }, 136 author: { 137 ref: 'lex:app.bsky.feed.defs#blockedAuthor', 138 type: 'ref', 139 }, 140 blocked: { 141 type: 'boolean', 142 const: true, 143 }, 144 }, 145 }, 146 viewDetached: { 147 type: 'object', 148 required: ['uri', 'detached'], 149 properties: { 150 uri: { 151 type: 'string', 152 format: 'at-uri', 153 }, 154 detached: { 155 type: 'boolean', 156 const: true, 157 }, 158 }, 159 }, 160 viewNotFound: { 161 type: 'object', 162 required: ['uri', 'notFound'], 163 properties: { 164 uri: { 165 type: 'string', 166 format: 'at-uri', 167 }, 168 notFound: { 169 type: 'boolean', 170 const: true, 171 }, 172 }, 173 }, 174 }, 175 }, 176 AppBskyEmbedImages: { 177 lexicon: 1, 178 id: 'app.bsky.embed.images', 179 description: 'A set of images embedded in a Bluesky record (eg, a post).', 180 defs: { 181 main: { 182 type: 'object', 183 required: ['images'], 184 properties: { 185 images: { 186 type: 'array', 187 items: { 188 ref: 'lex:app.bsky.embed.images#image', 189 type: 'ref', 190 }, 191 maxLength: 4, 192 }, 193 }, 194 }, 195 view: { 196 type: 'object', 197 required: ['images'], 198 properties: { 199 images: { 200 type: 'array', 201 items: { 202 ref: 'lex:app.bsky.embed.images#viewImage', 203 type: 'ref', 204 }, 205 maxLength: 4, 206 }, 207 }, 208 }, 209 image: { 210 type: 'object', 211 required: ['image', 'alt'], 212 properties: { 213 alt: { 214 type: 'string', 215 description: 216 'Alt text description of the image, for accessibility.', 217 }, 218 image: { 219 type: 'blob', 220 accept: ['image/*'], 221 maxSize: 1000000, 222 }, 223 aspectRatio: { 224 ref: 'lex:app.bsky.embed.defs#aspectRatio', 225 type: 'ref', 226 }, 227 }, 228 }, 229 viewImage: { 230 type: 'object', 231 required: ['thumb', 'fullsize', 'alt'], 232 properties: { 233 alt: { 234 type: 'string', 235 description: 236 'Alt text description of the image, for accessibility.', 237 }, 238 thumb: { 239 type: 'string', 240 format: 'uri', 241 description: 242 'Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View.', 243 }, 244 fullsize: { 245 type: 'string', 246 format: 'uri', 247 description: 248 'Fully-qualified URL where a large version of the image can be fetched. May or may not be the exact original blob. For example, CDN location provided by the App View.', 249 }, 250 aspectRatio: { 251 ref: 'lex:app.bsky.embed.defs#aspectRatio', 252 type: 'ref', 253 }, 254 }, 255 }, 256 }, 257 }, 258 AppBskyEmbedRecordWithMedia: { 259 lexicon: 1, 260 id: 'app.bsky.embed.recordWithMedia', 261 description: 262 'A representation of a record embedded in a Bluesky record (eg, a post), alongside other compatible embeds. For example, a quote post and image, or a quote post and external URL card.', 263 defs: { 264 main: { 265 type: 'object', 266 required: ['record', 'media'], 267 properties: { 268 media: { 269 refs: [ 270 'lex:app.bsky.embed.images', 271 'lex:app.bsky.embed.video', 272 'lex:app.bsky.embed.external', 273 ], 274 type: 'union', 275 }, 276 record: { 277 ref: 'lex:app.bsky.embed.record', 278 type: 'ref', 279 }, 280 }, 281 }, 282 view: { 283 type: 'object', 284 required: ['record', 'media'], 285 properties: { 286 media: { 287 refs: [ 288 'lex:app.bsky.embed.images#view', 289 'lex:app.bsky.embed.video#view', 290 'lex:app.bsky.embed.external#view', 291 ], 292 type: 'union', 293 }, 294 record: { 295 ref: 'lex:app.bsky.embed.record#view', 296 type: 'ref', 297 }, 298 }, 299 }, 300 }, 301 }, 302 AppBskyEmbedVideo: { 303 lexicon: 1, 304 id: 'app.bsky.embed.video', 305 description: 'A video embedded in a Bluesky record (eg, a post).', 306 defs: { 307 main: { 308 type: 'object', 309 required: ['video'], 310 properties: { 311 alt: { 312 type: 'string', 313 maxLength: 10000, 314 description: 315 'Alt text description of the video, for accessibility.', 316 maxGraphemes: 1000, 317 }, 318 video: { 319 type: 'blob', 320 accept: ['video/mp4'], 321 maxSize: 50000000, 322 }, 323 captions: { 324 type: 'array', 325 items: { 326 ref: 'lex:app.bsky.embed.video#caption', 327 type: 'ref', 328 }, 329 maxLength: 20, 330 }, 331 aspectRatio: { 332 ref: 'lex:app.bsky.embed.defs#aspectRatio', 333 type: 'ref', 334 }, 335 }, 336 }, 337 view: { 338 type: 'object', 339 required: ['cid', 'playlist'], 340 properties: { 341 alt: { 342 type: 'string', 343 maxLength: 10000, 344 maxGraphemes: 1000, 345 }, 346 cid: { 347 type: 'string', 348 format: 'cid', 349 }, 350 playlist: { 351 type: 'string', 352 format: 'uri', 353 }, 354 thumbnail: { 355 type: 'string', 356 format: 'uri', 357 }, 358 aspectRatio: { 359 ref: 'lex:app.bsky.embed.defs#aspectRatio', 360 type: 'ref', 361 }, 362 }, 363 }, 364 caption: { 365 type: 'object', 366 required: ['lang', 'file'], 367 properties: { 368 file: { 369 type: 'blob', 370 accept: ['text/vtt'], 371 maxSize: 20000, 372 }, 373 lang: { 374 type: 'string', 375 format: 'language', 376 }, 377 }, 378 }, 379 }, 380 }, 381 AppBskyEmbedExternal: { 382 lexicon: 1, 383 id: 'app.bsky.embed.external', 384 defs: { 385 main: { 386 type: 'object', 387 required: ['external'], 388 properties: { 389 external: { 390 ref: 'lex:app.bsky.embed.external#external', 391 type: 'ref', 392 }, 393 }, 394 description: 395 "A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post).", 396 }, 397 view: { 398 type: 'object', 399 required: ['external'], 400 properties: { 401 external: { 402 ref: 'lex:app.bsky.embed.external#viewExternal', 403 type: 'ref', 404 }, 405 }, 406 }, 407 external: { 408 type: 'object', 409 required: ['uri', 'title', 'description'], 410 properties: { 411 uri: { 412 type: 'string', 413 format: 'uri', 414 }, 415 thumb: { 416 type: 'blob', 417 accept: ['image/*'], 418 maxSize: 1000000, 419 }, 420 title: { 421 type: 'string', 422 }, 423 description: { 424 type: 'string', 425 }, 426 }, 427 }, 428 viewExternal: { 429 type: 'object', 430 required: ['uri', 'title', 'description'], 431 properties: { 432 uri: { 433 type: 'string', 434 format: 'uri', 435 }, 436 thumb: { 437 type: 'string', 438 format: 'uri', 439 }, 440 title: { 441 type: 'string', 442 }, 443 description: { 444 type: 'string', 445 }, 446 }, 447 }, 448 }, 449 }, 450 AppBskyGraphFollow: { 451 lexicon: 1, 452 id: 'app.bsky.graph.follow', 453 defs: { 454 main: { 455 key: 'tid', 456 type: 'record', 457 record: { 458 type: 'object', 459 required: ['subject', 'createdAt'], 460 properties: { 461 subject: { 462 type: 'string', 463 format: 'did', 464 }, 465 createdAt: { 466 type: 'string', 467 format: 'datetime', 468 }, 469 }, 470 }, 471 description: 472 "Record declaring a social 'follow' relationship of another account. Duplicate follows will be ignored by the AppView.", 473 }, 474 }, 475 }, 476 AppBskyGraphDefs: { 477 lexicon: 1, 478 id: 'app.bsky.graph.defs', 479 defs: { 480 modlist: { 481 type: 'token', 482 description: 483 'A list of actors to apply an aggregate moderation action (mute/block) on.', 484 }, 485 listView: { 486 type: 'object', 487 required: ['uri', 'cid', 'creator', 'name', 'purpose', 'indexedAt'], 488 properties: { 489 cid: { 490 type: 'string', 491 format: 'cid', 492 }, 493 uri: { 494 type: 'string', 495 format: 'at-uri', 496 }, 497 name: { 498 type: 'string', 499 maxLength: 64, 500 minLength: 1, 501 }, 502 avatar: { 503 type: 'string', 504 format: 'uri', 505 }, 506 labels: { 507 type: 'array', 508 items: { 509 ref: 'lex:com.atproto.label.defs#label', 510 type: 'ref', 511 }, 512 }, 513 viewer: { 514 ref: 'lex:app.bsky.graph.defs#listViewerState', 515 type: 'ref', 516 }, 517 creator: { 518 ref: 'lex:app.bsky.actor.defs#profileView', 519 type: 'ref', 520 }, 521 purpose: { 522 ref: 'lex:app.bsky.graph.defs#listPurpose', 523 type: 'ref', 524 }, 525 indexedAt: { 526 type: 'string', 527 format: 'datetime', 528 }, 529 description: { 530 type: 'string', 531 maxLength: 3000, 532 maxGraphemes: 300, 533 }, 534 listItemCount: { 535 type: 'integer', 536 minimum: 0, 537 }, 538 descriptionFacets: { 539 type: 'array', 540 items: { 541 ref: 'lex:app.bsky.richtext.facet', 542 type: 'ref', 543 }, 544 }, 545 }, 546 }, 547 curatelist: { 548 type: 'token', 549 description: 550 'A list of actors used for curation purposes such as list feeds or interaction gating.', 551 }, 552 listPurpose: { 553 type: 'string', 554 knownValues: [ 555 'app.bsky.graph.defs#modlist', 556 'app.bsky.graph.defs#curatelist', 557 'app.bsky.graph.defs#referencelist', 558 ], 559 }, 560 listItemView: { 561 type: 'object', 562 required: ['uri', 'subject'], 563 properties: { 564 uri: { 565 type: 'string', 566 format: 'at-uri', 567 }, 568 subject: { 569 ref: 'lex:app.bsky.actor.defs#profileView', 570 type: 'ref', 571 }, 572 }, 573 }, 574 relationship: { 575 type: 'object', 576 required: ['did'], 577 properties: { 578 did: { 579 type: 'string', 580 format: 'did', 581 }, 582 following: { 583 type: 'string', 584 format: 'at-uri', 585 description: 586 'if the actor follows this DID, this is the AT-URI of the follow record', 587 }, 588 followedBy: { 589 type: 'string', 590 format: 'at-uri', 591 description: 592 'if the actor is followed by this DID, contains the AT-URI of the follow record', 593 }, 594 }, 595 description: 596 'lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object)', 597 }, 598 listViewBasic: { 599 type: 'object', 600 required: ['uri', 'cid', 'name', 'purpose'], 601 properties: { 602 cid: { 603 type: 'string', 604 format: 'cid', 605 }, 606 uri: { 607 type: 'string', 608 format: 'at-uri', 609 }, 610 name: { 611 type: 'string', 612 maxLength: 64, 613 minLength: 1, 614 }, 615 avatar: { 616 type: 'string', 617 format: 'uri', 618 }, 619 labels: { 620 type: 'array', 621 items: { 622 ref: 'lex:com.atproto.label.defs#label', 623 type: 'ref', 624 }, 625 }, 626 viewer: { 627 ref: 'lex:app.bsky.graph.defs#listViewerState', 628 type: 'ref', 629 }, 630 purpose: { 631 ref: 'lex:app.bsky.graph.defs#listPurpose', 632 type: 'ref', 633 }, 634 indexedAt: { 635 type: 'string', 636 format: 'datetime', 637 }, 638 listItemCount: { 639 type: 'integer', 640 minimum: 0, 641 }, 642 }, 643 }, 644 notFoundActor: { 645 type: 'object', 646 required: ['actor', 'notFound'], 647 properties: { 648 actor: { 649 type: 'string', 650 format: 'at-identifier', 651 }, 652 notFound: { 653 type: 'boolean', 654 const: true, 655 }, 656 }, 657 description: 'indicates that a handle or DID could not be resolved', 658 }, 659 referencelist: { 660 type: 'token', 661 description: 662 'A list of actors used for only for reference purposes such as within a starter pack.', 663 }, 664 listViewerState: { 665 type: 'object', 666 properties: { 667 muted: { 668 type: 'boolean', 669 }, 670 blocked: { 671 type: 'string', 672 format: 'at-uri', 673 }, 674 }, 675 }, 676 starterPackView: { 677 type: 'object', 678 required: ['uri', 'cid', 'record', 'creator', 'indexedAt'], 679 properties: { 680 cid: { 681 type: 'string', 682 format: 'cid', 683 }, 684 uri: { 685 type: 'string', 686 format: 'at-uri', 687 }, 688 list: { 689 ref: 'lex:app.bsky.graph.defs#listViewBasic', 690 type: 'ref', 691 }, 692 feeds: { 693 type: 'array', 694 items: { 695 ref: 'lex:app.bsky.feed.defs#generatorView', 696 type: 'ref', 697 }, 698 maxLength: 3, 699 }, 700 labels: { 701 type: 'array', 702 items: { 703 ref: 'lex:com.atproto.label.defs#label', 704 type: 'ref', 705 }, 706 }, 707 record: { 708 type: 'unknown', 709 }, 710 creator: { 711 ref: 'lex:app.bsky.actor.defs#profileViewBasic', 712 type: 'ref', 713 }, 714 indexedAt: { 715 type: 'string', 716 format: 'datetime', 717 }, 718 joinedWeekCount: { 719 type: 'integer', 720 minimum: 0, 721 }, 722 listItemsSample: { 723 type: 'array', 724 items: { 725 ref: 'lex:app.bsky.graph.defs#listItemView', 726 type: 'ref', 727 }, 728 maxLength: 12, 729 }, 730 joinedAllTimeCount: { 731 type: 'integer', 732 minimum: 0, 733 }, 734 }, 735 }, 736 starterPackViewBasic: { 737 type: 'object', 738 required: ['uri', 'cid', 'record', 'creator', 'indexedAt'], 739 properties: { 740 cid: { 741 type: 'string', 742 format: 'cid', 743 }, 744 uri: { 745 type: 'string', 746 format: 'at-uri', 747 }, 748 labels: { 749 type: 'array', 750 items: { 751 ref: 'lex:com.atproto.label.defs#label', 752 type: 'ref', 753 }, 754 }, 755 record: { 756 type: 'unknown', 757 }, 758 creator: { 759 ref: 'lex:app.bsky.actor.defs#profileViewBasic', 760 type: 'ref', 761 }, 762 indexedAt: { 763 type: 'string', 764 format: 'datetime', 765 }, 766 listItemCount: { 767 type: 'integer', 768 minimum: 0, 769 }, 770 joinedWeekCount: { 771 type: 'integer', 772 minimum: 0, 773 }, 774 joinedAllTimeCount: { 775 type: 'integer', 776 minimum: 0, 777 }, 778 }, 779 }, 780 }, 781 }, 782 AppBskyFeedDefs: { 783 lexicon: 1, 784 id: 'app.bsky.feed.defs', 785 defs: { 786 postView: { 787 type: 'object', 788 required: ['uri', 'cid', 'author', 'record', 'indexedAt'], 789 properties: { 790 cid: { 791 type: 'string', 792 format: 'cid', 793 }, 794 uri: { 795 type: 'string', 796 format: 'at-uri', 797 }, 798 embed: { 799 refs: [ 800 'lex:app.bsky.embed.images#view', 801 'lex:app.bsky.embed.video#view', 802 'lex:app.bsky.embed.external#view', 803 'lex:app.bsky.embed.record#view', 804 'lex:app.bsky.embed.recordWithMedia#view', 805 ], 806 type: 'union', 807 }, 808 author: { 809 ref: 'lex:app.bsky.actor.defs#profileViewBasic', 810 type: 'ref', 811 }, 812 labels: { 813 type: 'array', 814 items: { 815 ref: 'lex:com.atproto.label.defs#label', 816 type: 'ref', 817 }, 818 }, 819 record: { 820 type: 'unknown', 821 }, 822 viewer: { 823 ref: 'lex:app.bsky.feed.defs#viewerState', 824 type: 'ref', 825 }, 826 indexedAt: { 827 type: 'string', 828 format: 'datetime', 829 }, 830 likeCount: { 831 type: 'integer', 832 }, 833 quoteCount: { 834 type: 'integer', 835 }, 836 replyCount: { 837 type: 'integer', 838 }, 839 threadgate: { 840 ref: 'lex:app.bsky.feed.defs#threadgateView', 841 type: 'ref', 842 }, 843 repostCount: { 844 type: 'integer', 845 }, 846 }, 847 }, 848 replyRef: { 849 type: 'object', 850 required: ['root', 'parent'], 851 properties: { 852 root: { 853 refs: [ 854 'lex:app.bsky.feed.defs#postView', 855 'lex:app.bsky.feed.defs#notFoundPost', 856 'lex:app.bsky.feed.defs#blockedPost', 857 ], 858 type: 'union', 859 }, 860 parent: { 861 refs: [ 862 'lex:app.bsky.feed.defs#postView', 863 'lex:app.bsky.feed.defs#notFoundPost', 864 'lex:app.bsky.feed.defs#blockedPost', 865 ], 866 type: 'union', 867 }, 868 grandparentAuthor: { 869 ref: 'lex:app.bsky.actor.defs#profileViewBasic', 870 type: 'ref', 871 description: 872 'When parent is a reply to another post, this is the author of that post.', 873 }, 874 }, 875 }, 876 reasonPin: { 877 type: 'object', 878 properties: {}, 879 }, 880 blockedPost: { 881 type: 'object', 882 required: ['uri', 'blocked', 'author'], 883 properties: { 884 uri: { 885 type: 'string', 886 format: 'at-uri', 887 }, 888 author: { 889 ref: 'lex:app.bsky.feed.defs#blockedAuthor', 890 type: 'ref', 891 }, 892 blocked: { 893 type: 'boolean', 894 const: true, 895 }, 896 }, 897 }, 898 interaction: { 899 type: 'object', 900 properties: { 901 item: { 902 type: 'string', 903 format: 'at-uri', 904 }, 905 event: { 906 type: 'string', 907 knownValues: [ 908 'app.bsky.feed.defs#requestLess', 909 'app.bsky.feed.defs#requestMore', 910 'app.bsky.feed.defs#clickthroughItem', 911 'app.bsky.feed.defs#clickthroughAuthor', 912 'app.bsky.feed.defs#clickthroughReposter', 913 'app.bsky.feed.defs#clickthroughEmbed', 914 'app.bsky.feed.defs#interactionSeen', 915 'app.bsky.feed.defs#interactionLike', 916 'app.bsky.feed.defs#interactionRepost', 917 'app.bsky.feed.defs#interactionReply', 918 'app.bsky.feed.defs#interactionQuote', 919 'app.bsky.feed.defs#interactionShare', 920 ], 921 }, 922 feedContext: { 923 type: 'string', 924 maxLength: 2000, 925 description: 926 'Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton.', 927 }, 928 }, 929 }, 930 requestLess: { 931 type: 'token', 932 description: 933 'Request that less content like the given feed item be shown in the feed', 934 }, 935 requestMore: { 936 type: 'token', 937 description: 938 'Request that more content like the given feed item be shown in the feed', 939 }, 940 viewerState: { 941 type: 'object', 942 properties: { 943 like: { 944 type: 'string', 945 format: 'at-uri', 946 }, 947 pinned: { 948 type: 'boolean', 949 }, 950 repost: { 951 type: 'string', 952 format: 'at-uri', 953 }, 954 threadMuted: { 955 type: 'boolean', 956 }, 957 replyDisabled: { 958 type: 'boolean', 959 }, 960 embeddingDisabled: { 961 type: 'boolean', 962 }, 963 }, 964 description: 965 "Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests.", 966 }, 967 feedViewPost: { 968 type: 'object', 969 required: ['post'], 970 properties: { 971 post: { 972 ref: 'lex:app.bsky.feed.defs#postView', 973 type: 'ref', 974 }, 975 reply: { 976 ref: 'lex:app.bsky.feed.defs#replyRef', 977 type: 'ref', 978 }, 979 reason: { 980 refs: [ 981 'lex:app.bsky.feed.defs#reasonRepost', 982 'lex:app.bsky.feed.defs#reasonPin', 983 ], 984 type: 'union', 985 }, 986 feedContext: { 987 type: 'string', 988 maxLength: 2000, 989 description: 990 'Context provided by feed generator that may be passed back alongside interactions.', 991 }, 992 }, 993 }, 994 notFoundPost: { 995 type: 'object', 996 required: ['uri', 'notFound'], 997 properties: { 998 uri: { 999 type: 'string', 1000 format: 'at-uri', 1001 }, 1002 notFound: { 1003 type: 'boolean', 1004 const: true, 1005 }, 1006 }, 1007 }, 1008 reasonRepost: { 1009 type: 'object', 1010 required: ['by', 'indexedAt'], 1011 properties: { 1012 by: { 1013 ref: 'lex:app.bsky.actor.defs#profileViewBasic', 1014 type: 'ref', 1015 }, 1016 indexedAt: { 1017 type: 'string', 1018 format: 'datetime', 1019 }, 1020 }, 1021 }, 1022 blockedAuthor: { 1023 type: 'object', 1024 required: ['did'], 1025 properties: { 1026 did: { 1027 type: 'string', 1028 format: 'did', 1029 }, 1030 viewer: { 1031 ref: 'lex:app.bsky.actor.defs#viewerState', 1032 type: 'ref', 1033 }, 1034 }, 1035 }, 1036 generatorView: { 1037 type: 'object', 1038 required: ['uri', 'cid', 'did', 'creator', 'displayName', 'indexedAt'], 1039 properties: { 1040 cid: { 1041 type: 'string', 1042 format: 'cid', 1043 }, 1044 did: { 1045 type: 'string', 1046 format: 'did', 1047 }, 1048 uri: { 1049 type: 'string', 1050 format: 'at-uri', 1051 }, 1052 avatar: { 1053 type: 'string', 1054 format: 'uri', 1055 }, 1056 labels: { 1057 type: 'array', 1058 items: { 1059 ref: 'lex:com.atproto.label.defs#label', 1060 type: 'ref', 1061 }, 1062 }, 1063 viewer: { 1064 ref: 'lex:app.bsky.feed.defs#generatorViewerState', 1065 type: 'ref', 1066 }, 1067 creator: { 1068 ref: 'lex:app.bsky.actor.defs#profileView', 1069 type: 'ref', 1070 }, 1071 indexedAt: { 1072 type: 'string', 1073 format: 'datetime', 1074 }, 1075 likeCount: { 1076 type: 'integer', 1077 minimum: 0, 1078 }, 1079 contentMode: { 1080 type: 'string', 1081 knownValues: [ 1082 'app.bsky.feed.defs#contentModeUnspecified', 1083 'app.bsky.feed.defs#contentModeVideo', 1084 ], 1085 }, 1086 description: { 1087 type: 'string', 1088 maxLength: 3000, 1089 maxGraphemes: 300, 1090 }, 1091 displayName: { 1092 type: 'string', 1093 }, 1094 descriptionFacets: { 1095 type: 'array', 1096 items: { 1097 ref: 'lex:app.bsky.richtext.facet', 1098 type: 'ref', 1099 }, 1100 }, 1101 acceptsInteractions: { 1102 type: 'boolean', 1103 }, 1104 }, 1105 }, 1106 threadContext: { 1107 type: 'object', 1108 properties: { 1109 rootAuthorLike: { 1110 type: 'string', 1111 format: 'at-uri', 1112 }, 1113 }, 1114 description: 1115 'Metadata about this post within the context of the thread it is in.', 1116 }, 1117 threadViewPost: { 1118 type: 'object', 1119 required: ['post'], 1120 properties: { 1121 post: { 1122 ref: 'lex:app.bsky.feed.defs#postView', 1123 type: 'ref', 1124 }, 1125 parent: { 1126 refs: [ 1127 'lex:app.bsky.feed.defs#threadViewPost', 1128 'lex:app.bsky.feed.defs#notFoundPost', 1129 'lex:app.bsky.feed.defs#blockedPost', 1130 ], 1131 type: 'union', 1132 }, 1133 replies: { 1134 type: 'array', 1135 items: { 1136 refs: [ 1137 'lex:app.bsky.feed.defs#threadViewPost', 1138 'lex:app.bsky.feed.defs#notFoundPost', 1139 'lex:app.bsky.feed.defs#blockedPost', 1140 ], 1141 type: 'union', 1142 }, 1143 }, 1144 threadContext: { 1145 ref: 'lex:app.bsky.feed.defs#threadContext', 1146 type: 'ref', 1147 }, 1148 }, 1149 }, 1150 threadgateView: { 1151 type: 'object', 1152 properties: { 1153 cid: { 1154 type: 'string', 1155 format: 'cid', 1156 }, 1157 uri: { 1158 type: 'string', 1159 format: 'at-uri', 1160 }, 1161 lists: { 1162 type: 'array', 1163 items: { 1164 ref: 'lex:app.bsky.graph.defs#listViewBasic', 1165 type: 'ref', 1166 }, 1167 }, 1168 record: { 1169 type: 'unknown', 1170 }, 1171 }, 1172 }, 1173 interactionLike: { 1174 type: 'token', 1175 description: 'User liked the feed item', 1176 }, 1177 interactionSeen: { 1178 type: 'token', 1179 description: 'Feed item was seen by user', 1180 }, 1181 clickthroughItem: { 1182 type: 'token', 1183 description: 'User clicked through to the feed item', 1184 }, 1185 contentModeVideo: { 1186 type: 'token', 1187 description: 1188 'Declares the feed generator returns posts containing app.bsky.embed.video embeds.', 1189 }, 1190 interactionQuote: { 1191 type: 'token', 1192 description: 'User quoted the feed item', 1193 }, 1194 interactionReply: { 1195 type: 'token', 1196 description: 'User replied to the feed item', 1197 }, 1198 interactionShare: { 1199 type: 'token', 1200 description: 'User shared the feed item', 1201 }, 1202 skeletonFeedPost: { 1203 type: 'object', 1204 required: ['post'], 1205 properties: { 1206 post: { 1207 type: 'string', 1208 format: 'at-uri', 1209 }, 1210 reason: { 1211 refs: [ 1212 'lex:app.bsky.feed.defs#skeletonReasonRepost', 1213 'lex:app.bsky.feed.defs#skeletonReasonPin', 1214 ], 1215 type: 'union', 1216 }, 1217 feedContext: { 1218 type: 'string', 1219 maxLength: 2000, 1220 description: 1221 'Context that will be passed through to client and may be passed to feed generator back alongside interactions.', 1222 }, 1223 }, 1224 }, 1225 clickthroughEmbed: { 1226 type: 'token', 1227 description: 1228 'User clicked through to the embedded content of the feed item', 1229 }, 1230 interactionRepost: { 1231 type: 'token', 1232 description: 'User reposted the feed item', 1233 }, 1234 skeletonReasonPin: { 1235 type: 'object', 1236 properties: {}, 1237 }, 1238 clickthroughAuthor: { 1239 type: 'token', 1240 description: 'User clicked through to the author of the feed item', 1241 }, 1242 clickthroughReposter: { 1243 type: 'token', 1244 description: 'User clicked through to the reposter of the feed item', 1245 }, 1246 generatorViewerState: { 1247 type: 'object', 1248 properties: { 1249 like: { 1250 type: 'string', 1251 format: 'at-uri', 1252 }, 1253 }, 1254 }, 1255 skeletonReasonRepost: { 1256 type: 'object', 1257 required: ['repost'], 1258 properties: { 1259 repost: { 1260 type: 'string', 1261 format: 'at-uri', 1262 }, 1263 }, 1264 }, 1265 contentModeUnspecified: { 1266 type: 'token', 1267 description: 'Declares the feed generator returns any types of posts.', 1268 }, 1269 }, 1270 }, 1271 AppBskyFeedPostgate: { 1272 lexicon: 1, 1273 id: 'app.bsky.feed.postgate', 1274 defs: { 1275 main: { 1276 key: 'tid', 1277 type: 'record', 1278 record: { 1279 type: 'object', 1280 required: ['post', 'createdAt'], 1281 properties: { 1282 post: { 1283 type: 'string', 1284 format: 'at-uri', 1285 description: 'Reference (AT-URI) to the post record.', 1286 }, 1287 createdAt: { 1288 type: 'string', 1289 format: 'datetime', 1290 }, 1291 embeddingRules: { 1292 type: 'array', 1293 items: { 1294 refs: ['lex:app.bsky.feed.postgate#disableRule'], 1295 type: 'union', 1296 }, 1297 maxLength: 5, 1298 description: 1299 'List of rules defining who can embed this post. If value is an empty array or is undefined, no particular rules apply and anyone can embed.', 1300 }, 1301 detachedEmbeddingUris: { 1302 type: 'array', 1303 items: { 1304 type: 'string', 1305 format: 'at-uri', 1306 }, 1307 maxLength: 50, 1308 description: 1309 'List of AT-URIs embedding this post that the author has detached from.', 1310 }, 1311 }, 1312 }, 1313 description: 1314 'Record defining interaction rules for a post. The record key (rkey) of the postgate record must match the record key of the post, and that record must be in the same repository.', 1315 }, 1316 disableRule: { 1317 type: 'object', 1318 properties: {}, 1319 description: 'Disables embedding of this post.', 1320 }, 1321 }, 1322 }, 1323 AppBskyFeedThreadgate: { 1324 lexicon: 1, 1325 id: 'app.bsky.feed.threadgate', 1326 defs: { 1327 main: { 1328 key: 'tid', 1329 type: 'record', 1330 record: { 1331 type: 'object', 1332 required: ['post', 'createdAt'], 1333 properties: { 1334 post: { 1335 type: 'string', 1336 format: 'at-uri', 1337 description: 'Reference (AT-URI) to the post record.', 1338 }, 1339 allow: { 1340 type: 'array', 1341 items: { 1342 refs: [ 1343 'lex:app.bsky.feed.threadgate#mentionRule', 1344 'lex:app.bsky.feed.threadgate#followerRule', 1345 'lex:app.bsky.feed.threadgate#followingRule', 1346 'lex:app.bsky.feed.threadgate#listRule', 1347 ], 1348 type: 'union', 1349 }, 1350 maxLength: 5, 1351 description: 1352 'List of rules defining who can reply to this post. If value is an empty array, no one can reply. If value is undefined, anyone can reply.', 1353 }, 1354 createdAt: { 1355 type: 'string', 1356 format: 'datetime', 1357 }, 1358 hiddenReplies: { 1359 type: 'array', 1360 items: { 1361 type: 'string', 1362 format: 'at-uri', 1363 }, 1364 maxLength: 50, 1365 description: 'List of hidden reply URIs.', 1366 }, 1367 }, 1368 }, 1369 description: 1370 "Record defining interaction gating rules for a thread (aka, reply controls). The record key (rkey) of the threadgate record must match the record key of the thread's root post, and that record must be in the same repository.", 1371 }, 1372 listRule: { 1373 type: 'object', 1374 required: ['list'], 1375 properties: { 1376 list: { 1377 type: 'string', 1378 format: 'at-uri', 1379 }, 1380 }, 1381 description: 'Allow replies from actors on a list.', 1382 }, 1383 mentionRule: { 1384 type: 'object', 1385 properties: {}, 1386 description: 'Allow replies from actors mentioned in your post.', 1387 }, 1388 followerRule: { 1389 type: 'object', 1390 properties: {}, 1391 description: 'Allow replies from actors who follow you.', 1392 }, 1393 followingRule: { 1394 type: 'object', 1395 properties: {}, 1396 description: 'Allow replies from actors you follow.', 1397 }, 1398 }, 1399 }, 1400 AppBskyRichtextFacet: { 1401 lexicon: 1, 1402 id: 'app.bsky.richtext.facet', 1403 defs: { 1404 tag: { 1405 type: 'object', 1406 required: ['tag'], 1407 properties: { 1408 tag: { 1409 type: 'string', 1410 maxLength: 640, 1411 maxGraphemes: 64, 1412 }, 1413 }, 1414 description: 1415 "Facet feature for a hashtag. The text usually includes a '#' prefix, but the facet reference should not (except in the case of 'double hash tags').", 1416 }, 1417 link: { 1418 type: 'object', 1419 required: ['uri'], 1420 properties: { 1421 uri: { 1422 type: 'string', 1423 format: 'uri', 1424 }, 1425 }, 1426 description: 1427 'Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL.', 1428 }, 1429 main: { 1430 type: 'object', 1431 required: ['index', 'features'], 1432 properties: { 1433 index: { 1434 ref: 'lex:app.bsky.richtext.facet#byteSlice', 1435 type: 'ref', 1436 }, 1437 features: { 1438 type: 'array', 1439 items: { 1440 refs: [ 1441 'lex:app.bsky.richtext.facet#mention', 1442 'lex:app.bsky.richtext.facet#link', 1443 'lex:app.bsky.richtext.facet#tag', 1444 ], 1445 type: 'union', 1446 }, 1447 }, 1448 }, 1449 description: 'Annotation of a sub-string within rich text.', 1450 }, 1451 mention: { 1452 type: 'object', 1453 required: ['did'], 1454 properties: { 1455 did: { 1456 type: 'string', 1457 format: 'did', 1458 }, 1459 }, 1460 description: 1461 "Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID.", 1462 }, 1463 byteSlice: { 1464 type: 'object', 1465 required: ['byteStart', 'byteEnd'], 1466 properties: { 1467 byteEnd: { 1468 type: 'integer', 1469 minimum: 0, 1470 }, 1471 byteStart: { 1472 type: 'integer', 1473 minimum: 0, 1474 }, 1475 }, 1476 description: 1477 'Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets.', 1478 }, 1479 }, 1480 }, 1481 AppBskyActorDefs: { 1482 lexicon: 1, 1483 id: 'app.bsky.actor.defs', 1484 defs: { 1485 nux: { 1486 type: 'object', 1487 required: ['id', 'completed'], 1488 properties: { 1489 id: { 1490 type: 'string', 1491 maxLength: 100, 1492 }, 1493 data: { 1494 type: 'string', 1495 maxLength: 3000, 1496 description: 1497 'Arbitrary data for the NUX. The structure is defined by the NUX itself. Limited to 300 characters.', 1498 maxGraphemes: 300, 1499 }, 1500 completed: { 1501 type: 'boolean', 1502 default: false, 1503 }, 1504 expiresAt: { 1505 type: 'string', 1506 format: 'datetime', 1507 description: 1508 'The date and time at which the NUX will expire and should be considered completed.', 1509 }, 1510 }, 1511 description: 'A new user experiences (NUX) storage object', 1512 }, 1513 mutedWord: { 1514 type: 'object', 1515 required: ['value', 'targets'], 1516 properties: { 1517 id: { 1518 type: 'string', 1519 }, 1520 value: { 1521 type: 'string', 1522 maxLength: 10000, 1523 description: 'The muted word itself.', 1524 maxGraphemes: 1000, 1525 }, 1526 targets: { 1527 type: 'array', 1528 items: { 1529 ref: 'lex:app.bsky.actor.defs#mutedWordTarget', 1530 type: 'ref', 1531 }, 1532 description: 'The intended targets of the muted word.', 1533 }, 1534 expiresAt: { 1535 type: 'string', 1536 format: 'datetime', 1537 description: 1538 'The date and time at which the muted word will expire and no longer be applied.', 1539 }, 1540 actorTarget: { 1541 type: 'string', 1542 default: 'all', 1543 description: 1544 'Groups of users to apply the muted word to. If undefined, applies to all users.', 1545 knownValues: ['all', 'exclude-following'], 1546 }, 1547 }, 1548 description: 'A word that the account owner has muted.', 1549 }, 1550 savedFeed: { 1551 type: 'object', 1552 required: ['id', 'type', 'value', 'pinned'], 1553 properties: { 1554 id: { 1555 type: 'string', 1556 }, 1557 type: { 1558 type: 'string', 1559 knownValues: ['feed', 'list', 'timeline'], 1560 }, 1561 value: { 1562 type: 'string', 1563 }, 1564 pinned: { 1565 type: 'boolean', 1566 }, 1567 }, 1568 }, 1569 preferences: { 1570 type: 'array', 1571 items: { 1572 refs: [ 1573 'lex:app.bsky.actor.defs#adultContentPref', 1574 'lex:app.bsky.actor.defs#contentLabelPref', 1575 'lex:app.bsky.actor.defs#savedFeedsPref', 1576 'lex:app.bsky.actor.defs#savedFeedsPrefV2', 1577 'lex:app.bsky.actor.defs#personalDetailsPref', 1578 'lex:app.bsky.actor.defs#feedViewPref', 1579 'lex:app.bsky.actor.defs#threadViewPref', 1580 'lex:app.bsky.actor.defs#interestsPref', 1581 'lex:app.bsky.actor.defs#mutedWordsPref', 1582 'lex:app.bsky.actor.defs#hiddenPostsPref', 1583 'lex:app.bsky.actor.defs#bskyAppStatePref', 1584 'lex:app.bsky.actor.defs#labelersPref', 1585 'lex:app.bsky.actor.defs#postInteractionSettingsPref', 1586 ], 1587 type: 'union', 1588 }, 1589 }, 1590 profileView: { 1591 type: 'object', 1592 required: ['did', 'handle'], 1593 properties: { 1594 did: { 1595 type: 'string', 1596 format: 'did', 1597 }, 1598 avatar: { 1599 type: 'string', 1600 format: 'uri', 1601 }, 1602 handle: { 1603 type: 'string', 1604 format: 'handle', 1605 }, 1606 labels: { 1607 type: 'array', 1608 items: { 1609 ref: 'lex:com.atproto.label.defs#label', 1610 type: 'ref', 1611 }, 1612 }, 1613 viewer: { 1614 ref: 'lex:app.bsky.actor.defs#viewerState', 1615 type: 'ref', 1616 }, 1617 createdAt: { 1618 type: 'string', 1619 format: 'datetime', 1620 }, 1621 indexedAt: { 1622 type: 'string', 1623 format: 'datetime', 1624 }, 1625 associated: { 1626 ref: 'lex:app.bsky.actor.defs#profileAssociated', 1627 type: 'ref', 1628 }, 1629 description: { 1630 type: 'string', 1631 maxLength: 2560, 1632 maxGraphemes: 256, 1633 }, 1634 displayName: { 1635 type: 'string', 1636 maxLength: 640, 1637 maxGraphemes: 64, 1638 }, 1639 }, 1640 }, 1641 viewerState: { 1642 type: 'object', 1643 properties: { 1644 muted: { 1645 type: 'boolean', 1646 }, 1647 blocking: { 1648 type: 'string', 1649 format: 'at-uri', 1650 }, 1651 blockedBy: { 1652 type: 'boolean', 1653 }, 1654 following: { 1655 type: 'string', 1656 format: 'at-uri', 1657 }, 1658 followedBy: { 1659 type: 'string', 1660 format: 'at-uri', 1661 }, 1662 mutedByList: { 1663 ref: 'lex:app.bsky.graph.defs#listViewBasic', 1664 type: 'ref', 1665 }, 1666 blockingByList: { 1667 ref: 'lex:app.bsky.graph.defs#listViewBasic', 1668 type: 'ref', 1669 }, 1670 knownFollowers: { 1671 ref: 'lex:app.bsky.actor.defs#knownFollowers', 1672 type: 'ref', 1673 }, 1674 }, 1675 description: 1676 "Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests.", 1677 }, 1678 feedViewPref: { 1679 type: 'object', 1680 required: ['feed'], 1681 properties: { 1682 feed: { 1683 type: 'string', 1684 description: 1685 'The URI of the feed, or an identifier which describes the feed.', 1686 }, 1687 hideReplies: { 1688 type: 'boolean', 1689 description: 'Hide replies in the feed.', 1690 }, 1691 hideReposts: { 1692 type: 'boolean', 1693 description: 'Hide reposts in the feed.', 1694 }, 1695 hideQuotePosts: { 1696 type: 'boolean', 1697 description: 'Hide quote posts in the feed.', 1698 }, 1699 hideRepliesByLikeCount: { 1700 type: 'integer', 1701 description: 1702 'Hide replies in the feed if they do not have this number of likes.', 1703 }, 1704 hideRepliesByUnfollowed: { 1705 type: 'boolean', 1706 default: true, 1707 description: 1708 'Hide replies in the feed if they are not by followed users.', 1709 }, 1710 }, 1711 }, 1712 labelersPref: { 1713 type: 'object', 1714 required: ['labelers'], 1715 properties: { 1716 labelers: { 1717 type: 'array', 1718 items: { 1719 ref: 'lex:app.bsky.actor.defs#labelerPrefItem', 1720 type: 'ref', 1721 }, 1722 }, 1723 }, 1724 }, 1725 interestsPref: { 1726 type: 'object', 1727 required: ['tags'], 1728 properties: { 1729 tags: { 1730 type: 'array', 1731 items: { 1732 type: 'string', 1733 maxLength: 640, 1734 maxGraphemes: 64, 1735 }, 1736 maxLength: 100, 1737 description: 1738 "A list of tags which describe the account owner's interests gathered during onboarding.", 1739 }, 1740 }, 1741 }, 1742 knownFollowers: { 1743 type: 'object', 1744 required: ['count', 'followers'], 1745 properties: { 1746 count: { 1747 type: 'integer', 1748 }, 1749 followers: { 1750 type: 'array', 1751 items: { 1752 ref: 'lex:app.bsky.actor.defs#profileViewBasic', 1753 type: 'ref', 1754 }, 1755 maxLength: 5, 1756 minLength: 0, 1757 }, 1758 }, 1759 description: "The subject's followers whom you also follow", 1760 }, 1761 mutedWordsPref: { 1762 type: 'object', 1763 required: ['items'], 1764 properties: { 1765 items: { 1766 type: 'array', 1767 items: { 1768 ref: 'lex:app.bsky.actor.defs#mutedWord', 1769 type: 'ref', 1770 }, 1771 description: 'A list of words the account owner has muted.', 1772 }, 1773 }, 1774 }, 1775 savedFeedsPref: { 1776 type: 'object', 1777 required: ['pinned', 'saved'], 1778 properties: { 1779 saved: { 1780 type: 'array', 1781 items: { 1782 type: 'string', 1783 format: 'at-uri', 1784 }, 1785 }, 1786 pinned: { 1787 type: 'array', 1788 items: { 1789 type: 'string', 1790 format: 'at-uri', 1791 }, 1792 }, 1793 timelineIndex: { 1794 type: 'integer', 1795 }, 1796 }, 1797 }, 1798 threadViewPref: { 1799 type: 'object', 1800 properties: { 1801 sort: { 1802 type: 'string', 1803 description: 'Sorting mode for threads.', 1804 knownValues: [ 1805 'oldest', 1806 'newest', 1807 'most-likes', 1808 'random', 1809 'hotness', 1810 ], 1811 }, 1812 prioritizeFollowedUsers: { 1813 type: 'boolean', 1814 description: 'Show followed users at the top of all replies.', 1815 }, 1816 }, 1817 }, 1818 hiddenPostsPref: { 1819 type: 'object', 1820 required: ['items'], 1821 properties: { 1822 items: { 1823 type: 'array', 1824 items: { 1825 type: 'string', 1826 format: 'at-uri', 1827 }, 1828 description: 1829 'A list of URIs of posts the account owner has hidden.', 1830 }, 1831 }, 1832 }, 1833 labelerPrefItem: { 1834 type: 'object', 1835 required: ['did'], 1836 properties: { 1837 did: { 1838 type: 'string', 1839 format: 'did', 1840 }, 1841 }, 1842 }, 1843 mutedWordTarget: { 1844 type: 'string', 1845 maxLength: 640, 1846 knownValues: ['content', 'tag'], 1847 maxGraphemes: 64, 1848 }, 1849 adultContentPref: { 1850 type: 'object', 1851 required: ['enabled'], 1852 properties: { 1853 enabled: { 1854 type: 'boolean', 1855 default: false, 1856 }, 1857 }, 1858 }, 1859 bskyAppStatePref: { 1860 type: 'object', 1861 properties: { 1862 nuxs: { 1863 type: 'array', 1864 items: { 1865 ref: 'lex:app.bsky.actor.defs#nux', 1866 type: 'ref', 1867 }, 1868 maxLength: 100, 1869 description: 'Storage for NUXs the user has encountered.', 1870 }, 1871 queuedNudges: { 1872 type: 'array', 1873 items: { 1874 type: 'string', 1875 maxLength: 100, 1876 }, 1877 maxLength: 1000, 1878 description: 1879 'An array of tokens which identify nudges (modals, popups, tours, highlight dots) that should be shown to the user.', 1880 }, 1881 activeProgressGuide: { 1882 ref: 'lex:app.bsky.actor.defs#bskyAppProgressGuide', 1883 type: 'ref', 1884 }, 1885 }, 1886 description: 1887 "A grab bag of state that's specific to the bsky.app program. Third-party apps shouldn't use this.", 1888 }, 1889 contentLabelPref: { 1890 type: 'object', 1891 required: ['label', 'visibility'], 1892 properties: { 1893 label: { 1894 type: 'string', 1895 }, 1896 labelerDid: { 1897 type: 'string', 1898 format: 'did', 1899 description: 1900 'Which labeler does this preference apply to? If undefined, applies globally.', 1901 }, 1902 visibility: { 1903 type: 'string', 1904 knownValues: ['ignore', 'show', 'warn', 'hide'], 1905 }, 1906 }, 1907 }, 1908 profileViewBasic: { 1909 type: 'object', 1910 required: ['did', 'handle'], 1911 properties: { 1912 did: { 1913 type: 'string', 1914 format: 'did', 1915 }, 1916 avatar: { 1917 type: 'string', 1918 format: 'uri', 1919 }, 1920 handle: { 1921 type: 'string', 1922 format: 'handle', 1923 }, 1924 labels: { 1925 type: 'array', 1926 items: { 1927 ref: 'lex:com.atproto.label.defs#label', 1928 type: 'ref', 1929 }, 1930 }, 1931 viewer: { 1932 ref: 'lex:app.bsky.actor.defs#viewerState', 1933 type: 'ref', 1934 }, 1935 createdAt: { 1936 type: 'string', 1937 format: 'datetime', 1938 }, 1939 associated: { 1940 ref: 'lex:app.bsky.actor.defs#profileAssociated', 1941 type: 'ref', 1942 }, 1943 displayName: { 1944 type: 'string', 1945 maxLength: 640, 1946 maxGraphemes: 64, 1947 }, 1948 }, 1949 }, 1950 savedFeedsPrefV2: { 1951 type: 'object', 1952 required: ['items'], 1953 properties: { 1954 items: { 1955 type: 'array', 1956 items: { 1957 ref: 'lex:app.bsky.actor.defs#savedFeed', 1958 type: 'ref', 1959 }, 1960 }, 1961 }, 1962 }, 1963 profileAssociated: { 1964 type: 'object', 1965 properties: { 1966 chat: { 1967 ref: 'lex:app.bsky.actor.defs#profileAssociatedChat', 1968 type: 'ref', 1969 }, 1970 lists: { 1971 type: 'integer', 1972 }, 1973 labeler: { 1974 type: 'boolean', 1975 }, 1976 feedgens: { 1977 type: 'integer', 1978 }, 1979 starterPacks: { 1980 type: 'integer', 1981 }, 1982 }, 1983 }, 1984 personalDetailsPref: { 1985 type: 'object', 1986 properties: { 1987 birthDate: { 1988 type: 'string', 1989 format: 'datetime', 1990 description: 'The birth date of account owner.', 1991 }, 1992 }, 1993 }, 1994 profileViewDetailed: { 1995 type: 'object', 1996 required: ['did', 'handle'], 1997 properties: { 1998 did: { 1999 type: 'string', 2000 format: 'did', 2001 }, 2002 avatar: { 2003 type: 'string', 2004 format: 'uri', 2005 }, 2006 banner: { 2007 type: 'string', 2008 format: 'uri', 2009 }, 2010 handle: { 2011 type: 'string', 2012 format: 'handle', 2013 }, 2014 labels: { 2015 type: 'array', 2016 items: { 2017 ref: 'lex:com.atproto.label.defs#label', 2018 type: 'ref', 2019 }, 2020 }, 2021 viewer: { 2022 ref: 'lex:app.bsky.actor.defs#viewerState', 2023 type: 'ref', 2024 }, 2025 createdAt: { 2026 type: 'string', 2027 format: 'datetime', 2028 }, 2029 indexedAt: { 2030 type: 'string', 2031 format: 'datetime', 2032 }, 2033 associated: { 2034 ref: 'lex:app.bsky.actor.defs#profileAssociated', 2035 type: 'ref', 2036 }, 2037 pinnedPost: { 2038 ref: 'lex:com.atproto.repo.strongRef', 2039 type: 'ref', 2040 }, 2041 postsCount: { 2042 type: 'integer', 2043 }, 2044 description: { 2045 type: 'string', 2046 maxLength: 2560, 2047 maxGraphemes: 256, 2048 }, 2049 displayName: { 2050 type: 'string', 2051 maxLength: 640, 2052 maxGraphemes: 64, 2053 }, 2054 followsCount: { 2055 type: 'integer', 2056 }, 2057 followersCount: { 2058 type: 'integer', 2059 }, 2060 joinedViaStarterPack: { 2061 ref: 'lex:app.bsky.graph.defs#starterPackViewBasic', 2062 type: 'ref', 2063 }, 2064 }, 2065 }, 2066 bskyAppProgressGuide: { 2067 type: 'object', 2068 required: ['guide'], 2069 properties: { 2070 guide: { 2071 type: 'string', 2072 maxLength: 100, 2073 }, 2074 }, 2075 description: 2076 'If set, an active progress guide. Once completed, can be set to undefined. Should have unspecced fields tracking progress.', 2077 }, 2078 profileAssociatedChat: { 2079 type: 'object', 2080 required: ['allowIncoming'], 2081 properties: { 2082 allowIncoming: { 2083 type: 'string', 2084 knownValues: ['all', 'none', 'following'], 2085 }, 2086 }, 2087 }, 2088 postInteractionSettingsPref: { 2089 type: 'object', 2090 required: [], 2091 properties: { 2092 threadgateAllowRules: { 2093 type: 'array', 2094 items: { 2095 refs: [ 2096 'lex:app.bsky.feed.threadgate#mentionRule', 2097 'lex:app.bsky.feed.threadgate#followerRule', 2098 'lex:app.bsky.feed.threadgate#followingRule', 2099 'lex:app.bsky.feed.threadgate#listRule', 2100 ], 2101 type: 'union', 2102 }, 2103 maxLength: 5, 2104 description: 2105 'Matches threadgate record. List of rules defining who can reply to this users posts. If value is an empty array, no one can reply. If value is undefined, anyone can reply.', 2106 }, 2107 postgateEmbeddingRules: { 2108 type: 'array', 2109 items: { 2110 refs: ['lex:app.bsky.feed.postgate#disableRule'], 2111 type: 'union', 2112 }, 2113 maxLength: 5, 2114 description: 2115 'Matches postgate record. List of rules defining who can embed this users posts. If value is an empty array or is undefined, no particular rules apply and anyone can embed.', 2116 }, 2117 }, 2118 description: 2119 'Default post interaction settings for the account. These values should be applied as default values when creating new posts. These refs should mirror the threadgate and postgate records exactly.', 2120 }, 2121 }, 2122 }, 2123 AppBskyActorProfile: { 2124 lexicon: 1, 2125 id: 'app.bsky.actor.profile', 2126 defs: { 2127 main: { 2128 key: 'literal:self', 2129 type: 'record', 2130 record: { 2131 type: 'object', 2132 properties: { 2133 avatar: { 2134 type: 'blob', 2135 accept: ['image/png', 'image/jpeg'], 2136 maxSize: 1000000, 2137 description: 2138 "Small image to be displayed next to posts from account. AKA, 'profile picture'", 2139 }, 2140 banner: { 2141 type: 'blob', 2142 accept: ['image/png', 'image/jpeg'], 2143 maxSize: 1000000, 2144 description: 2145 'Larger horizontal image to display behind profile view.', 2146 }, 2147 labels: { 2148 refs: ['lex:com.atproto.label.defs#selfLabels'], 2149 type: 'union', 2150 description: 2151 'Self-label values, specific to the Bluesky application, on the overall account.', 2152 }, 2153 createdAt: { 2154 type: 'string', 2155 format: 'datetime', 2156 }, 2157 pinnedPost: { 2158 ref: 'lex:com.atproto.repo.strongRef', 2159 type: 'ref', 2160 }, 2161 description: { 2162 type: 'string', 2163 maxLength: 2560, 2164 description: 'Free-form profile description text.', 2165 maxGraphemes: 256, 2166 }, 2167 displayName: { 2168 type: 'string', 2169 maxLength: 640, 2170 maxGraphemes: 64, 2171 }, 2172 joinedViaStarterPack: { 2173 ref: 'lex:com.atproto.repo.strongRef', 2174 type: 'ref', 2175 }, 2176 }, 2177 }, 2178 description: 'A declaration of a Bluesky account profile.', 2179 }, 2180 }, 2181 }, 2182 AppBskyLabelerDefs: { 2183 lexicon: 1, 2184 id: 'app.bsky.labeler.defs', 2185 defs: { 2186 labelerView: { 2187 type: 'object', 2188 required: ['uri', 'cid', 'creator', 'indexedAt'], 2189 properties: { 2190 cid: { 2191 type: 'string', 2192 format: 'cid', 2193 }, 2194 uri: { 2195 type: 'string', 2196 format: 'at-uri', 2197 }, 2198 labels: { 2199 type: 'array', 2200 items: { 2201 ref: 'lex:com.atproto.label.defs#label', 2202 type: 'ref', 2203 }, 2204 }, 2205 viewer: { 2206 ref: 'lex:app.bsky.labeler.defs#labelerViewerState', 2207 type: 'ref', 2208 }, 2209 creator: { 2210 ref: 'lex:app.bsky.actor.defs#profileView', 2211 type: 'ref', 2212 }, 2213 indexedAt: { 2214 type: 'string', 2215 format: 'datetime', 2216 }, 2217 likeCount: { 2218 type: 'integer', 2219 minimum: 0, 2220 }, 2221 }, 2222 }, 2223 labelerPolicies: { 2224 type: 'object', 2225 required: ['labelValues'], 2226 properties: { 2227 labelValues: { 2228 type: 'array', 2229 items: { 2230 ref: 'lex:com.atproto.label.defs#labelValue', 2231 type: 'ref', 2232 }, 2233 description: 2234 'The label values which this labeler publishes. May include global or custom labels.', 2235 }, 2236 labelValueDefinitions: { 2237 type: 'array', 2238 items: { 2239 ref: 'lex:com.atproto.label.defs#labelValueDefinition', 2240 type: 'ref', 2241 }, 2242 description: 2243 'Label values created by this labeler and scoped exclusively to it. Labels defined here will override global label definitions for this labeler.', 2244 }, 2245 }, 2246 }, 2247 labelerViewerState: { 2248 type: 'object', 2249 properties: { 2250 like: { 2251 type: 'string', 2252 format: 'at-uri', 2253 }, 2254 }, 2255 }, 2256 labelerViewDetailed: { 2257 type: 'object', 2258 required: ['uri', 'cid', 'creator', 'policies', 'indexedAt'], 2259 properties: { 2260 cid: { 2261 type: 'string', 2262 format: 'cid', 2263 }, 2264 uri: { 2265 type: 'string', 2266 format: 'at-uri', 2267 }, 2268 labels: { 2269 type: 'array', 2270 items: { 2271 ref: 'lex:com.atproto.label.defs#label', 2272 type: 'ref', 2273 }, 2274 }, 2275 viewer: { 2276 ref: 'lex:app.bsky.labeler.defs#labelerViewerState', 2277 type: 'ref', 2278 }, 2279 creator: { 2280 ref: 'lex:app.bsky.actor.defs#profileView', 2281 type: 'ref', 2282 }, 2283 policies: { 2284 ref: 'lex:app.bsky.labeler.defs#labelerPolicies', 2285 type: 'ref', 2286 }, 2287 indexedAt: { 2288 type: 'string', 2289 format: 'datetime', 2290 }, 2291 likeCount: { 2292 type: 'integer', 2293 minimum: 0, 2294 }, 2295 }, 2296 }, 2297 }, 2298 }, 2299 ShTangledGraphFollow: { 2300 lexicon: 1, 2301 id: 'sh.tangled.graph.follow', 2302 defs: { 2303 main: { 2304 type: 'record', 2305 key: 'tid', 2306 record: { 2307 type: 'object', 2308 required: ['subject', 'createdAt'], 2309 properties: { 2310 subject: { 2311 type: 'string', 2312 format: 'did', 2313 }, 2314 createdAt: { 2315 type: 'string', 2316 format: 'datetime', 2317 }, 2318 }, 2319 }, 2320 }, 2321 }, 2322 }, 2323 ShTangledActorProfile: { 2324 lexicon: 1, 2325 id: 'sh.tangled.actor.profile', 2326 defs: { 2327 main: { 2328 type: 'record', 2329 description: 'A declaration of a Tangled account profile.', 2330 key: 'literal:self', 2331 record: { 2332 type: 'object', 2333 required: ['bluesky'], 2334 properties: { 2335 description: { 2336 type: 'string', 2337 description: 'Free-form profile description text.', 2338 maxGraphemes: 256, 2339 maxLength: 2560, 2340 }, 2341 links: { 2342 type: 'array', 2343 minLength: 0, 2344 maxLength: 5, 2345 items: { 2346 type: 'string', 2347 description: 2348 'Any URI, intended for social profiles or websites, can be used to link DIDs/AT-URIs too.', 2349 }, 2350 }, 2351 stats: { 2352 type: 'array', 2353 minLength: 0, 2354 maxLength: 2, 2355 items: { 2356 type: 'string', 2357 description: 'Vanity stats.', 2358 enum: [ 2359 'merged-pull-request-count', 2360 'closed-pull-request-count', 2361 'open-pull-request-count', 2362 'open-issue-count', 2363 'closed-issue-count', 2364 'repository-count', 2365 ], 2366 }, 2367 }, 2368 bluesky: { 2369 type: 'boolean', 2370 description: 'Include link to this account on Bluesky.', 2371 }, 2372 location: { 2373 type: 'string', 2374 description: 'Free-form location text.', 2375 maxGraphemes: 40, 2376 maxLength: 400, 2377 }, 2378 pinnedRepositories: { 2379 type: 'array', 2380 description: 2381 'Any ATURI, it is up to appviews to validate these fields.', 2382 minLength: 0, 2383 maxLength: 6, 2384 items: { 2385 type: 'string', 2386 format: 'at-uri', 2387 }, 2388 }, 2389 }, 2390 }, 2391 }, 2392 }, 2393 }, 2394 SocialGrainDefs: { 2395 lexicon: 1, 2396 id: 'social.grain.defs', 2397 defs: { 2398 aspectRatio: { 2399 type: 'object', 2400 description: 2401 'width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit.', 2402 required: ['width', 'height'], 2403 properties: { 2404 width: { 2405 type: 'integer', 2406 minimum: 1, 2407 }, 2408 height: { 2409 type: 'integer', 2410 minimum: 1, 2411 }, 2412 }, 2413 }, 2414 }, 2415 }, 2416 SocialGrainNotificationDefs: { 2417 lexicon: 1, 2418 id: 'social.grain.notification.defs', 2419 defs: { 2420 notificationView: { 2421 type: 'object', 2422 required: [ 2423 'uri', 2424 'cid', 2425 'author', 2426 'reason', 2427 'record', 2428 'isRead', 2429 'indexedAt', 2430 ], 2431 properties: { 2432 uri: { 2433 type: 'string', 2434 format: 'at-uri', 2435 }, 2436 cid: { 2437 type: 'string', 2438 format: 'cid', 2439 }, 2440 author: { 2441 type: 'ref', 2442 ref: 'lex:social.grain.actor.defs#profileView', 2443 }, 2444 reason: { 2445 type: 'string', 2446 description: 2447 'The reason why this notification was delivered - e.g. your gallery was favd, or you received a new follower.', 2448 knownValues: [ 2449 'follow', 2450 'gallery-favorite', 2451 'gallery-comment', 2452 'reply', 2453 'gallery-mention', 2454 'gallery-comment-mention', 2455 'unknown', 2456 ], 2457 }, 2458 reasonSubject: { 2459 type: 'string', 2460 format: 'at-uri', 2461 }, 2462 record: { 2463 type: 'unknown', 2464 }, 2465 isRead: { 2466 type: 'boolean', 2467 }, 2468 indexedAt: { 2469 type: 'string', 2470 format: 'datetime', 2471 }, 2472 }, 2473 }, 2474 }, 2475 }, 2476 SocialGrainNotificationGetNotifications: { 2477 lexicon: 1, 2478 id: 'social.grain.notification.getNotifications', 2479 defs: { 2480 main: { 2481 type: 'query', 2482 description: 2483 'Enumerate notifications for the requesting account. Requires auth.', 2484 parameters: { 2485 type: 'params', 2486 properties: { 2487 limit: { 2488 type: 'integer', 2489 minimum: 1, 2490 maximum: 100, 2491 default: 50, 2492 }, 2493 cursor: { 2494 type: 'string', 2495 }, 2496 }, 2497 }, 2498 output: { 2499 encoding: 'application/json', 2500 schema: { 2501 type: 'object', 2502 required: ['notifications'], 2503 properties: { 2504 cursor: { 2505 type: 'string', 2506 }, 2507 notifications: { 2508 type: 'array', 2509 items: { 2510 type: 'ref', 2511 ref: 'lex:social.grain.notification.defs#notificationView', 2512 }, 2513 }, 2514 seenAt: { 2515 type: 'string', 2516 format: 'datetime', 2517 }, 2518 }, 2519 }, 2520 }, 2521 }, 2522 }, 2523 }, 2524 SocialGrainCommentDefs: { 2525 lexicon: 1, 2526 id: 'social.grain.comment.defs', 2527 defs: { 2528 commentView: { 2529 type: 'object', 2530 required: ['uri', 'cid', 'author', 'text', 'createdAt'], 2531 properties: { 2532 uri: { 2533 type: 'string', 2534 format: 'at-uri', 2535 }, 2536 cid: { 2537 type: 'string', 2538 format: 'cid', 2539 }, 2540 author: { 2541 type: 'ref', 2542 ref: 'lex:social.grain.actor.defs#profileView', 2543 }, 2544 record: { 2545 type: 'unknown', 2546 }, 2547 text: { 2548 type: 'string', 2549 maxLength: 3000, 2550 maxGraphemes: 300, 2551 }, 2552 subject: { 2553 type: 'union', 2554 refs: ['lex:social.grain.gallery.defs#galleryView'], 2555 description: 2556 'The subject of the comment, which can be a gallery or a photo.', 2557 }, 2558 focus: { 2559 type: 'union', 2560 refs: ['lex:social.grain.photo.defs#photoView'], 2561 description: 2562 'The photo that the comment is focused on, if applicable.', 2563 }, 2564 replyTo: { 2565 type: 'string', 2566 format: 'at-uri', 2567 description: 2568 'The URI of the comment this comment is replying to, if applicable.', 2569 }, 2570 createdAt: { 2571 type: 'string', 2572 format: 'datetime', 2573 }, 2574 }, 2575 }, 2576 }, 2577 }, 2578 SocialGrainComment: { 2579 lexicon: 1, 2580 id: 'social.grain.comment', 2581 defs: { 2582 main: { 2583 type: 'record', 2584 key: 'tid', 2585 record: { 2586 type: 'object', 2587 required: ['text', 'subject', 'createdAt'], 2588 properties: { 2589 text: { 2590 type: 'string', 2591 maxLength: 3000, 2592 maxGraphemes: 300, 2593 }, 2594 facets: { 2595 type: 'array', 2596 description: 2597 'Annotations of description text (mentions and URLs, hashtags, etc)', 2598 items: { 2599 type: 'ref', 2600 ref: 'lex:app.bsky.richtext.facet', 2601 }, 2602 }, 2603 subject: { 2604 type: 'string', 2605 format: 'at-uri', 2606 }, 2607 focus: { 2608 type: 'string', 2609 format: 'at-uri', 2610 }, 2611 replyTo: { 2612 type: 'string', 2613 format: 'at-uri', 2614 }, 2615 createdAt: { 2616 type: 'string', 2617 format: 'datetime', 2618 }, 2619 }, 2620 }, 2621 }, 2622 }, 2623 }, 2624 SocialGrainGalleryItem: { 2625 lexicon: 1, 2626 id: 'social.grain.gallery.item', 2627 defs: { 2628 main: { 2629 type: 'record', 2630 key: 'tid', 2631 record: { 2632 type: 'object', 2633 required: ['createdAt', 'gallery', 'item'], 2634 properties: { 2635 createdAt: { 2636 type: 'string', 2637 format: 'datetime', 2638 }, 2639 gallery: { 2640 type: 'string', 2641 format: 'at-uri', 2642 }, 2643 item: { 2644 type: 'string', 2645 format: 'at-uri', 2646 }, 2647 position: { 2648 type: 'integer', 2649 default: 0, 2650 }, 2651 }, 2652 }, 2653 }, 2654 }, 2655 }, 2656 SocialGrainGalleryDefs: { 2657 lexicon: 1, 2658 id: 'social.grain.gallery.defs', 2659 defs: { 2660 galleryView: { 2661 type: 'object', 2662 required: ['uri', 'cid', 'creator', 'record', 'indexedAt'], 2663 properties: { 2664 uri: { 2665 type: 'string', 2666 format: 'at-uri', 2667 }, 2668 cid: { 2669 type: 'string', 2670 format: 'cid', 2671 }, 2672 creator: { 2673 type: 'ref', 2674 ref: 'lex:social.grain.actor.defs#profileView', 2675 }, 2676 record: { 2677 type: 'unknown', 2678 }, 2679 items: { 2680 type: 'array', 2681 items: { 2682 type: 'union', 2683 refs: ['lex:social.grain.photo.defs#photoView'], 2684 }, 2685 }, 2686 favCount: { 2687 type: 'integer', 2688 }, 2689 commentCount: { 2690 type: 'integer', 2691 }, 2692 labels: { 2693 type: 'array', 2694 items: { 2695 type: 'ref', 2696 ref: 'lex:com.atproto.label.defs#label', 2697 }, 2698 }, 2699 indexedAt: { 2700 type: 'string', 2701 format: 'datetime', 2702 }, 2703 viewer: { 2704 type: 'ref', 2705 ref: 'lex:social.grain.gallery.defs#viewerState', 2706 }, 2707 }, 2708 }, 2709 viewerState: { 2710 type: 'object', 2711 description: 2712 "Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests.", 2713 properties: { 2714 fav: { 2715 type: 'string', 2716 format: 'at-uri', 2717 }, 2718 }, 2719 }, 2720 }, 2721 }, 2722 SocialGrainGallery: { 2723 lexicon: 1, 2724 id: 'social.grain.gallery', 2725 defs: { 2726 main: { 2727 type: 'record', 2728 key: 'tid', 2729 record: { 2730 type: 'object', 2731 required: ['title', 'createdAt'], 2732 properties: { 2733 title: { 2734 type: 'string', 2735 maxLength: 100, 2736 }, 2737 description: { 2738 type: 'string', 2739 maxLength: 1000, 2740 }, 2741 facets: { 2742 type: 'array', 2743 description: 2744 'Annotations of description text (mentions, URLs, hashtags, etc)', 2745 items: { 2746 type: 'ref', 2747 ref: 'lex:app.bsky.richtext.facet', 2748 }, 2749 }, 2750 labels: { 2751 type: 'union', 2752 description: 2753 'Self-label values for this post. Effectively content warnings.', 2754 refs: ['lex:com.atproto.label.defs#selfLabels'], 2755 }, 2756 updatedAt: { 2757 type: 'string', 2758 format: 'datetime', 2759 }, 2760 createdAt: { 2761 type: 'string', 2762 format: 'datetime', 2763 }, 2764 }, 2765 }, 2766 }, 2767 }, 2768 }, 2769 SocialGrainGalleryGetGalleryThread: { 2770 lexicon: 1, 2771 id: 'social.grain.gallery.getGalleryThread', 2772 defs: { 2773 main: { 2774 type: 'query', 2775 description: 2776 'Gets a hydrated gallery view and its comments for a specified gallery AT-URI.', 2777 parameters: { 2778 type: 'params', 2779 required: ['uri'], 2780 properties: { 2781 uri: { 2782 type: 'string', 2783 description: 2784 'The AT-URI of the gallery to return a hydrated view and comments for.', 2785 format: 'at-uri', 2786 }, 2787 }, 2788 }, 2789 output: { 2790 encoding: 'application/json', 2791 schema: { 2792 type: 'object', 2793 required: ['gallery', 'comments'], 2794 properties: { 2795 gallery: { 2796 type: 'ref', 2797 ref: 'lex:social.grain.gallery.defs#galleryView', 2798 }, 2799 comments: { 2800 type: 'array', 2801 items: { 2802 type: 'ref', 2803 ref: 'lex:social.grain.comment.defs#commentView', 2804 }, 2805 }, 2806 }, 2807 }, 2808 }, 2809 }, 2810 }, 2811 }, 2812 SocialGrainGalleryGetActorGalleries: { 2813 lexicon: 1, 2814 id: 'social.grain.gallery.getActorGalleries', 2815 defs: { 2816 main: { 2817 type: 'query', 2818 description: 2819 "Get a view of an actor's galleries. Does not require auth.", 2820 parameters: { 2821 type: 'params', 2822 required: ['actor'], 2823 properties: { 2824 actor: { 2825 type: 'string', 2826 format: 'at-identifier', 2827 }, 2828 limit: { 2829 type: 'integer', 2830 minimum: 1, 2831 maximum: 100, 2832 default: 50, 2833 }, 2834 cursor: { 2835 type: 'string', 2836 }, 2837 }, 2838 }, 2839 output: { 2840 encoding: 'application/json', 2841 schema: { 2842 type: 'object', 2843 required: ['items'], 2844 properties: { 2845 cursor: { 2846 type: 'string', 2847 }, 2848 items: { 2849 type: 'array', 2850 items: { 2851 type: 'ref', 2852 ref: 'lex:social.grain.gallery.defs#galleryView', 2853 }, 2854 }, 2855 }, 2856 }, 2857 }, 2858 }, 2859 }, 2860 }, 2861 SocialGrainGalleryGetGallery: { 2862 lexicon: 1, 2863 id: 'social.grain.gallery.getGallery', 2864 defs: { 2865 main: { 2866 type: 'query', 2867 description: 2868 'Gets a hydrated gallery view for a specified gallery AT-URI.', 2869 parameters: { 2870 type: 'params', 2871 required: ['uri'], 2872 properties: { 2873 uri: { 2874 type: 'string', 2875 description: 2876 'The AT-URI of the gallery to return a hydrated view for.', 2877 format: 'at-uri', 2878 }, 2879 }, 2880 }, 2881 output: { 2882 encoding: 'application/json', 2883 schema: { 2884 type: 'ref', 2885 ref: 'lex:social.grain.gallery.defs#galleryView', 2886 }, 2887 }, 2888 }, 2889 }, 2890 }, 2891 SocialGrainGraphFollow: { 2892 lexicon: 1, 2893 id: 'social.grain.graph.follow', 2894 defs: { 2895 main: { 2896 key: 'tid', 2897 type: 'record', 2898 record: { 2899 type: 'object', 2900 required: ['subject', 'createdAt'], 2901 properties: { 2902 subject: { 2903 type: 'string', 2904 format: 'did', 2905 }, 2906 createdAt: { 2907 type: 'string', 2908 format: 'datetime', 2909 }, 2910 }, 2911 }, 2912 }, 2913 }, 2914 }, 2915 SocialGrainLabelerDefs: { 2916 lexicon: 1, 2917 id: 'social.grain.labeler.defs', 2918 defs: { 2919 labelerView: { 2920 type: 'object', 2921 required: ['uri', 'cid', 'creator', 'indexedAt'], 2922 properties: { 2923 uri: { 2924 type: 'string', 2925 format: 'at-uri', 2926 }, 2927 cid: { 2928 type: 'string', 2929 format: 'cid', 2930 }, 2931 creator: { 2932 type: 'ref', 2933 ref: 'lex:social.grain.actor.defs#profileView', 2934 }, 2935 favoriteCount: { 2936 type: 'integer', 2937 minimum: 0, 2938 }, 2939 viewer: { 2940 type: 'ref', 2941 ref: 'lex:social.grain.labeler.defs#labelerViewerState', 2942 }, 2943 indexedAt: { 2944 type: 'string', 2945 format: 'datetime', 2946 }, 2947 labels: { 2948 type: 'array', 2949 items: { 2950 type: 'ref', 2951 ref: 'lex:com.atproto.label.defs#label', 2952 }, 2953 }, 2954 }, 2955 }, 2956 labelerViewDetailed: { 2957 type: 'object', 2958 required: ['uri', 'cid', 'creator', 'policies', 'indexedAt'], 2959 properties: { 2960 uri: { 2961 type: 'string', 2962 format: 'at-uri', 2963 }, 2964 cid: { 2965 type: 'string', 2966 format: 'cid', 2967 }, 2968 creator: { 2969 type: 'ref', 2970 ref: 'lex:app.bsky.actor.defs#profileView', 2971 }, 2972 policies: { 2973 type: 'ref', 2974 ref: 'lex:social.grain.actor.defs#labelerPolicies', 2975 }, 2976 favoriteCount: { 2977 type: 'integer', 2978 minimum: 0, 2979 }, 2980 viewer: { 2981 type: 'ref', 2982 ref: 'lex:social.grain.labeler.defs#labelerViewerState', 2983 }, 2984 indexedAt: { 2985 type: 'string', 2986 format: 'datetime', 2987 }, 2988 labels: { 2989 type: 'array', 2990 items: { 2991 type: 'ref', 2992 ref: 'lex:com.atproto.label.defs#label', 2993 }, 2994 }, 2995 reasonTypes: { 2996 description: 2997 "The set of report reason 'codes' which are in-scope for this service to review and action. These usually align to policy categories. If not defined (distinct from empty array), all reason types are allowed.", 2998 type: 'array', 2999 items: { 3000 type: 'ref', 3001 ref: 'lex:com.atproto.moderation.defs#reasonType', 3002 }, 3003 }, 3004 subjectTypes: { 3005 description: 3006 'The set of subject types (account, record, etc) this service accepts reports on.', 3007 type: 'array', 3008 items: { 3009 type: 'ref', 3010 ref: 'lex:com.atproto.moderation.defs#subjectType', 3011 }, 3012 }, 3013 subjectCollections: { 3014 type: 'array', 3015 description: 3016 'Set of record types (collection NSIDs) which can be reported to this service. If not defined (distinct from empty array), default is any record type.', 3017 items: { 3018 type: 'string', 3019 format: 'nsid', 3020 }, 3021 }, 3022 }, 3023 }, 3024 labelerViewerState: { 3025 type: 'object', 3026 properties: { 3027 like: { 3028 type: 'string', 3029 format: 'at-uri', 3030 }, 3031 }, 3032 }, 3033 labelerPolicies: { 3034 type: 'object', 3035 required: ['labelValues'], 3036 properties: { 3037 labelValues: { 3038 type: 'array', 3039 description: 3040 'The label values which this labeler publishes. May include global or custom labels.', 3041 items: { 3042 type: 'ref', 3043 ref: 'lex:com.atproto.label.defs#labelValue', 3044 }, 3045 }, 3046 labelValueDefinitions: { 3047 type: 'array', 3048 description: 3049 'Label values created by this labeler and scoped exclusively to it. Labels defined here will override global label definitions for this labeler.', 3050 items: { 3051 type: 'ref', 3052 ref: 'lex:com.atproto.label.defs#labelValueDefinition', 3053 }, 3054 }, 3055 }, 3056 }, 3057 }, 3058 }, 3059 SocialGrainLabelerService: { 3060 lexicon: 1, 3061 id: 'social.grain.labeler.service', 3062 defs: { 3063 main: { 3064 type: 'record', 3065 description: 'A declaration of the existence of labeler service.', 3066 key: 'literal:self', 3067 record: { 3068 type: 'object', 3069 required: ['policies', 'createdAt'], 3070 properties: { 3071 policies: { 3072 type: 'ref', 3073 ref: 'lex:app.bsky.labeler.defs#labelerPolicies', 3074 }, 3075 labels: { 3076 type: 'union', 3077 refs: ['lex:com.atproto.label.defs#selfLabels'], 3078 }, 3079 createdAt: { 3080 type: 'string', 3081 format: 'datetime', 3082 }, 3083 reasonTypes: { 3084 description: 3085 "The set of report reason 'codes' which are in-scope for this service to review and action. These usually align to policy categories. If not defined (distinct from empty array), all reason types are allowed.", 3086 type: 'array', 3087 items: { 3088 type: 'ref', 3089 ref: 'lex:com.atproto.moderation.defs#reasonType', 3090 }, 3091 }, 3092 subjectTypes: { 3093 description: 3094 'The set of subject types (account, record, etc) this service accepts reports on.', 3095 type: 'array', 3096 items: { 3097 type: 'ref', 3098 ref: 'lex:com.atproto.moderation.defs#subjectType', 3099 }, 3100 }, 3101 subjectCollections: { 3102 type: 'array', 3103 description: 3104 'Set of record types (collection NSIDs) which can be reported to this service. If not defined (distinct from empty array), default is any record type.', 3105 items: { 3106 type: 'string', 3107 format: 'nsid', 3108 }, 3109 }, 3110 }, 3111 }, 3112 }, 3113 }, 3114 }, 3115 SocialGrainFeedGetTimeline: { 3116 lexicon: 1, 3117 id: 'social.grain.feed.getTimeline', 3118 defs: { 3119 main: { 3120 type: 'query', 3121 description: "Get a view of the requesting account's home timeline.", 3122 parameters: { 3123 type: 'params', 3124 properties: { 3125 algorithm: { 3126 type: 'string', 3127 description: 3128 "Variant 'algorithm' for timeline. Implementation-specific.", 3129 }, 3130 limit: { 3131 type: 'integer', 3132 minimum: 1, 3133 maximum: 100, 3134 default: 50, 3135 }, 3136 cursor: { 3137 type: 'string', 3138 }, 3139 }, 3140 }, 3141 output: { 3142 encoding: 'application/json', 3143 schema: { 3144 type: 'object', 3145 required: ['feed'], 3146 properties: { 3147 cursor: { 3148 type: 'string', 3149 }, 3150 feed: { 3151 type: 'array', 3152 items: { 3153 type: 'ref', 3154 ref: 'lex:social.grain.gallery.defs#galleryView', 3155 }, 3156 }, 3157 }, 3158 }, 3159 }, 3160 }, 3161 }, 3162 }, 3163 SocialGrainFavorite: { 3164 lexicon: 1, 3165 id: 'social.grain.favorite', 3166 defs: { 3167 main: { 3168 type: 'record', 3169 key: 'tid', 3170 record: { 3171 type: 'object', 3172 required: ['createdAt', 'subject'], 3173 properties: { 3174 createdAt: { 3175 type: 'string', 3176 format: 'datetime', 3177 }, 3178 subject: { 3179 type: 'string', 3180 format: 'at-uri', 3181 }, 3182 }, 3183 }, 3184 }, 3185 }, 3186 }, 3187 SocialGrainActorDefs: { 3188 lexicon: 1, 3189 id: 'social.grain.actor.defs', 3190 defs: { 3191 profileView: { 3192 type: 'object', 3193 required: ['did', 'handle'], 3194 properties: { 3195 did: { 3196 type: 'string', 3197 format: 'did', 3198 }, 3199 handle: { 3200 type: 'string', 3201 format: 'handle', 3202 }, 3203 displayName: { 3204 type: 'string', 3205 maxGraphemes: 64, 3206 maxLength: 640, 3207 }, 3208 description: { 3209 type: 'string', 3210 maxLength: 2560, 3211 maxGraphemes: 256, 3212 }, 3213 labels: { 3214 type: 'array', 3215 items: { 3216 ref: 'lex:com.atproto.label.defs#label', 3217 type: 'ref', 3218 }, 3219 }, 3220 avatar: { 3221 type: 'string', 3222 format: 'uri', 3223 }, 3224 createdAt: { 3225 type: 'string', 3226 format: 'datetime', 3227 }, 3228 }, 3229 }, 3230 profileViewDetailed: { 3231 type: 'object', 3232 required: ['did', 'handle'], 3233 properties: { 3234 did: { 3235 type: 'string', 3236 format: 'did', 3237 }, 3238 handle: { 3239 type: 'string', 3240 format: 'handle', 3241 }, 3242 displayName: { 3243 type: 'string', 3244 maxGraphemes: 64, 3245 maxLength: 640, 3246 }, 3247 description: { 3248 type: 'string', 3249 maxGraphemes: 256, 3250 maxLength: 2560, 3251 }, 3252 avatar: { 3253 type: 'string', 3254 format: 'uri', 3255 }, 3256 followersCount: { 3257 type: 'integer', 3258 }, 3259 followsCount: { 3260 type: 'integer', 3261 }, 3262 galleryCount: { 3263 type: 'integer', 3264 }, 3265 indexedAt: { 3266 type: 'string', 3267 format: 'datetime', 3268 }, 3269 createdAt: { 3270 type: 'string', 3271 format: 'datetime', 3272 }, 3273 viewer: { 3274 type: 'ref', 3275 ref: 'lex:social.grain.actor.defs#viewerState', 3276 }, 3277 labels: { 3278 type: 'array', 3279 items: { 3280 type: 'ref', 3281 ref: 'lex:com.atproto.label.defs#label', 3282 }, 3283 }, 3284 }, 3285 }, 3286 viewerState: { 3287 type: 'object', 3288 description: 3289 "Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests.", 3290 properties: { 3291 following: { 3292 type: 'string', 3293 format: 'at-uri', 3294 }, 3295 followedBy: { 3296 type: 'string', 3297 format: 'at-uri', 3298 }, 3299 }, 3300 }, 3301 }, 3302 }, 3303 SocialGrainActorGetProfile: { 3304 lexicon: 1, 3305 id: 'social.grain.actor.getProfile', 3306 defs: { 3307 main: { 3308 type: 'query', 3309 description: 3310 'Get detailed profile view of an actor. Does not require auth, but contains relevant metadata with auth.', 3311 parameters: { 3312 type: 'params', 3313 required: ['actor'], 3314 properties: { 3315 actor: { 3316 type: 'string', 3317 format: 'at-identifier', 3318 description: 'Handle or DID of account to fetch profile of.', 3319 }, 3320 }, 3321 }, 3322 output: { 3323 encoding: 'application/json', 3324 schema: { 3325 type: 'ref', 3326 ref: 'lex:social.grain.actor.defs#profileViewDetailed', 3327 }, 3328 }, 3329 }, 3330 }, 3331 }, 3332 SocialGrainActorSearchActors: { 3333 lexicon: 1, 3334 id: 'social.grain.actor.searchActors', 3335 defs: { 3336 main: { 3337 type: 'query', 3338 description: 3339 'Find actors (profiles) matching search criteria. Does not require auth.', 3340 parameters: { 3341 type: 'params', 3342 properties: { 3343 q: { 3344 type: 'string', 3345 description: 3346 'Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended.', 3347 }, 3348 limit: { 3349 type: 'integer', 3350 minimum: 1, 3351 maximum: 100, 3352 default: 25, 3353 }, 3354 cursor: { 3355 type: 'string', 3356 }, 3357 }, 3358 }, 3359 output: { 3360 encoding: 'application/json', 3361 schema: { 3362 type: 'object', 3363 required: ['actors'], 3364 properties: { 3365 cursor: { 3366 type: 'string', 3367 }, 3368 actors: { 3369 type: 'array', 3370 items: { 3371 type: 'ref', 3372 ref: 'lex:social.grain.actor.defs#profileView', 3373 }, 3374 }, 3375 }, 3376 }, 3377 }, 3378 }, 3379 }, 3380 }, 3381 SocialGrainActorGetActorFavs: { 3382 lexicon: 1, 3383 id: 'social.grain.actor.getActorFavs', 3384 defs: { 3385 main: { 3386 type: 'query', 3387 description: 3388 "Get a view of an actor's favorite galleries. Does not require auth.", 3389 parameters: { 3390 type: 'params', 3391 required: ['actor'], 3392 properties: { 3393 actor: { 3394 type: 'string', 3395 format: 'at-identifier', 3396 }, 3397 limit: { 3398 type: 'integer', 3399 minimum: 1, 3400 maximum: 100, 3401 default: 50, 3402 }, 3403 cursor: { 3404 type: 'string', 3405 }, 3406 }, 3407 }, 3408 output: { 3409 encoding: 'application/json', 3410 schema: { 3411 type: 'object', 3412 required: ['items'], 3413 properties: { 3414 cursor: { 3415 type: 'string', 3416 }, 3417 items: { 3418 type: 'array', 3419 items: { 3420 type: 'ref', 3421 ref: 'lex:social.grain.gallery.defs#galleryView', 3422 }, 3423 }, 3424 }, 3425 }, 3426 }, 3427 }, 3428 }, 3429 }, 3430 SocialGrainActorProfile: { 3431 lexicon: 1, 3432 id: 'social.grain.actor.profile', 3433 defs: { 3434 main: { 3435 type: 'record', 3436 description: 'A declaration of a basic account profile.', 3437 key: 'literal:self', 3438 record: { 3439 type: 'object', 3440 properties: { 3441 displayName: { 3442 type: 'string', 3443 maxGraphemes: 64, 3444 maxLength: 640, 3445 }, 3446 description: { 3447 type: 'string', 3448 description: 'Free-form profile description text.', 3449 maxGraphemes: 256, 3450 maxLength: 2560, 3451 }, 3452 avatar: { 3453 type: 'blob', 3454 description: 3455 "Small image to be displayed next to posts from account. AKA, 'profile picture'", 3456 accept: ['image/png', 'image/jpeg'], 3457 maxSize: 1000000, 3458 }, 3459 createdAt: { 3460 type: 'string', 3461 format: 'datetime', 3462 }, 3463 }, 3464 }, 3465 }, 3466 }, 3467 }, 3468 SocialGrainPhotoDefs: { 3469 lexicon: 1, 3470 id: 'social.grain.photo.defs', 3471 defs: { 3472 photoView: { 3473 type: 'object', 3474 required: ['uri', 'cid', 'thumb', 'fullsize', 'alt'], 3475 properties: { 3476 uri: { 3477 type: 'string', 3478 format: 'at-uri', 3479 }, 3480 cid: { 3481 type: 'string', 3482 format: 'cid', 3483 }, 3484 thumb: { 3485 type: 'string', 3486 format: 'uri', 3487 description: 3488 'Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View.', 3489 }, 3490 fullsize: { 3491 type: 'string', 3492 format: 'uri', 3493 description: 3494 'Fully-qualified URL where a large version of the image can be fetched. May or may not be the exact original blob. For example, CDN location provided by the App View.', 3495 }, 3496 alt: { 3497 type: 'string', 3498 description: 3499 'Alt text description of the image, for accessibility.', 3500 }, 3501 aspectRatio: { 3502 type: 'ref', 3503 ref: 'lex:social.grain.defs#aspectRatio', 3504 }, 3505 exif: { 3506 type: 'ref', 3507 ref: 'lex:social.grain.photo.defs#exifView', 3508 description: 'EXIF metadata for the photo, if available.', 3509 }, 3510 }, 3511 }, 3512 exifView: { 3513 type: 'object', 3514 required: ['photo', 'createdAt'], 3515 properties: { 3516 uri: { 3517 type: 'string', 3518 format: 'at-uri', 3519 }, 3520 cid: { 3521 type: 'string', 3522 format: 'cid', 3523 }, 3524 photo: { 3525 type: 'string', 3526 format: 'at-uri', 3527 }, 3528 createdAt: { 3529 type: 'string', 3530 format: 'datetime', 3531 }, 3532 dateTimeOriginal: { 3533 type: 'string', 3534 }, 3535 exposureTime: { 3536 type: 'string', 3537 }, 3538 fNumber: { 3539 type: 'string', 3540 }, 3541 flash: { 3542 type: 'string', 3543 }, 3544 focalLengthIn35mmFormat: { 3545 type: 'string', 3546 }, 3547 iSO: { 3548 type: 'integer', 3549 }, 3550 lensMake: { 3551 type: 'string', 3552 }, 3553 lensModel: { 3554 type: 'string', 3555 }, 3556 make: { 3557 type: 'string', 3558 }, 3559 model: { 3560 type: 'string', 3561 }, 3562 }, 3563 }, 3564 }, 3565 }, 3566 SocialGrainPhotoExif: { 3567 lexicon: 1, 3568 id: 'social.grain.photo.exif', 3569 defs: { 3570 main: { 3571 type: 'record', 3572 description: 3573 'Basic EXIF metadata for a photo. Integers are scaled by 1000000 to accommodate decimal values and potentially other tags in the future.', 3574 key: 'tid', 3575 record: { 3576 type: 'object', 3577 required: ['photo', 'createdAt'], 3578 properties: { 3579 photo: { 3580 type: 'string', 3581 format: 'at-uri', 3582 }, 3583 createdAt: { 3584 type: 'string', 3585 format: 'datetime', 3586 }, 3587 dateTimeOriginal: { 3588 type: 'string', 3589 format: 'datetime', 3590 }, 3591 exposureTime: { 3592 type: 'integer', 3593 }, 3594 fNumber: { 3595 type: 'integer', 3596 }, 3597 flash: { 3598 type: 'string', 3599 }, 3600 focalLengthIn35mmFormat: { 3601 type: 'integer', 3602 }, 3603 iSO: { 3604 type: 'integer', 3605 }, 3606 lensMake: { 3607 type: 'string', 3608 }, 3609 lensModel: { 3610 type: 'string', 3611 }, 3612 make: { 3613 type: 'string', 3614 }, 3615 model: { 3616 type: 'string', 3617 }, 3618 }, 3619 }, 3620 }, 3621 }, 3622 }, 3623 SocialGrainPhoto: { 3624 lexicon: 1, 3625 id: 'social.grain.photo', 3626 defs: { 3627 main: { 3628 type: 'record', 3629 key: 'tid', 3630 record: { 3631 type: 'object', 3632 required: ['photo', 'alt'], 3633 properties: { 3634 photo: { 3635 type: 'blob', 3636 accept: ['image/*'], 3637 maxSize: 1000000, 3638 }, 3639 alt: { 3640 type: 'string', 3641 description: 3642 'Alt text description of the image, for accessibility.', 3643 }, 3644 aspectRatio: { 3645 type: 'ref', 3646 ref: 'lex:social.grain.defs#aspectRatio', 3647 }, 3648 createdAt: { 3649 type: 'string', 3650 format: 'datetime', 3651 }, 3652 }, 3653 }, 3654 }, 3655 }, 3656 }, 3657 ComAtprotoLabelDefs: { 3658 lexicon: 1, 3659 id: 'com.atproto.label.defs', 3660 defs: { 3661 label: { 3662 type: 'object', 3663 required: ['src', 'uri', 'val', 'cts'], 3664 properties: { 3665 cid: { 3666 type: 'string', 3667 format: 'cid', 3668 description: 3669 "Optionally, CID specifying the specific version of 'uri' resource this label applies to.", 3670 }, 3671 cts: { 3672 type: 'string', 3673 format: 'datetime', 3674 description: 'Timestamp when this label was created.', 3675 }, 3676 exp: { 3677 type: 'string', 3678 format: 'datetime', 3679 description: 3680 'Timestamp at which this label expires (no longer applies).', 3681 }, 3682 neg: { 3683 type: 'boolean', 3684 description: 3685 'If true, this is a negation label, overwriting a previous label.', 3686 }, 3687 sig: { 3688 type: 'bytes', 3689 description: 'Signature of dag-cbor encoded label.', 3690 }, 3691 src: { 3692 type: 'string', 3693 format: 'did', 3694 description: 'DID of the actor who created this label.', 3695 }, 3696 uri: { 3697 type: 'string', 3698 format: 'uri', 3699 description: 3700 'AT URI of the record, repository (account), or other resource that this label applies to.', 3701 }, 3702 val: { 3703 type: 'string', 3704 maxLength: 128, 3705 description: 3706 'The short string name of the value or type of this label.', 3707 }, 3708 ver: { 3709 type: 'integer', 3710 description: 'The AT Protocol version of the label object.', 3711 }, 3712 }, 3713 description: 3714 'Metadata tag on an atproto resource (eg, repo or record).', 3715 }, 3716 selfLabel: { 3717 type: 'object', 3718 required: ['val'], 3719 properties: { 3720 val: { 3721 type: 'string', 3722 maxLength: 128, 3723 description: 3724 'The short string name of the value or type of this label.', 3725 }, 3726 }, 3727 description: 3728 'Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.', 3729 }, 3730 labelValue: { 3731 type: 'string', 3732 knownValues: [ 3733 '!hide', 3734 '!no-promote', 3735 '!warn', 3736 '!no-unauthenticated', 3737 'dmca-violation', 3738 'doxxing', 3739 'porn', 3740 'sexual', 3741 'nudity', 3742 'nsfl', 3743 'gore', 3744 ], 3745 }, 3746 selfLabels: { 3747 type: 'object', 3748 required: ['values'], 3749 properties: { 3750 values: { 3751 type: 'array', 3752 items: { 3753 ref: 'lex:com.atproto.label.defs#selfLabel', 3754 type: 'ref', 3755 }, 3756 maxLength: 10, 3757 }, 3758 }, 3759 description: 3760 'Metadata tags on an atproto record, published by the author within the record.', 3761 }, 3762 labelValueDefinition: { 3763 type: 'object', 3764 required: ['identifier', 'severity', 'blurs', 'locales'], 3765 properties: { 3766 blurs: { 3767 type: 'string', 3768 description: 3769 "What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing.", 3770 knownValues: ['content', 'media', 'none'], 3771 }, 3772 locales: { 3773 type: 'array', 3774 items: { 3775 ref: 'lex:com.atproto.label.defs#labelValueDefinitionStrings', 3776 type: 'ref', 3777 }, 3778 }, 3779 severity: { 3780 type: 'string', 3781 description: 3782 "How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.", 3783 knownValues: ['inform', 'alert', 'none'], 3784 }, 3785 adultOnly: { 3786 type: 'boolean', 3787 description: 3788 'Does the user need to have adult content enabled in order to configure this label?', 3789 }, 3790 identifier: { 3791 type: 'string', 3792 maxLength: 100, 3793 description: 3794 "The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).", 3795 maxGraphemes: 100, 3796 }, 3797 defaultSetting: { 3798 type: 'string', 3799 default: 'warn', 3800 description: 'The default setting for this label.', 3801 knownValues: ['ignore', 'warn', 'hide'], 3802 }, 3803 }, 3804 description: 3805 'Declares a label value and its expected interpretations and behaviors.', 3806 }, 3807 labelValueDefinitionStrings: { 3808 type: 'object', 3809 required: ['lang', 'name', 'description'], 3810 properties: { 3811 lang: { 3812 type: 'string', 3813 format: 'language', 3814 description: 3815 'The code of the language these strings are written in.', 3816 }, 3817 name: { 3818 type: 'string', 3819 maxLength: 640, 3820 description: 'A short human-readable name for the label.', 3821 maxGraphemes: 64, 3822 }, 3823 description: { 3824 type: 'string', 3825 maxLength: 100000, 3826 description: 3827 'A longer description of what the label means and why it might be applied.', 3828 maxGraphemes: 10000, 3829 }, 3830 }, 3831 description: 3832 'Strings which describe the label in the UI, localized into a specific language.', 3833 }, 3834 }, 3835 }, 3836 ComAtprotoRepoStrongRef: { 3837 lexicon: 1, 3838 id: 'com.atproto.repo.strongRef', 3839 description: 'A URI with a content-hash fingerprint.', 3840 defs: { 3841 main: { 3842 type: 'object', 3843 required: ['uri', 'cid'], 3844 properties: { 3845 cid: { 3846 type: 'string', 3847 format: 'cid', 3848 }, 3849 uri: { 3850 type: 'string', 3851 format: 'at-uri', 3852 }, 3853 }, 3854 }, 3855 }, 3856 }, 3857 ComAtprotoModerationDefs: { 3858 lexicon: 1, 3859 id: 'com.atproto.moderation.defs', 3860 defs: { 3861 reasonRude: { 3862 type: 'token', 3863 description: 3864 'Rude, harassing, explicit, or otherwise unwelcoming behavior', 3865 }, 3866 reasonSpam: { 3867 type: 'token', 3868 description: 'Spam: frequent unwanted promotion, replies, mentions', 3869 }, 3870 reasonType: { 3871 type: 'string', 3872 knownValues: [ 3873 'com.atproto.moderation.defs#reasonSpam', 3874 'com.atproto.moderation.defs#reasonViolation', 3875 'com.atproto.moderation.defs#reasonMisleading', 3876 'com.atproto.moderation.defs#reasonSexual', 3877 'com.atproto.moderation.defs#reasonRude', 3878 'com.atproto.moderation.defs#reasonOther', 3879 'com.atproto.moderation.defs#reasonAppeal', 3880 ], 3881 }, 3882 reasonOther: { 3883 type: 'token', 3884 description: 'Other: reports not falling under another report category', 3885 }, 3886 subjectType: { 3887 type: 'string', 3888 description: 'Tag describing a type of subject that might be reported.', 3889 knownValues: ['account', 'record', 'chat'], 3890 }, 3891 reasonAppeal: { 3892 type: 'token', 3893 description: 'Appeal: appeal a previously taken moderation action', 3894 }, 3895 reasonSexual: { 3896 type: 'token', 3897 description: 'Unwanted or mislabeled sexual content', 3898 }, 3899 reasonViolation: { 3900 type: 'token', 3901 description: 'Direct violation of server rules, laws, terms of service', 3902 }, 3903 reasonMisleading: { 3904 type: 'token', 3905 description: 'Misleading identity, affiliation, or content', 3906 }, 3907 }, 3908 }, 3909} as const satisfies Record<string, LexiconDoc> 3910export const schemas = Object.values(schemaDict) satisfies LexiconDoc[] 3911export const lexicons: Lexicons = new Lexicons(schemas) 3912 3913export function validate<T extends { $type: string }>( 3914 v: unknown, 3915 id: string, 3916 hash: string, 3917 requiredType: true, 3918): ValidationResult<T> 3919export function validate<T extends { $type?: string }>( 3920 v: unknown, 3921 id: string, 3922 hash: string, 3923 requiredType?: false, 3924): ValidationResult<T> 3925export function validate( 3926 v: unknown, 3927 id: string, 3928 hash: string, 3929 requiredType?: boolean, 3930): ValidationResult { 3931 return (requiredType ? is$typed : maybe$typed)(v, id, hash) 3932 ? lexicons.validate(`${id}#${hash}`, v) 3933 : { 3934 success: false, 3935 error: new ValidationError( 3936 `Must be an object with "${hash === 'main' ? id : `${id}#${hash}`}" $type property`, 3937 ), 3938 } 3939} 3940 3941export const ids = { 3942 AppBskyEmbedDefs: 'app.bsky.embed.defs', 3943 AppBskyEmbedRecord: 'app.bsky.embed.record', 3944 AppBskyEmbedImages: 'app.bsky.embed.images', 3945 AppBskyEmbedRecordWithMedia: 'app.bsky.embed.recordWithMedia', 3946 AppBskyEmbedVideo: 'app.bsky.embed.video', 3947 AppBskyEmbedExternal: 'app.bsky.embed.external', 3948 AppBskyGraphFollow: 'app.bsky.graph.follow', 3949 AppBskyGraphDefs: 'app.bsky.graph.defs', 3950 AppBskyFeedDefs: 'app.bsky.feed.defs', 3951 AppBskyFeedPostgate: 'app.bsky.feed.postgate', 3952 AppBskyFeedThreadgate: 'app.bsky.feed.threadgate', 3953 AppBskyRichtextFacet: 'app.bsky.richtext.facet', 3954 AppBskyActorDefs: 'app.bsky.actor.defs', 3955 AppBskyActorProfile: 'app.bsky.actor.profile', 3956 AppBskyLabelerDefs: 'app.bsky.labeler.defs', 3957 ShTangledGraphFollow: 'sh.tangled.graph.follow', 3958 ShTangledActorProfile: 'sh.tangled.actor.profile', 3959 SocialGrainDefs: 'social.grain.defs', 3960 SocialGrainNotificationDefs: 'social.grain.notification.defs', 3961 SocialGrainNotificationGetNotifications: 3962 'social.grain.notification.getNotifications', 3963 SocialGrainCommentDefs: 'social.grain.comment.defs', 3964 SocialGrainComment: 'social.grain.comment', 3965 SocialGrainGalleryItem: 'social.grain.gallery.item', 3966 SocialGrainGalleryDefs: 'social.grain.gallery.defs', 3967 SocialGrainGallery: 'social.grain.gallery', 3968 SocialGrainGalleryGetGalleryThread: 'social.grain.gallery.getGalleryThread', 3969 SocialGrainGalleryGetActorGalleries: 'social.grain.gallery.getActorGalleries', 3970 SocialGrainGalleryGetGallery: 'social.grain.gallery.getGallery', 3971 SocialGrainGraphFollow: 'social.grain.graph.follow', 3972 SocialGrainLabelerDefs: 'social.grain.labeler.defs', 3973 SocialGrainLabelerService: 'social.grain.labeler.service', 3974 SocialGrainFeedGetTimeline: 'social.grain.feed.getTimeline', 3975 SocialGrainFavorite: 'social.grain.favorite', 3976 SocialGrainActorDefs: 'social.grain.actor.defs', 3977 SocialGrainActorGetProfile: 'social.grain.actor.getProfile', 3978 SocialGrainActorSearchActors: 'social.grain.actor.searchActors', 3979 SocialGrainActorGetActorFavs: 'social.grain.actor.getActorFavs', 3980 SocialGrainActorProfile: 'social.grain.actor.profile', 3981 SocialGrainPhotoDefs: 'social.grain.photo.defs', 3982 SocialGrainPhotoExif: 'social.grain.photo.exif', 3983 SocialGrainPhoto: 'social.grain.photo', 3984 ComAtprotoLabelDefs: 'com.atproto.label.defs', 3985 ComAtprotoRepoStrongRef: 'com.atproto.repo.strongRef', 3986 ComAtprotoModerationDefs: 'com.atproto.moderation.defs', 3987} as const