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 SocialGrainDefs: { 2300 lexicon: 1, 2301 id: 'social.grain.defs', 2302 defs: { 2303 aspectRatio: { 2304 type: 'object', 2305 description: 2306 'width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit.', 2307 required: ['width', 'height'], 2308 properties: { 2309 width: { 2310 type: 'integer', 2311 minimum: 1, 2312 }, 2313 height: { 2314 type: 'integer', 2315 minimum: 1, 2316 }, 2317 }, 2318 }, 2319 }, 2320 }, 2321 SocialGrainGalleryItem: { 2322 lexicon: 1, 2323 id: 'social.grain.gallery.item', 2324 defs: { 2325 main: { 2326 type: 'record', 2327 key: 'tid', 2328 record: { 2329 type: 'object', 2330 required: ['createdAt', 'gallery', 'item'], 2331 properties: { 2332 createdAt: { 2333 type: 'string', 2334 format: 'datetime', 2335 }, 2336 gallery: { 2337 type: 'string', 2338 format: 'at-uri', 2339 }, 2340 item: { 2341 type: 'string', 2342 format: 'at-uri', 2343 }, 2344 position: { 2345 type: 'integer', 2346 default: 0, 2347 }, 2348 }, 2349 }, 2350 }, 2351 }, 2352 }, 2353 SocialGrainGalleryDefs: { 2354 lexicon: 1, 2355 id: 'social.grain.gallery.defs', 2356 defs: { 2357 galleryView: { 2358 type: 'object', 2359 required: ['uri', 'cid', 'creator', 'record', 'indexedAt'], 2360 properties: { 2361 uri: { 2362 type: 'string', 2363 format: 'at-uri', 2364 }, 2365 cid: { 2366 type: 'string', 2367 format: 'cid', 2368 }, 2369 creator: { 2370 type: 'ref', 2371 ref: 'lex:social.grain.actor.defs#profileView', 2372 }, 2373 record: { 2374 type: 'unknown', 2375 }, 2376 items: { 2377 type: 'array', 2378 items: { 2379 type: 'union', 2380 refs: ['lex:social.grain.photo.defs#photoView'], 2381 }, 2382 }, 2383 indexedAt: { 2384 type: 'string', 2385 format: 'datetime', 2386 }, 2387 }, 2388 }, 2389 }, 2390 }, 2391 SocialGrainGallery: { 2392 lexicon: 1, 2393 id: 'social.grain.gallery', 2394 defs: { 2395 main: { 2396 type: 'record', 2397 key: 'tid', 2398 record: { 2399 type: 'object', 2400 required: ['title', 'createdAt'], 2401 properties: { 2402 title: { 2403 type: 'string', 2404 maxLength: 100, 2405 }, 2406 description: { 2407 type: 'string', 2408 maxLength: 1000, 2409 }, 2410 createdAt: { 2411 type: 'string', 2412 format: 'datetime', 2413 }, 2414 }, 2415 }, 2416 }, 2417 }, 2418 }, 2419 SocialGrainFavorite: { 2420 lexicon: 1, 2421 id: 'social.grain.favorite', 2422 defs: { 2423 main: { 2424 type: 'record', 2425 key: 'tid', 2426 record: { 2427 type: 'object', 2428 required: ['createdAt', 'subject'], 2429 properties: { 2430 createdAt: { 2431 type: 'string', 2432 format: 'datetime', 2433 }, 2434 subject: { 2435 type: 'string', 2436 format: 'at-uri', 2437 }, 2438 }, 2439 }, 2440 }, 2441 }, 2442 }, 2443 SocialGrainActorDefs: { 2444 lexicon: 1, 2445 id: 'social.grain.actor.defs', 2446 defs: { 2447 profileView: { 2448 type: 'object', 2449 required: ['did', 'handle'], 2450 properties: { 2451 did: { 2452 type: 'string', 2453 format: 'did', 2454 }, 2455 handle: { 2456 type: 'string', 2457 format: 'handle', 2458 }, 2459 displayName: { 2460 type: 'string', 2461 maxGraphemes: 64, 2462 maxLength: 640, 2463 }, 2464 description: { 2465 type: 'string', 2466 maxLength: 2560, 2467 maxGraphemes: 256, 2468 }, 2469 avatar: { 2470 type: 'string', 2471 format: 'uri', 2472 }, 2473 createdAt: { 2474 type: 'string', 2475 format: 'datetime', 2476 }, 2477 }, 2478 }, 2479 }, 2480 }, 2481 SocialGrainActorProfile: { 2482 lexicon: 1, 2483 id: 'social.grain.actor.profile', 2484 defs: { 2485 main: { 2486 type: 'record', 2487 description: 'A declaration of a basic account profile.', 2488 key: 'literal:self', 2489 record: { 2490 type: 'object', 2491 properties: { 2492 displayName: { 2493 type: 'string', 2494 maxGraphemes: 64, 2495 maxLength: 640, 2496 }, 2497 description: { 2498 type: 'string', 2499 description: 'Free-form profile description text.', 2500 maxGraphemes: 256, 2501 maxLength: 2560, 2502 }, 2503 avatar: { 2504 type: 'blob', 2505 description: 2506 "Small image to be displayed next to posts from account. AKA, 'profile picture'", 2507 accept: ['image/png', 'image/jpeg'], 2508 maxSize: 1000000, 2509 }, 2510 createdAt: { 2511 type: 'string', 2512 format: 'datetime', 2513 }, 2514 }, 2515 }, 2516 }, 2517 }, 2518 }, 2519 SocialGrainPhotoDefs: { 2520 lexicon: 1, 2521 id: 'social.grain.photo.defs', 2522 defs: { 2523 photoView: { 2524 type: 'object', 2525 required: ['uri', 'cid', 'thumb', 'fullsize', 'alt'], 2526 properties: { 2527 uri: { 2528 type: 'string', 2529 format: 'at-uri', 2530 }, 2531 cid: { 2532 type: 'string', 2533 format: 'cid', 2534 }, 2535 thumb: { 2536 type: 'string', 2537 format: 'uri', 2538 description: 2539 'Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View.', 2540 }, 2541 fullsize: { 2542 type: 'string', 2543 format: 'uri', 2544 description: 2545 '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.', 2546 }, 2547 alt: { 2548 type: 'string', 2549 description: 2550 'Alt text description of the image, for accessibility.', 2551 }, 2552 aspectRatio: { 2553 type: 'ref', 2554 ref: 'lex:social.grain.defs#aspectRatio', 2555 }, 2556 }, 2557 }, 2558 }, 2559 }, 2560 SocialGrainPhoto: { 2561 lexicon: 1, 2562 id: 'social.grain.photo', 2563 defs: { 2564 main: { 2565 type: 'record', 2566 key: 'tid', 2567 record: { 2568 type: 'object', 2569 required: ['photo', 'alt'], 2570 properties: { 2571 photo: { 2572 type: 'blob', 2573 accept: ['image/*'], 2574 maxSize: 1000000, 2575 }, 2576 alt: { 2577 type: 'string', 2578 description: 2579 'Alt text description of the image, for accessibility.', 2580 }, 2581 aspectRatio: { 2582 type: 'ref', 2583 ref: 'lex:social.grain.defs#aspectRatio', 2584 }, 2585 createdAt: { 2586 type: 'string', 2587 format: 'datetime', 2588 }, 2589 }, 2590 }, 2591 }, 2592 }, 2593 }, 2594 ComAtprotoLabelDefs: { 2595 lexicon: 1, 2596 id: 'com.atproto.label.defs', 2597 defs: { 2598 label: { 2599 type: 'object', 2600 required: ['src', 'uri', 'val', 'cts'], 2601 properties: { 2602 cid: { 2603 type: 'string', 2604 format: 'cid', 2605 description: 2606 "Optionally, CID specifying the specific version of 'uri' resource this label applies to.", 2607 }, 2608 cts: { 2609 type: 'string', 2610 format: 'datetime', 2611 description: 'Timestamp when this label was created.', 2612 }, 2613 exp: { 2614 type: 'string', 2615 format: 'datetime', 2616 description: 2617 'Timestamp at which this label expires (no longer applies).', 2618 }, 2619 neg: { 2620 type: 'boolean', 2621 description: 2622 'If true, this is a negation label, overwriting a previous label.', 2623 }, 2624 sig: { 2625 type: 'bytes', 2626 description: 'Signature of dag-cbor encoded label.', 2627 }, 2628 src: { 2629 type: 'string', 2630 format: 'did', 2631 description: 'DID of the actor who created this label.', 2632 }, 2633 uri: { 2634 type: 'string', 2635 format: 'uri', 2636 description: 2637 'AT URI of the record, repository (account), or other resource that this label applies to.', 2638 }, 2639 val: { 2640 type: 'string', 2641 maxLength: 128, 2642 description: 2643 'The short string name of the value or type of this label.', 2644 }, 2645 ver: { 2646 type: 'integer', 2647 description: 'The AT Protocol version of the label object.', 2648 }, 2649 }, 2650 description: 2651 'Metadata tag on an atproto resource (eg, repo or record).', 2652 }, 2653 selfLabel: { 2654 type: 'object', 2655 required: ['val'], 2656 properties: { 2657 val: { 2658 type: 'string', 2659 maxLength: 128, 2660 description: 2661 'The short string name of the value or type of this label.', 2662 }, 2663 }, 2664 description: 2665 'Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.', 2666 }, 2667 labelValue: { 2668 type: 'string', 2669 knownValues: [ 2670 '!hide', 2671 '!no-promote', 2672 '!warn', 2673 '!no-unauthenticated', 2674 'dmca-violation', 2675 'doxxing', 2676 'porn', 2677 'sexual', 2678 'nudity', 2679 'nsfl', 2680 'gore', 2681 ], 2682 }, 2683 selfLabels: { 2684 type: 'object', 2685 required: ['values'], 2686 properties: { 2687 values: { 2688 type: 'array', 2689 items: { 2690 ref: 'lex:com.atproto.label.defs#selfLabel', 2691 type: 'ref', 2692 }, 2693 maxLength: 10, 2694 }, 2695 }, 2696 description: 2697 'Metadata tags on an atproto record, published by the author within the record.', 2698 }, 2699 labelValueDefinition: { 2700 type: 'object', 2701 required: ['identifier', 'severity', 'blurs', 'locales'], 2702 properties: { 2703 blurs: { 2704 type: 'string', 2705 description: 2706 "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.", 2707 knownValues: ['content', 'media', 'none'], 2708 }, 2709 locales: { 2710 type: 'array', 2711 items: { 2712 ref: 'lex:com.atproto.label.defs#labelValueDefinitionStrings', 2713 type: 'ref', 2714 }, 2715 }, 2716 severity: { 2717 type: 'string', 2718 description: 2719 "How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.", 2720 knownValues: ['inform', 'alert', 'none'], 2721 }, 2722 adultOnly: { 2723 type: 'boolean', 2724 description: 2725 'Does the user need to have adult content enabled in order to configure this label?', 2726 }, 2727 identifier: { 2728 type: 'string', 2729 maxLength: 100, 2730 description: 2731 "The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).", 2732 maxGraphemes: 100, 2733 }, 2734 defaultSetting: { 2735 type: 'string', 2736 default: 'warn', 2737 description: 'The default setting for this label.', 2738 knownValues: ['ignore', 'warn', 'hide'], 2739 }, 2740 }, 2741 description: 2742 'Declares a label value and its expected interpretations and behaviors.', 2743 }, 2744 labelValueDefinitionStrings: { 2745 type: 'object', 2746 required: ['lang', 'name', 'description'], 2747 properties: { 2748 lang: { 2749 type: 'string', 2750 format: 'language', 2751 description: 2752 'The code of the language these strings are written in.', 2753 }, 2754 name: { 2755 type: 'string', 2756 maxLength: 640, 2757 description: 'A short human-readable name for the label.', 2758 maxGraphemes: 64, 2759 }, 2760 description: { 2761 type: 'string', 2762 maxLength: 100000, 2763 description: 2764 'A longer description of what the label means and why it might be applied.', 2765 maxGraphemes: 10000, 2766 }, 2767 }, 2768 description: 2769 'Strings which describe the label in the UI, localized into a specific language.', 2770 }, 2771 }, 2772 }, 2773 ComAtprotoRepoStrongRef: { 2774 lexicon: 1, 2775 id: 'com.atproto.repo.strongRef', 2776 description: 'A URI with a content-hash fingerprint.', 2777 defs: { 2778 main: { 2779 type: 'object', 2780 required: ['uri', 'cid'], 2781 properties: { 2782 cid: { 2783 type: 'string', 2784 format: 'cid', 2785 }, 2786 uri: { 2787 type: 'string', 2788 format: 'at-uri', 2789 }, 2790 }, 2791 }, 2792 }, 2793 }, 2794} as const satisfies Record<string, LexiconDoc> 2795export const schemas = Object.values(schemaDict) satisfies LexiconDoc[] 2796export const lexicons: Lexicons = new Lexicons(schemas) 2797 2798export function validate<T extends { $type: string }>( 2799 v: unknown, 2800 id: string, 2801 hash: string, 2802 requiredType: true, 2803): ValidationResult<T> 2804export function validate<T extends { $type?: string }>( 2805 v: unknown, 2806 id: string, 2807 hash: string, 2808 requiredType?: false, 2809): ValidationResult<T> 2810export function validate( 2811 v: unknown, 2812 id: string, 2813 hash: string, 2814 requiredType?: boolean, 2815): ValidationResult { 2816 return (requiredType ? is$typed : maybe$typed)(v, id, hash) 2817 ? lexicons.validate(`${id}#${hash}`, v) 2818 : { 2819 success: false, 2820 error: new ValidationError( 2821 `Must be an object with "${hash === 'main' ? id : `${id}#${hash}`}" $type property`, 2822 ), 2823 } 2824} 2825 2826export const ids = { 2827 AppBskyEmbedDefs: 'app.bsky.embed.defs', 2828 AppBskyEmbedRecord: 'app.bsky.embed.record', 2829 AppBskyEmbedImages: 'app.bsky.embed.images', 2830 AppBskyEmbedRecordWithMedia: 'app.bsky.embed.recordWithMedia', 2831 AppBskyEmbedVideo: 'app.bsky.embed.video', 2832 AppBskyEmbedExternal: 'app.bsky.embed.external', 2833 AppBskyGraphFollow: 'app.bsky.graph.follow', 2834 AppBskyGraphDefs: 'app.bsky.graph.defs', 2835 AppBskyFeedDefs: 'app.bsky.feed.defs', 2836 AppBskyFeedPostgate: 'app.bsky.feed.postgate', 2837 AppBskyFeedThreadgate: 'app.bsky.feed.threadgate', 2838 AppBskyRichtextFacet: 'app.bsky.richtext.facet', 2839 AppBskyActorDefs: 'app.bsky.actor.defs', 2840 AppBskyActorProfile: 'app.bsky.actor.profile', 2841 AppBskyLabelerDefs: 'app.bsky.labeler.defs', 2842 SocialGrainDefs: 'social.grain.defs', 2843 SocialGrainGalleryItem: 'social.grain.gallery.item', 2844 SocialGrainGalleryDefs: 'social.grain.gallery.defs', 2845 SocialGrainGallery: 'social.grain.gallery', 2846 SocialGrainFavorite: 'social.grain.favorite', 2847 SocialGrainActorDefs: 'social.grain.actor.defs', 2848 SocialGrainActorProfile: 'social.grain.actor.profile', 2849 SocialGrainPhotoDefs: 'social.grain.photo.defs', 2850 SocialGrainPhoto: 'social.grain.photo', 2851 ComAtprotoLabelDefs: 'com.atproto.label.defs', 2852 ComAtprotoRepoStrongRef: 'com.atproto.repo.strongRef', 2853} as const