the statusphere demo reworked into a vite/react app in a monorepo

Compare changes

Choose any two refs to compare.

+677 -13
lexicons/app/bsky/actor/defs.json
··· 2 "lexicon": 1, 3 "id": "app.bsky.actor.defs", 4 "defs": { 5 "profileView": { 6 "type": "object", 7 - "required": ["did", "handle"], 8 "properties": { 9 - "did": { "type": "string", "format": "did" }, 10 - "handle": { "type": "string", "format": "handle" }, 11 "displayName": { 12 "type": "string", 13 - "maxGraphemes": 64, 14 - "maxLength": 640 15 }, 16 - "description": { 17 "type": "string", 18 - "maxGraphemes": 256, 19 - "maxLength": 2560 20 }, 21 - "avatar": { "type": "string", "format": "uri" }, 22 - "indexedAt": { "type": "string", "format": "datetime" }, 23 - "createdAt": { "type": "string", "format": "datetime" }, 24 "labels": { 25 "type": "array", 26 - "items": { "type": "ref", "ref": "com.atproto.label.defs#label" } 27 } 28 } 29 } 30 } 31 - }
··· 2 "lexicon": 1, 3 "id": "app.bsky.actor.defs", 4 "defs": { 5 + "nux": { 6 + "type": "object", 7 + "required": [ 8 + "id", 9 + "completed" 10 + ], 11 + "properties": { 12 + "id": { 13 + "type": "string", 14 + "maxLength": 100 15 + }, 16 + "data": { 17 + "type": "string", 18 + "maxLength": 3000, 19 + "description": "Arbitrary data for the NUX. The structure is defined by the NUX itself. Limited to 300 characters.", 20 + "maxGraphemes": 300 21 + }, 22 + "completed": { 23 + "type": "boolean", 24 + "default": false 25 + }, 26 + "expiresAt": { 27 + "type": "string", 28 + "format": "datetime", 29 + "description": "The date and time at which the NUX will expire and should be considered completed." 30 + } 31 + }, 32 + "description": "A new user experiences (NUX) storage object" 33 + }, 34 + "mutedWord": { 35 + "type": "object", 36 + "required": [ 37 + "value", 38 + "targets" 39 + ], 40 + "properties": { 41 + "id": { 42 + "type": "string" 43 + }, 44 + "value": { 45 + "type": "string", 46 + "maxLength": 10000, 47 + "description": "The muted word itself.", 48 + "maxGraphemes": 1000 49 + }, 50 + "targets": { 51 + "type": "array", 52 + "items": { 53 + "ref": "app.bsky.actor.defs#mutedWordTarget", 54 + "type": "ref" 55 + }, 56 + "description": "The intended targets of the muted word." 57 + }, 58 + "expiresAt": { 59 + "type": "string", 60 + "format": "datetime", 61 + "description": "The date and time at which the muted word will expire and no longer be applied." 62 + }, 63 + "actorTarget": { 64 + "type": "string", 65 + "default": "all", 66 + "description": "Groups of users to apply the muted word to. If undefined, applies to all users.", 67 + "knownValues": [ 68 + "all", 69 + "exclude-following" 70 + ] 71 + } 72 + }, 73 + "description": "A word that the account owner has muted." 74 + }, 75 + "savedFeed": { 76 + "type": "object", 77 + "required": [ 78 + "id", 79 + "type", 80 + "value", 81 + "pinned" 82 + ], 83 + "properties": { 84 + "id": { 85 + "type": "string" 86 + }, 87 + "type": { 88 + "type": "string", 89 + "knownValues": [ 90 + "feed", 91 + "list", 92 + "timeline" 93 + ] 94 + }, 95 + "value": { 96 + "type": "string" 97 + }, 98 + "pinned": { 99 + "type": "boolean" 100 + } 101 + } 102 + }, 103 + "preferences": { 104 + "type": "array", 105 + "items": { 106 + "refs": [ 107 + "#adultContentPref", 108 + "#contentLabelPref", 109 + "#savedFeedsPref", 110 + "#savedFeedsPrefV2", 111 + "#personalDetailsPref", 112 + "#feedViewPref", 113 + "#threadViewPref", 114 + "#interestsPref", 115 + "#mutedWordsPref", 116 + "#hiddenPostsPref", 117 + "#bskyAppStatePref", 118 + "#labelersPref", 119 + "#postInteractionSettingsPref" 120 + ], 121 + "type": "union" 122 + } 123 + }, 124 "profileView": { 125 "type": "object", 126 + "required": [ 127 + "did", 128 + "handle" 129 + ], 130 "properties": { 131 + "did": { 132 + "type": "string", 133 + "format": "did" 134 + }, 135 + "avatar": { 136 + "type": "string", 137 + "format": "uri" 138 + }, 139 + "handle": { 140 + "type": "string", 141 + "format": "handle" 142 + }, 143 + "labels": { 144 + "type": "array", 145 + "items": { 146 + "ref": "com.atproto.label.defs#label", 147 + "type": "ref" 148 + } 149 + }, 150 + "viewer": { 151 + "ref": "#viewerState", 152 + "type": "ref" 153 + }, 154 + "createdAt": { 155 + "type": "string", 156 + "format": "datetime" 157 + }, 158 + "indexedAt": { 159 + "type": "string", 160 + "format": "datetime" 161 + }, 162 + "associated": { 163 + "ref": "#profileAssociated", 164 + "type": "ref" 165 + }, 166 + "description": { 167 + "type": "string", 168 + "maxLength": 2560, 169 + "maxGraphemes": 256 170 + }, 171 "displayName": { 172 "type": "string", 173 + "maxLength": 640, 174 + "maxGraphemes": 64 175 + } 176 + } 177 + }, 178 + "viewerState": { 179 + "type": "object", 180 + "properties": { 181 + "muted": { 182 + "type": "boolean" 183 }, 184 + "blocking": { 185 "type": "string", 186 + "format": "at-uri" 187 + }, 188 + "blockedBy": { 189 + "type": "boolean" 190 + }, 191 + "following": { 192 + "type": "string", 193 + "format": "at-uri" 194 + }, 195 + "followedBy": { 196 + "type": "string", 197 + "format": "at-uri" 198 + }, 199 + "mutedByList": { 200 + "ref": "app.bsky.graph.defs#listViewBasic", 201 + "type": "ref" 202 + }, 203 + "blockingByList": { 204 + "ref": "app.bsky.graph.defs#listViewBasic", 205 + "type": "ref" 206 }, 207 + "knownFollowers": { 208 + "ref": "#knownFollowers", 209 + "type": "ref" 210 + } 211 + }, 212 + "description": "Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests." 213 + }, 214 + "feedViewPref": { 215 + "type": "object", 216 + "required": [ 217 + "feed" 218 + ], 219 + "properties": { 220 + "feed": { 221 + "type": "string", 222 + "description": "The URI of the feed, or an identifier which describes the feed." 223 + }, 224 + "hideReplies": { 225 + "type": "boolean", 226 + "description": "Hide replies in the feed." 227 + }, 228 + "hideReposts": { 229 + "type": "boolean", 230 + "description": "Hide reposts in the feed." 231 + }, 232 + "hideQuotePosts": { 233 + "type": "boolean", 234 + "description": "Hide quote posts in the feed." 235 + }, 236 + "hideRepliesByLikeCount": { 237 + "type": "integer", 238 + "description": "Hide replies in the feed if they do not have this number of likes." 239 + }, 240 + "hideRepliesByUnfollowed": { 241 + "type": "boolean", 242 + "default": true, 243 + "description": "Hide replies in the feed if they are not by followed users." 244 + } 245 + } 246 + }, 247 + "labelersPref": { 248 + "type": "object", 249 + "required": [ 250 + "labelers" 251 + ], 252 + "properties": { 253 + "labelers": { 254 + "type": "array", 255 + "items": { 256 + "ref": "#labelerPrefItem", 257 + "type": "ref" 258 + } 259 + } 260 + } 261 + }, 262 + "interestsPref": { 263 + "type": "object", 264 + "required": [ 265 + "tags" 266 + ], 267 + "properties": { 268 + "tags": { 269 + "type": "array", 270 + "items": { 271 + "type": "string", 272 + "maxLength": 640, 273 + "maxGraphemes": 64 274 + }, 275 + "maxLength": 100, 276 + "description": "A list of tags which describe the account owner's interests gathered during onboarding." 277 + } 278 + } 279 + }, 280 + "knownFollowers": { 281 + "type": "object", 282 + "required": [ 283 + "count", 284 + "followers" 285 + ], 286 + "properties": { 287 + "count": { 288 + "type": "integer" 289 + }, 290 + "followers": { 291 + "type": "array", 292 + "items": { 293 + "ref": "#profileViewBasic", 294 + "type": "ref" 295 + }, 296 + "maxLength": 5, 297 + "minLength": 0 298 + } 299 + }, 300 + "description": "The subject's followers whom you also follow" 301 + }, 302 + "mutedWordsPref": { 303 + "type": "object", 304 + "required": [ 305 + "items" 306 + ], 307 + "properties": { 308 + "items": { 309 + "type": "array", 310 + "items": { 311 + "ref": "app.bsky.actor.defs#mutedWord", 312 + "type": "ref" 313 + }, 314 + "description": "A list of words the account owner has muted." 315 + } 316 + } 317 + }, 318 + "savedFeedsPref": { 319 + "type": "object", 320 + "required": [ 321 + "pinned", 322 + "saved" 323 + ], 324 + "properties": { 325 + "saved": { 326 + "type": "array", 327 + "items": { 328 + "type": "string", 329 + "format": "at-uri" 330 + } 331 + }, 332 + "pinned": { 333 + "type": "array", 334 + "items": { 335 + "type": "string", 336 + "format": "at-uri" 337 + } 338 + }, 339 + "timelineIndex": { 340 + "type": "integer" 341 + } 342 + } 343 + }, 344 + "threadViewPref": { 345 + "type": "object", 346 + "properties": { 347 + "sort": { 348 + "type": "string", 349 + "description": "Sorting mode for threads.", 350 + "knownValues": [ 351 + "oldest", 352 + "newest", 353 + "most-likes", 354 + "random", 355 + "hotness" 356 + ] 357 + }, 358 + "prioritizeFollowedUsers": { 359 + "type": "boolean", 360 + "description": "Show followed users at the top of all replies." 361 + } 362 + } 363 + }, 364 + "hiddenPostsPref": { 365 + "type": "object", 366 + "required": [ 367 + "items" 368 + ], 369 + "properties": { 370 + "items": { 371 + "type": "array", 372 + "items": { 373 + "type": "string", 374 + "format": "at-uri" 375 + }, 376 + "description": "A list of URIs of posts the account owner has hidden." 377 + } 378 + } 379 + }, 380 + "labelerPrefItem": { 381 + "type": "object", 382 + "required": [ 383 + "did" 384 + ], 385 + "properties": { 386 + "did": { 387 + "type": "string", 388 + "format": "did" 389 + } 390 + } 391 + }, 392 + "mutedWordTarget": { 393 + "type": "string", 394 + "maxLength": 640, 395 + "knownValues": [ 396 + "content", 397 + "tag" 398 + ], 399 + "maxGraphemes": 64 400 + }, 401 + "adultContentPref": { 402 + "type": "object", 403 + "required": [ 404 + "enabled" 405 + ], 406 + "properties": { 407 + "enabled": { 408 + "type": "boolean", 409 + "default": false 410 + } 411 + } 412 + }, 413 + "bskyAppStatePref": { 414 + "type": "object", 415 + "properties": { 416 + "nuxs": { 417 + "type": "array", 418 + "items": { 419 + "ref": "app.bsky.actor.defs#nux", 420 + "type": "ref" 421 + }, 422 + "maxLength": 100, 423 + "description": "Storage for NUXs the user has encountered." 424 + }, 425 + "queuedNudges": { 426 + "type": "array", 427 + "items": { 428 + "type": "string", 429 + "maxLength": 100 430 + }, 431 + "maxLength": 1000, 432 + "description": "An array of tokens which identify nudges (modals, popups, tours, highlight dots) that should be shown to the user." 433 + }, 434 + "activeProgressGuide": { 435 + "ref": "#bskyAppProgressGuide", 436 + "type": "ref" 437 + } 438 + }, 439 + "description": "A grab bag of state that's specific to the bsky.app program. Third-party apps shouldn't use this." 440 + }, 441 + "contentLabelPref": { 442 + "type": "object", 443 + "required": [ 444 + "label", 445 + "visibility" 446 + ], 447 + "properties": { 448 + "label": { 449 + "type": "string" 450 + }, 451 + "labelerDid": { 452 + "type": "string", 453 + "format": "did", 454 + "description": "Which labeler does this preference apply to? If undefined, applies globally." 455 + }, 456 + "visibility": { 457 + "type": "string", 458 + "knownValues": [ 459 + "ignore", 460 + "show", 461 + "warn", 462 + "hide" 463 + ] 464 + } 465 + } 466 + }, 467 + "profileViewBasic": { 468 + "type": "object", 469 + "required": [ 470 + "did", 471 + "handle" 472 + ], 473 + "properties": { 474 + "did": { 475 + "type": "string", 476 + "format": "did" 477 + }, 478 + "avatar": { 479 + "type": "string", 480 + "format": "uri" 481 + }, 482 + "handle": { 483 + "type": "string", 484 + "format": "handle" 485 + }, 486 "labels": { 487 "type": "array", 488 + "items": { 489 + "ref": "com.atproto.label.defs#label", 490 + "type": "ref" 491 + } 492 + }, 493 + "viewer": { 494 + "ref": "#viewerState", 495 + "type": "ref" 496 + }, 497 + "createdAt": { 498 + "type": "string", 499 + "format": "datetime" 500 + }, 501 + "associated": { 502 + "ref": "#profileAssociated", 503 + "type": "ref" 504 + }, 505 + "displayName": { 506 + "type": "string", 507 + "maxLength": 640, 508 + "maxGraphemes": 64 509 + } 510 + } 511 + }, 512 + "savedFeedsPrefV2": { 513 + "type": "object", 514 + "required": [ 515 + "items" 516 + ], 517 + "properties": { 518 + "items": { 519 + "type": "array", 520 + "items": { 521 + "ref": "app.bsky.actor.defs#savedFeed", 522 + "type": "ref" 523 + } 524 + } 525 + } 526 + }, 527 + "profileAssociated": { 528 + "type": "object", 529 + "properties": { 530 + "chat": { 531 + "ref": "#profileAssociatedChat", 532 + "type": "ref" 533 + }, 534 + "lists": { 535 + "type": "integer" 536 + }, 537 + "labeler": { 538 + "type": "boolean" 539 + }, 540 + "feedgens": { 541 + "type": "integer" 542 + }, 543 + "starterPacks": { 544 + "type": "integer" 545 + } 546 + } 547 + }, 548 + "personalDetailsPref": { 549 + "type": "object", 550 + "properties": { 551 + "birthDate": { 552 + "type": "string", 553 + "format": "datetime", 554 + "description": "The birth date of account owner." 555 } 556 } 557 + }, 558 + "profileViewDetailed": { 559 + "type": "object", 560 + "required": [ 561 + "did", 562 + "handle" 563 + ], 564 + "properties": { 565 + "did": { 566 + "type": "string", 567 + "format": "did" 568 + }, 569 + "avatar": { 570 + "type": "string", 571 + "format": "uri" 572 + }, 573 + "banner": { 574 + "type": "string", 575 + "format": "uri" 576 + }, 577 + "handle": { 578 + "type": "string", 579 + "format": "handle" 580 + }, 581 + "labels": { 582 + "type": "array", 583 + "items": { 584 + "ref": "com.atproto.label.defs#label", 585 + "type": "ref" 586 + } 587 + }, 588 + "viewer": { 589 + "ref": "#viewerState", 590 + "type": "ref" 591 + }, 592 + "createdAt": { 593 + "type": "string", 594 + "format": "datetime" 595 + }, 596 + "indexedAt": { 597 + "type": "string", 598 + "format": "datetime" 599 + }, 600 + "associated": { 601 + "ref": "#profileAssociated", 602 + "type": "ref" 603 + }, 604 + "pinnedPost": { 605 + "ref": "com.atproto.repo.strongRef", 606 + "type": "ref" 607 + }, 608 + "postsCount": { 609 + "type": "integer" 610 + }, 611 + "description": { 612 + "type": "string", 613 + "maxLength": 2560, 614 + "maxGraphemes": 256 615 + }, 616 + "displayName": { 617 + "type": "string", 618 + "maxLength": 640, 619 + "maxGraphemes": 64 620 + }, 621 + "followsCount": { 622 + "type": "integer" 623 + }, 624 + "followersCount": { 625 + "type": "integer" 626 + }, 627 + "joinedViaStarterPack": { 628 + "ref": "app.bsky.graph.defs#starterPackViewBasic", 629 + "type": "ref" 630 + } 631 + } 632 + }, 633 + "bskyAppProgressGuide": { 634 + "type": "object", 635 + "required": [ 636 + "guide" 637 + ], 638 + "properties": { 639 + "guide": { 640 + "type": "string", 641 + "maxLength": 100 642 + } 643 + }, 644 + "description": "If set, an active progress guide. Once completed, can be set to undefined. Should have unspecced fields tracking progress." 645 + }, 646 + "profileAssociatedChat": { 647 + "type": "object", 648 + "required": [ 649 + "allowIncoming" 650 + ], 651 + "properties": { 652 + "allowIncoming": { 653 + "type": "string", 654 + "knownValues": [ 655 + "all", 656 + "none", 657 + "following" 658 + ] 659 + } 660 + } 661 + }, 662 + "postInteractionSettingsPref": { 663 + "type": "object", 664 + "required": [], 665 + "properties": { 666 + "threadgateAllowRules": { 667 + "type": "array", 668 + "items": { 669 + "refs": [ 670 + "app.bsky.feed.threadgate#mentionRule", 671 + "app.bsky.feed.threadgate#followerRule", 672 + "app.bsky.feed.threadgate#followingRule", 673 + "app.bsky.feed.threadgate#listRule" 674 + ], 675 + "type": "union" 676 + }, 677 + "maxLength": 5, 678 + "description": "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." 679 + }, 680 + "postgateEmbeddingRules": { 681 + "type": "array", 682 + "items": { 683 + "refs": [ 684 + "app.bsky.feed.postgate#disableRule" 685 + ], 686 + "type": "union" 687 + }, 688 + "maxLength": 5, 689 + "description": "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." 690 + } 691 + }, 692 + "description": "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." 693 } 694 } 695 + }
+24
lexicons/app/bsky/embed/defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.bsky.embed.defs", 4 + "defs": { 5 + "aspectRatio": { 6 + "type": "object", 7 + "required": [ 8 + "width", 9 + "height" 10 + ], 11 + "properties": { 12 + "width": { 13 + "type": "integer", 14 + "minimum": 1 15 + }, 16 + "height": { 17 + "type": "integer", 18 + "minimum": 1 19 + } 20 + }, 21 + "description": "width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit." 22 + } 23 + } 24 + }
+82
lexicons/app/bsky/embed/external.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.bsky.embed.external", 4 + "defs": { 5 + "main": { 6 + "type": "object", 7 + "required": [ 8 + "external" 9 + ], 10 + "properties": { 11 + "external": { 12 + "ref": "#external", 13 + "type": "ref" 14 + } 15 + }, 16 + "description": "A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post)." 17 + }, 18 + "view": { 19 + "type": "object", 20 + "required": [ 21 + "external" 22 + ], 23 + "properties": { 24 + "external": { 25 + "ref": "#viewExternal", 26 + "type": "ref" 27 + } 28 + } 29 + }, 30 + "external": { 31 + "type": "object", 32 + "required": [ 33 + "uri", 34 + "title", 35 + "description" 36 + ], 37 + "properties": { 38 + "uri": { 39 + "type": "string", 40 + "format": "uri" 41 + }, 42 + "thumb": { 43 + "type": "blob", 44 + "accept": [ 45 + "image/*" 46 + ], 47 + "maxSize": 1000000 48 + }, 49 + "title": { 50 + "type": "string" 51 + }, 52 + "description": { 53 + "type": "string" 54 + } 55 + } 56 + }, 57 + "viewExternal": { 58 + "type": "object", 59 + "required": [ 60 + "uri", 61 + "title", 62 + "description" 63 + ], 64 + "properties": { 65 + "uri": { 66 + "type": "string", 67 + "format": "uri" 68 + }, 69 + "thumb": { 70 + "type": "string", 71 + "format": "uri" 72 + }, 73 + "title": { 74 + "type": "string" 75 + }, 76 + "description": { 77 + "type": "string" 78 + } 79 + } 80 + } 81 + } 82 + }
+91
lexicons/app/bsky/embed/images.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.bsky.embed.images", 4 + "description": "A set of images embedded in a Bluesky record (eg, a post).", 5 + "defs": { 6 + "main": { 7 + "type": "object", 8 + "required": [ 9 + "images" 10 + ], 11 + "properties": { 12 + "images": { 13 + "type": "array", 14 + "items": { 15 + "ref": "#image", 16 + "type": "ref" 17 + }, 18 + "maxLength": 4 19 + } 20 + } 21 + }, 22 + "view": { 23 + "type": "object", 24 + "required": [ 25 + "images" 26 + ], 27 + "properties": { 28 + "images": { 29 + "type": "array", 30 + "items": { 31 + "ref": "#viewImage", 32 + "type": "ref" 33 + }, 34 + "maxLength": 4 35 + } 36 + } 37 + }, 38 + "image": { 39 + "type": "object", 40 + "required": [ 41 + "image", 42 + "alt" 43 + ], 44 + "properties": { 45 + "alt": { 46 + "type": "string", 47 + "description": "Alt text description of the image, for accessibility." 48 + }, 49 + "image": { 50 + "type": "blob", 51 + "accept": [ 52 + "image/*" 53 + ], 54 + "maxSize": 1000000 55 + }, 56 + "aspectRatio": { 57 + "ref": "app.bsky.embed.defs#aspectRatio", 58 + "type": "ref" 59 + } 60 + } 61 + }, 62 + "viewImage": { 63 + "type": "object", 64 + "required": [ 65 + "thumb", 66 + "fullsize", 67 + "alt" 68 + ], 69 + "properties": { 70 + "alt": { 71 + "type": "string", 72 + "description": "Alt text description of the image, for accessibility." 73 + }, 74 + "thumb": { 75 + "type": "string", 76 + "format": "uri", 77 + "description": "Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View." 78 + }, 79 + "fullsize": { 80 + "type": "string", 81 + "format": "uri", 82 + "description": "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." 83 + }, 84 + "aspectRatio": { 85 + "ref": "app.bsky.embed.defs#aspectRatio", 86 + "type": "ref" 87 + } 88 + } 89 + } 90 + } 91 + }
+160
lexicons/app/bsky/embed/record.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.bsky.embed.record", 4 + "description": "A representation of a record embedded in a Bluesky record (eg, a post). For example, a quote-post, or sharing a feed generator record.", 5 + "defs": { 6 + "main": { 7 + "type": "object", 8 + "required": [ 9 + "record" 10 + ], 11 + "properties": { 12 + "record": { 13 + "ref": "com.atproto.repo.strongRef", 14 + "type": "ref" 15 + } 16 + } 17 + }, 18 + "view": { 19 + "type": "object", 20 + "required": [ 21 + "record" 22 + ], 23 + "properties": { 24 + "record": { 25 + "refs": [ 26 + "#viewRecord", 27 + "#viewNotFound", 28 + "#viewBlocked", 29 + "#viewDetached", 30 + "app.bsky.feed.defs#generatorView", 31 + "app.bsky.graph.defs#listView", 32 + "app.bsky.labeler.defs#labelerView", 33 + "app.bsky.graph.defs#starterPackViewBasic" 34 + ], 35 + "type": "union" 36 + } 37 + } 38 + }, 39 + "viewRecord": { 40 + "type": "object", 41 + "required": [ 42 + "uri", 43 + "cid", 44 + "author", 45 + "value", 46 + "indexedAt" 47 + ], 48 + "properties": { 49 + "cid": { 50 + "type": "string", 51 + "format": "cid" 52 + }, 53 + "uri": { 54 + "type": "string", 55 + "format": "at-uri" 56 + }, 57 + "value": { 58 + "type": "unknown", 59 + "description": "The record data itself." 60 + }, 61 + "author": { 62 + "ref": "app.bsky.actor.defs#profileViewBasic", 63 + "type": "ref" 64 + }, 65 + "embeds": { 66 + "type": "array", 67 + "items": { 68 + "refs": [ 69 + "app.bsky.embed.images#view", 70 + "app.bsky.embed.video#view", 71 + "app.bsky.embed.external#view", 72 + "app.bsky.embed.record#view", 73 + "app.bsky.embed.recordWithMedia#view" 74 + ], 75 + "type": "union" 76 + } 77 + }, 78 + "labels": { 79 + "type": "array", 80 + "items": { 81 + "ref": "com.atproto.label.defs#label", 82 + "type": "ref" 83 + } 84 + }, 85 + "indexedAt": { 86 + "type": "string", 87 + "format": "datetime" 88 + }, 89 + "likeCount": { 90 + "type": "integer" 91 + }, 92 + "quoteCount": { 93 + "type": "integer" 94 + }, 95 + "replyCount": { 96 + "type": "integer" 97 + }, 98 + "repostCount": { 99 + "type": "integer" 100 + } 101 + } 102 + }, 103 + "viewBlocked": { 104 + "type": "object", 105 + "required": [ 106 + "uri", 107 + "blocked", 108 + "author" 109 + ], 110 + "properties": { 111 + "uri": { 112 + "type": "string", 113 + "format": "at-uri" 114 + }, 115 + "author": { 116 + "ref": "app.bsky.feed.defs#blockedAuthor", 117 + "type": "ref" 118 + }, 119 + "blocked": { 120 + "type": "boolean", 121 + "const": true 122 + } 123 + } 124 + }, 125 + "viewDetached": { 126 + "type": "object", 127 + "required": [ 128 + "uri", 129 + "detached" 130 + ], 131 + "properties": { 132 + "uri": { 133 + "type": "string", 134 + "format": "at-uri" 135 + }, 136 + "detached": { 137 + "type": "boolean", 138 + "const": true 139 + } 140 + } 141 + }, 142 + "viewNotFound": { 143 + "type": "object", 144 + "required": [ 145 + "uri", 146 + "notFound" 147 + ], 148 + "properties": { 149 + "uri": { 150 + "type": "string", 151 + "format": "at-uri" 152 + }, 153 + "notFound": { 154 + "type": "boolean", 155 + "const": true 156 + } 157 + } 158 + } 159 + } 160 + }
+49
lexicons/app/bsky/embed/recordWithMedia.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.bsky.embed.recordWithMedia", 4 + "description": "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.", 5 + "defs": { 6 + "main": { 7 + "type": "object", 8 + "required": [ 9 + "record", 10 + "media" 11 + ], 12 + "properties": { 13 + "media": { 14 + "refs": [ 15 + "app.bsky.embed.images", 16 + "app.bsky.embed.video", 17 + "app.bsky.embed.external" 18 + ], 19 + "type": "union" 20 + }, 21 + "record": { 22 + "ref": "app.bsky.embed.record", 23 + "type": "ref" 24 + } 25 + } 26 + }, 27 + "view": { 28 + "type": "object", 29 + "required": [ 30 + "record", 31 + "media" 32 + ], 33 + "properties": { 34 + "media": { 35 + "refs": [ 36 + "app.bsky.embed.images#view", 37 + "app.bsky.embed.video#view", 38 + "app.bsky.embed.external#view" 39 + ], 40 + "type": "union" 41 + }, 42 + "record": { 43 + "ref": "app.bsky.embed.record#view", 44 + "type": "ref" 45 + } 46 + } 47 + } 48 + } 49 + }
+90
lexicons/app/bsky/embed/video.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.bsky.embed.video", 4 + "description": "A video embedded in a Bluesky record (eg, a post).", 5 + "defs": { 6 + "main": { 7 + "type": "object", 8 + "required": [ 9 + "video" 10 + ], 11 + "properties": { 12 + "alt": { 13 + "type": "string", 14 + "maxLength": 10000, 15 + "description": "Alt text description of the video, for accessibility.", 16 + "maxGraphemes": 1000 17 + }, 18 + "video": { 19 + "type": "blob", 20 + "accept": [ 21 + "video/mp4" 22 + ], 23 + "maxSize": 50000000 24 + }, 25 + "captions": { 26 + "type": "array", 27 + "items": { 28 + "ref": "#caption", 29 + "type": "ref" 30 + }, 31 + "maxLength": 20 32 + }, 33 + "aspectRatio": { 34 + "ref": "app.bsky.embed.defs#aspectRatio", 35 + "type": "ref" 36 + } 37 + } 38 + }, 39 + "view": { 40 + "type": "object", 41 + "required": [ 42 + "cid", 43 + "playlist" 44 + ], 45 + "properties": { 46 + "alt": { 47 + "type": "string", 48 + "maxLength": 10000, 49 + "maxGraphemes": 1000 50 + }, 51 + "cid": { 52 + "type": "string", 53 + "format": "cid" 54 + }, 55 + "playlist": { 56 + "type": "string", 57 + "format": "uri" 58 + }, 59 + "thumbnail": { 60 + "type": "string", 61 + "format": "uri" 62 + }, 63 + "aspectRatio": { 64 + "ref": "app.bsky.embed.defs#aspectRatio", 65 + "type": "ref" 66 + } 67 + } 68 + }, 69 + "caption": { 70 + "type": "object", 71 + "required": [ 72 + "lang", 73 + "file" 74 + ], 75 + "properties": { 76 + "file": { 77 + "type": "blob", 78 + "accept": [ 79 + "text/vtt" 80 + ], 81 + "maxSize": 20000 82 + }, 83 + "lang": { 84 + "type": "string", 85 + "format": "language" 86 + } 87 + } 88 + } 89 + } 90 + }
+515
lexicons/app/bsky/feed/defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.bsky.feed.defs", 4 + "defs": { 5 + "postView": { 6 + "type": "object", 7 + "required": [ 8 + "uri", 9 + "cid", 10 + "author", 11 + "record", 12 + "indexedAt" 13 + ], 14 + "properties": { 15 + "cid": { 16 + "type": "string", 17 + "format": "cid" 18 + }, 19 + "uri": { 20 + "type": "string", 21 + "format": "at-uri" 22 + }, 23 + "embed": { 24 + "refs": [ 25 + "app.bsky.embed.images#view", 26 + "app.bsky.embed.video#view", 27 + "app.bsky.embed.external#view", 28 + "app.bsky.embed.record#view", 29 + "app.bsky.embed.recordWithMedia#view" 30 + ], 31 + "type": "union" 32 + }, 33 + "author": { 34 + "ref": "app.bsky.actor.defs#profileViewBasic", 35 + "type": "ref" 36 + }, 37 + "labels": { 38 + "type": "array", 39 + "items": { 40 + "ref": "com.atproto.label.defs#label", 41 + "type": "ref" 42 + } 43 + }, 44 + "record": { 45 + "type": "unknown" 46 + }, 47 + "viewer": { 48 + "ref": "#viewerState", 49 + "type": "ref" 50 + }, 51 + "indexedAt": { 52 + "type": "string", 53 + "format": "datetime" 54 + }, 55 + "likeCount": { 56 + "type": "integer" 57 + }, 58 + "quoteCount": { 59 + "type": "integer" 60 + }, 61 + "replyCount": { 62 + "type": "integer" 63 + }, 64 + "threadgate": { 65 + "ref": "#threadgateView", 66 + "type": "ref" 67 + }, 68 + "repostCount": { 69 + "type": "integer" 70 + } 71 + } 72 + }, 73 + "replyRef": { 74 + "type": "object", 75 + "required": [ 76 + "root", 77 + "parent" 78 + ], 79 + "properties": { 80 + "root": { 81 + "refs": [ 82 + "#postView", 83 + "#notFoundPost", 84 + "#blockedPost" 85 + ], 86 + "type": "union" 87 + }, 88 + "parent": { 89 + "refs": [ 90 + "#postView", 91 + "#notFoundPost", 92 + "#blockedPost" 93 + ], 94 + "type": "union" 95 + }, 96 + "grandparentAuthor": { 97 + "ref": "app.bsky.actor.defs#profileViewBasic", 98 + "type": "ref", 99 + "description": "When parent is a reply to another post, this is the author of that post." 100 + } 101 + } 102 + }, 103 + "reasonPin": { 104 + "type": "object", 105 + "properties": {} 106 + }, 107 + "blockedPost": { 108 + "type": "object", 109 + "required": [ 110 + "uri", 111 + "blocked", 112 + "author" 113 + ], 114 + "properties": { 115 + "uri": { 116 + "type": "string", 117 + "format": "at-uri" 118 + }, 119 + "author": { 120 + "ref": "#blockedAuthor", 121 + "type": "ref" 122 + }, 123 + "blocked": { 124 + "type": "boolean", 125 + "const": true 126 + } 127 + } 128 + }, 129 + "interaction": { 130 + "type": "object", 131 + "properties": { 132 + "item": { 133 + "type": "string", 134 + "format": "at-uri" 135 + }, 136 + "event": { 137 + "type": "string", 138 + "knownValues": [ 139 + "app.bsky.feed.defs#requestLess", 140 + "app.bsky.feed.defs#requestMore", 141 + "app.bsky.feed.defs#clickthroughItem", 142 + "app.bsky.feed.defs#clickthroughAuthor", 143 + "app.bsky.feed.defs#clickthroughReposter", 144 + "app.bsky.feed.defs#clickthroughEmbed", 145 + "app.bsky.feed.defs#interactionSeen", 146 + "app.bsky.feed.defs#interactionLike", 147 + "app.bsky.feed.defs#interactionRepost", 148 + "app.bsky.feed.defs#interactionReply", 149 + "app.bsky.feed.defs#interactionQuote", 150 + "app.bsky.feed.defs#interactionShare" 151 + ] 152 + }, 153 + "feedContext": { 154 + "type": "string", 155 + "maxLength": 2000, 156 + "description": "Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton." 157 + } 158 + } 159 + }, 160 + "requestLess": { 161 + "type": "token", 162 + "description": "Request that less content like the given feed item be shown in the feed" 163 + }, 164 + "requestMore": { 165 + "type": "token", 166 + "description": "Request that more content like the given feed item be shown in the feed" 167 + }, 168 + "viewerState": { 169 + "type": "object", 170 + "properties": { 171 + "like": { 172 + "type": "string", 173 + "format": "at-uri" 174 + }, 175 + "pinned": { 176 + "type": "boolean" 177 + }, 178 + "repost": { 179 + "type": "string", 180 + "format": "at-uri" 181 + }, 182 + "threadMuted": { 183 + "type": "boolean" 184 + }, 185 + "replyDisabled": { 186 + "type": "boolean" 187 + }, 188 + "embeddingDisabled": { 189 + "type": "boolean" 190 + } 191 + }, 192 + "description": "Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests." 193 + }, 194 + "feedViewPost": { 195 + "type": "object", 196 + "required": [ 197 + "post" 198 + ], 199 + "properties": { 200 + "post": { 201 + "ref": "#postView", 202 + "type": "ref" 203 + }, 204 + "reply": { 205 + "ref": "#replyRef", 206 + "type": "ref" 207 + }, 208 + "reason": { 209 + "refs": [ 210 + "#reasonRepost", 211 + "#reasonPin" 212 + ], 213 + "type": "union" 214 + }, 215 + "feedContext": { 216 + "type": "string", 217 + "maxLength": 2000, 218 + "description": "Context provided by feed generator that may be passed back alongside interactions." 219 + } 220 + } 221 + }, 222 + "notFoundPost": { 223 + "type": "object", 224 + "required": [ 225 + "uri", 226 + "notFound" 227 + ], 228 + "properties": { 229 + "uri": { 230 + "type": "string", 231 + "format": "at-uri" 232 + }, 233 + "notFound": { 234 + "type": "boolean", 235 + "const": true 236 + } 237 + } 238 + }, 239 + "reasonRepost": { 240 + "type": "object", 241 + "required": [ 242 + "by", 243 + "indexedAt" 244 + ], 245 + "properties": { 246 + "by": { 247 + "ref": "app.bsky.actor.defs#profileViewBasic", 248 + "type": "ref" 249 + }, 250 + "indexedAt": { 251 + "type": "string", 252 + "format": "datetime" 253 + } 254 + } 255 + }, 256 + "blockedAuthor": { 257 + "type": "object", 258 + "required": [ 259 + "did" 260 + ], 261 + "properties": { 262 + "did": { 263 + "type": "string", 264 + "format": "did" 265 + }, 266 + "viewer": { 267 + "ref": "app.bsky.actor.defs#viewerState", 268 + "type": "ref" 269 + } 270 + } 271 + }, 272 + "generatorView": { 273 + "type": "object", 274 + "required": [ 275 + "uri", 276 + "cid", 277 + "did", 278 + "creator", 279 + "displayName", 280 + "indexedAt" 281 + ], 282 + "properties": { 283 + "cid": { 284 + "type": "string", 285 + "format": "cid" 286 + }, 287 + "did": { 288 + "type": "string", 289 + "format": "did" 290 + }, 291 + "uri": { 292 + "type": "string", 293 + "format": "at-uri" 294 + }, 295 + "avatar": { 296 + "type": "string", 297 + "format": "uri" 298 + }, 299 + "labels": { 300 + "type": "array", 301 + "items": { 302 + "ref": "com.atproto.label.defs#label", 303 + "type": "ref" 304 + } 305 + }, 306 + "viewer": { 307 + "ref": "#generatorViewerState", 308 + "type": "ref" 309 + }, 310 + "creator": { 311 + "ref": "app.bsky.actor.defs#profileView", 312 + "type": "ref" 313 + }, 314 + "indexedAt": { 315 + "type": "string", 316 + "format": "datetime" 317 + }, 318 + "likeCount": { 319 + "type": "integer", 320 + "minimum": 0 321 + }, 322 + "contentMode": { 323 + "type": "string", 324 + "knownValues": [ 325 + "app.bsky.feed.defs#contentModeUnspecified", 326 + "app.bsky.feed.defs#contentModeVideo" 327 + ] 328 + }, 329 + "description": { 330 + "type": "string", 331 + "maxLength": 3000, 332 + "maxGraphemes": 300 333 + }, 334 + "displayName": { 335 + "type": "string" 336 + }, 337 + "descriptionFacets": { 338 + "type": "array", 339 + "items": { 340 + "ref": "app.bsky.richtext.facet", 341 + "type": "ref" 342 + } 343 + }, 344 + "acceptsInteractions": { 345 + "type": "boolean" 346 + } 347 + } 348 + }, 349 + "threadContext": { 350 + "type": "object", 351 + "properties": { 352 + "rootAuthorLike": { 353 + "type": "string", 354 + "format": "at-uri" 355 + } 356 + }, 357 + "description": "Metadata about this post within the context of the thread it is in." 358 + }, 359 + "threadViewPost": { 360 + "type": "object", 361 + "required": [ 362 + "post" 363 + ], 364 + "properties": { 365 + "post": { 366 + "ref": "#postView", 367 + "type": "ref" 368 + }, 369 + "parent": { 370 + "refs": [ 371 + "#threadViewPost", 372 + "#notFoundPost", 373 + "#blockedPost" 374 + ], 375 + "type": "union" 376 + }, 377 + "replies": { 378 + "type": "array", 379 + "items": { 380 + "refs": [ 381 + "#threadViewPost", 382 + "#notFoundPost", 383 + "#blockedPost" 384 + ], 385 + "type": "union" 386 + } 387 + }, 388 + "threadContext": { 389 + "ref": "#threadContext", 390 + "type": "ref" 391 + } 392 + } 393 + }, 394 + "threadgateView": { 395 + "type": "object", 396 + "properties": { 397 + "cid": { 398 + "type": "string", 399 + "format": "cid" 400 + }, 401 + "uri": { 402 + "type": "string", 403 + "format": "at-uri" 404 + }, 405 + "lists": { 406 + "type": "array", 407 + "items": { 408 + "ref": "app.bsky.graph.defs#listViewBasic", 409 + "type": "ref" 410 + } 411 + }, 412 + "record": { 413 + "type": "unknown" 414 + } 415 + } 416 + }, 417 + "interactionLike": { 418 + "type": "token", 419 + "description": "User liked the feed item" 420 + }, 421 + "interactionSeen": { 422 + "type": "token", 423 + "description": "Feed item was seen by user" 424 + }, 425 + "clickthroughItem": { 426 + "type": "token", 427 + "description": "User clicked through to the feed item" 428 + }, 429 + "contentModeVideo": { 430 + "type": "token", 431 + "description": "Declares the feed generator returns posts containing app.bsky.embed.video embeds." 432 + }, 433 + "interactionQuote": { 434 + "type": "token", 435 + "description": "User quoted the feed item" 436 + }, 437 + "interactionReply": { 438 + "type": "token", 439 + "description": "User replied to the feed item" 440 + }, 441 + "interactionShare": { 442 + "type": "token", 443 + "description": "User shared the feed item" 444 + }, 445 + "skeletonFeedPost": { 446 + "type": "object", 447 + "required": [ 448 + "post" 449 + ], 450 + "properties": { 451 + "post": { 452 + "type": "string", 453 + "format": "at-uri" 454 + }, 455 + "reason": { 456 + "refs": [ 457 + "#skeletonReasonRepost", 458 + "#skeletonReasonPin" 459 + ], 460 + "type": "union" 461 + }, 462 + "feedContext": { 463 + "type": "string", 464 + "maxLength": 2000, 465 + "description": "Context that will be passed through to client and may be passed to feed generator back alongside interactions." 466 + } 467 + } 468 + }, 469 + "clickthroughEmbed": { 470 + "type": "token", 471 + "description": "User clicked through to the embedded content of the feed item" 472 + }, 473 + "interactionRepost": { 474 + "type": "token", 475 + "description": "User reposted the feed item" 476 + }, 477 + "skeletonReasonPin": { 478 + "type": "object", 479 + "properties": {} 480 + }, 481 + "clickthroughAuthor": { 482 + "type": "token", 483 + "description": "User clicked through to the author of the feed item" 484 + }, 485 + "clickthroughReposter": { 486 + "type": "token", 487 + "description": "User clicked through to the reposter of the feed item" 488 + }, 489 + "generatorViewerState": { 490 + "type": "object", 491 + "properties": { 492 + "like": { 493 + "type": "string", 494 + "format": "at-uri" 495 + } 496 + } 497 + }, 498 + "skeletonReasonRepost": { 499 + "type": "object", 500 + "required": [ 501 + "repost" 502 + ], 503 + "properties": { 504 + "repost": { 505 + "type": "string", 506 + "format": "at-uri" 507 + } 508 + } 509 + }, 510 + "contentModeUnspecified": { 511 + "type": "token", 512 + "description": "Declares the feed generator returns any types of posts." 513 + } 514 + } 515 + }
+54
lexicons/app/bsky/feed/postgate.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.bsky.feed.postgate", 4 + "defs": { 5 + "main": { 6 + "key": "tid", 7 + "type": "record", 8 + "record": { 9 + "type": "object", 10 + "required": [ 11 + "post", 12 + "createdAt" 13 + ], 14 + "properties": { 15 + "post": { 16 + "type": "string", 17 + "format": "at-uri", 18 + "description": "Reference (AT-URI) to the post record." 19 + }, 20 + "createdAt": { 21 + "type": "string", 22 + "format": "datetime" 23 + }, 24 + "embeddingRules": { 25 + "type": "array", 26 + "items": { 27 + "refs": [ 28 + "#disableRule" 29 + ], 30 + "type": "union" 31 + }, 32 + "maxLength": 5, 33 + "description": "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." 34 + }, 35 + "detachedEmbeddingUris": { 36 + "type": "array", 37 + "items": { 38 + "type": "string", 39 + "format": "at-uri" 40 + }, 41 + "maxLength": 50, 42 + "description": "List of AT-URIs embedding this post that the author has detached from." 43 + } 44 + } 45 + }, 46 + "description": "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." 47 + }, 48 + "disableRule": { 49 + "type": "object", 50 + "properties": {}, 51 + "description": "Disables embedding of this post." 52 + } 53 + } 54 + }
+80
lexicons/app/bsky/feed/threadgate.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.bsky.feed.threadgate", 4 + "defs": { 5 + "main": { 6 + "key": "tid", 7 + "type": "record", 8 + "record": { 9 + "type": "object", 10 + "required": [ 11 + "post", 12 + "createdAt" 13 + ], 14 + "properties": { 15 + "post": { 16 + "type": "string", 17 + "format": "at-uri", 18 + "description": "Reference (AT-URI) to the post record." 19 + }, 20 + "allow": { 21 + "type": "array", 22 + "items": { 23 + "refs": [ 24 + "#mentionRule", 25 + "#followerRule", 26 + "#followingRule", 27 + "#listRule" 28 + ], 29 + "type": "union" 30 + }, 31 + "maxLength": 5, 32 + "description": "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." 33 + }, 34 + "createdAt": { 35 + "type": "string", 36 + "format": "datetime" 37 + }, 38 + "hiddenReplies": { 39 + "type": "array", 40 + "items": { 41 + "type": "string", 42 + "format": "at-uri" 43 + }, 44 + "maxLength": 50, 45 + "description": "List of hidden reply URIs." 46 + } 47 + } 48 + }, 49 + "description": "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." 50 + }, 51 + "listRule": { 52 + "type": "object", 53 + "required": [ 54 + "list" 55 + ], 56 + "properties": { 57 + "list": { 58 + "type": "string", 59 + "format": "at-uri" 60 + } 61 + }, 62 + "description": "Allow replies from actors on a list." 63 + }, 64 + "mentionRule": { 65 + "type": "object", 66 + "properties": {}, 67 + "description": "Allow replies from actors mentioned in your post." 68 + }, 69 + "followerRule": { 70 + "type": "object", 71 + "properties": {}, 72 + "description": "Allow replies from actors who follow you." 73 + }, 74 + "followingRule": { 75 + "type": "object", 76 + "properties": {}, 77 + "description": "Allow replies from actors you follow." 78 + } 79 + } 80 + }
+332
lexicons/app/bsky/graph/defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.bsky.graph.defs", 4 + "defs": { 5 + "modlist": { 6 + "type": "token", 7 + "description": "A list of actors to apply an aggregate moderation action (mute/block) on." 8 + }, 9 + "listView": { 10 + "type": "object", 11 + "required": [ 12 + "uri", 13 + "cid", 14 + "creator", 15 + "name", 16 + "purpose", 17 + "indexedAt" 18 + ], 19 + "properties": { 20 + "cid": { 21 + "type": "string", 22 + "format": "cid" 23 + }, 24 + "uri": { 25 + "type": "string", 26 + "format": "at-uri" 27 + }, 28 + "name": { 29 + "type": "string", 30 + "maxLength": 64, 31 + "minLength": 1 32 + }, 33 + "avatar": { 34 + "type": "string", 35 + "format": "uri" 36 + }, 37 + "labels": { 38 + "type": "array", 39 + "items": { 40 + "ref": "com.atproto.label.defs#label", 41 + "type": "ref" 42 + } 43 + }, 44 + "viewer": { 45 + "ref": "#listViewerState", 46 + "type": "ref" 47 + }, 48 + "creator": { 49 + "ref": "app.bsky.actor.defs#profileView", 50 + "type": "ref" 51 + }, 52 + "purpose": { 53 + "ref": "#listPurpose", 54 + "type": "ref" 55 + }, 56 + "indexedAt": { 57 + "type": "string", 58 + "format": "datetime" 59 + }, 60 + "description": { 61 + "type": "string", 62 + "maxLength": 3000, 63 + "maxGraphemes": 300 64 + }, 65 + "listItemCount": { 66 + "type": "integer", 67 + "minimum": 0 68 + }, 69 + "descriptionFacets": { 70 + "type": "array", 71 + "items": { 72 + "ref": "app.bsky.richtext.facet", 73 + "type": "ref" 74 + } 75 + } 76 + } 77 + }, 78 + "curatelist": { 79 + "type": "token", 80 + "description": "A list of actors used for curation purposes such as list feeds or interaction gating." 81 + }, 82 + "listPurpose": { 83 + "type": "string", 84 + "knownValues": [ 85 + "app.bsky.graph.defs#modlist", 86 + "app.bsky.graph.defs#curatelist", 87 + "app.bsky.graph.defs#referencelist" 88 + ] 89 + }, 90 + "listItemView": { 91 + "type": "object", 92 + "required": [ 93 + "uri", 94 + "subject" 95 + ], 96 + "properties": { 97 + "uri": { 98 + "type": "string", 99 + "format": "at-uri" 100 + }, 101 + "subject": { 102 + "ref": "app.bsky.actor.defs#profileView", 103 + "type": "ref" 104 + } 105 + } 106 + }, 107 + "relationship": { 108 + "type": "object", 109 + "required": [ 110 + "did" 111 + ], 112 + "properties": { 113 + "did": { 114 + "type": "string", 115 + "format": "did" 116 + }, 117 + "following": { 118 + "type": "string", 119 + "format": "at-uri", 120 + "description": "if the actor follows this DID, this is the AT-URI of the follow record" 121 + }, 122 + "followedBy": { 123 + "type": "string", 124 + "format": "at-uri", 125 + "description": "if the actor is followed by this DID, contains the AT-URI of the follow record" 126 + } 127 + }, 128 + "description": "lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object)" 129 + }, 130 + "listViewBasic": { 131 + "type": "object", 132 + "required": [ 133 + "uri", 134 + "cid", 135 + "name", 136 + "purpose" 137 + ], 138 + "properties": { 139 + "cid": { 140 + "type": "string", 141 + "format": "cid" 142 + }, 143 + "uri": { 144 + "type": "string", 145 + "format": "at-uri" 146 + }, 147 + "name": { 148 + "type": "string", 149 + "maxLength": 64, 150 + "minLength": 1 151 + }, 152 + "avatar": { 153 + "type": "string", 154 + "format": "uri" 155 + }, 156 + "labels": { 157 + "type": "array", 158 + "items": { 159 + "ref": "com.atproto.label.defs#label", 160 + "type": "ref" 161 + } 162 + }, 163 + "viewer": { 164 + "ref": "#listViewerState", 165 + "type": "ref" 166 + }, 167 + "purpose": { 168 + "ref": "#listPurpose", 169 + "type": "ref" 170 + }, 171 + "indexedAt": { 172 + "type": "string", 173 + "format": "datetime" 174 + }, 175 + "listItemCount": { 176 + "type": "integer", 177 + "minimum": 0 178 + } 179 + } 180 + }, 181 + "notFoundActor": { 182 + "type": "object", 183 + "required": [ 184 + "actor", 185 + "notFound" 186 + ], 187 + "properties": { 188 + "actor": { 189 + "type": "string", 190 + "format": "at-identifier" 191 + }, 192 + "notFound": { 193 + "type": "boolean", 194 + "const": true 195 + } 196 + }, 197 + "description": "indicates that a handle or DID could not be resolved" 198 + }, 199 + "referencelist": { 200 + "type": "token", 201 + "description": "A list of actors used for only for reference purposes such as within a starter pack." 202 + }, 203 + "listViewerState": { 204 + "type": "object", 205 + "properties": { 206 + "muted": { 207 + "type": "boolean" 208 + }, 209 + "blocked": { 210 + "type": "string", 211 + "format": "at-uri" 212 + } 213 + } 214 + }, 215 + "starterPackView": { 216 + "type": "object", 217 + "required": [ 218 + "uri", 219 + "cid", 220 + "record", 221 + "creator", 222 + "indexedAt" 223 + ], 224 + "properties": { 225 + "cid": { 226 + "type": "string", 227 + "format": "cid" 228 + }, 229 + "uri": { 230 + "type": "string", 231 + "format": "at-uri" 232 + }, 233 + "list": { 234 + "ref": "#listViewBasic", 235 + "type": "ref" 236 + }, 237 + "feeds": { 238 + "type": "array", 239 + "items": { 240 + "ref": "app.bsky.feed.defs#generatorView", 241 + "type": "ref" 242 + }, 243 + "maxLength": 3 244 + }, 245 + "labels": { 246 + "type": "array", 247 + "items": { 248 + "ref": "com.atproto.label.defs#label", 249 + "type": "ref" 250 + } 251 + }, 252 + "record": { 253 + "type": "unknown" 254 + }, 255 + "creator": { 256 + "ref": "app.bsky.actor.defs#profileViewBasic", 257 + "type": "ref" 258 + }, 259 + "indexedAt": { 260 + "type": "string", 261 + "format": "datetime" 262 + }, 263 + "joinedWeekCount": { 264 + "type": "integer", 265 + "minimum": 0 266 + }, 267 + "listItemsSample": { 268 + "type": "array", 269 + "items": { 270 + "ref": "#listItemView", 271 + "type": "ref" 272 + }, 273 + "maxLength": 12 274 + }, 275 + "joinedAllTimeCount": { 276 + "type": "integer", 277 + "minimum": 0 278 + } 279 + } 280 + }, 281 + "starterPackViewBasic": { 282 + "type": "object", 283 + "required": [ 284 + "uri", 285 + "cid", 286 + "record", 287 + "creator", 288 + "indexedAt" 289 + ], 290 + "properties": { 291 + "cid": { 292 + "type": "string", 293 + "format": "cid" 294 + }, 295 + "uri": { 296 + "type": "string", 297 + "format": "at-uri" 298 + }, 299 + "labels": { 300 + "type": "array", 301 + "items": { 302 + "ref": "com.atproto.label.defs#label", 303 + "type": "ref" 304 + } 305 + }, 306 + "record": { 307 + "type": "unknown" 308 + }, 309 + "creator": { 310 + "ref": "app.bsky.actor.defs#profileViewBasic", 311 + "type": "ref" 312 + }, 313 + "indexedAt": { 314 + "type": "string", 315 + "format": "datetime" 316 + }, 317 + "listItemCount": { 318 + "type": "integer", 319 + "minimum": 0 320 + }, 321 + "joinedWeekCount": { 322 + "type": "integer", 323 + "minimum": 0 324 + }, 325 + "joinedAllTimeCount": { 326 + "type": "integer", 327 + "minimum": 0 328 + } 329 + } 330 + } 331 + } 332 + }
+128
lexicons/app/bsky/labeler/defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.bsky.labeler.defs", 4 + "defs": { 5 + "labelerView": { 6 + "type": "object", 7 + "required": [ 8 + "uri", 9 + "cid", 10 + "creator", 11 + "indexedAt" 12 + ], 13 + "properties": { 14 + "cid": { 15 + "type": "string", 16 + "format": "cid" 17 + }, 18 + "uri": { 19 + "type": "string", 20 + "format": "at-uri" 21 + }, 22 + "labels": { 23 + "type": "array", 24 + "items": { 25 + "ref": "com.atproto.label.defs#label", 26 + "type": "ref" 27 + } 28 + }, 29 + "viewer": { 30 + "ref": "#labelerViewerState", 31 + "type": "ref" 32 + }, 33 + "creator": { 34 + "ref": "app.bsky.actor.defs#profileView", 35 + "type": "ref" 36 + }, 37 + "indexedAt": { 38 + "type": "string", 39 + "format": "datetime" 40 + }, 41 + "likeCount": { 42 + "type": "integer", 43 + "minimum": 0 44 + } 45 + } 46 + }, 47 + "labelerPolicies": { 48 + "type": "object", 49 + "required": [ 50 + "labelValues" 51 + ], 52 + "properties": { 53 + "labelValues": { 54 + "type": "array", 55 + "items": { 56 + "ref": "com.atproto.label.defs#labelValue", 57 + "type": "ref" 58 + }, 59 + "description": "The label values which this labeler publishes. May include global or custom labels." 60 + }, 61 + "labelValueDefinitions": { 62 + "type": "array", 63 + "items": { 64 + "ref": "com.atproto.label.defs#labelValueDefinition", 65 + "type": "ref" 66 + }, 67 + "description": "Label values created by this labeler and scoped exclusively to it. Labels defined here will override global label definitions for this labeler." 68 + } 69 + } 70 + }, 71 + "labelerViewerState": { 72 + "type": "object", 73 + "properties": { 74 + "like": { 75 + "type": "string", 76 + "format": "at-uri" 77 + } 78 + } 79 + }, 80 + "labelerViewDetailed": { 81 + "type": "object", 82 + "required": [ 83 + "uri", 84 + "cid", 85 + "creator", 86 + "policies", 87 + "indexedAt" 88 + ], 89 + "properties": { 90 + "cid": { 91 + "type": "string", 92 + "format": "cid" 93 + }, 94 + "uri": { 95 + "type": "string", 96 + "format": "at-uri" 97 + }, 98 + "labels": { 99 + "type": "array", 100 + "items": { 101 + "ref": "com.atproto.label.defs#label", 102 + "type": "ref" 103 + } 104 + }, 105 + "viewer": { 106 + "ref": "#labelerViewerState", 107 + "type": "ref" 108 + }, 109 + "creator": { 110 + "ref": "app.bsky.actor.defs#profileView", 111 + "type": "ref" 112 + }, 113 + "policies": { 114 + "ref": "app.bsky.labeler.defs#labelerPolicies", 115 + "type": "ref" 116 + }, 117 + "indexedAt": { 118 + "type": "string", 119 + "format": "datetime" 120 + }, 121 + "likeCount": { 122 + "type": "integer", 123 + "minimum": 0 124 + } 125 + } 126 + } 127 + } 128 + }
+89
lexicons/app/bsky/richtext/facet.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.bsky.richtext.facet", 4 + "defs": { 5 + "tag": { 6 + "type": "object", 7 + "required": [ 8 + "tag" 9 + ], 10 + "properties": { 11 + "tag": { 12 + "type": "string", 13 + "maxLength": 640, 14 + "maxGraphemes": 64 15 + } 16 + }, 17 + "description": "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')." 18 + }, 19 + "link": { 20 + "type": "object", 21 + "required": [ 22 + "uri" 23 + ], 24 + "properties": { 25 + "uri": { 26 + "type": "string", 27 + "format": "uri" 28 + } 29 + }, 30 + "description": "Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL." 31 + }, 32 + "main": { 33 + "type": "object", 34 + "required": [ 35 + "index", 36 + "features" 37 + ], 38 + "properties": { 39 + "index": { 40 + "ref": "#byteSlice", 41 + "type": "ref" 42 + }, 43 + "features": { 44 + "type": "array", 45 + "items": { 46 + "refs": [ 47 + "#mention", 48 + "#link", 49 + "#tag" 50 + ], 51 + "type": "union" 52 + } 53 + } 54 + }, 55 + "description": "Annotation of a sub-string within rich text." 56 + }, 57 + "mention": { 58 + "type": "object", 59 + "required": [ 60 + "did" 61 + ], 62 + "properties": { 63 + "did": { 64 + "type": "string", 65 + "format": "did" 66 + } 67 + }, 68 + "description": "Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID." 69 + }, 70 + "byteSlice": { 71 + "type": "object", 72 + "required": [ 73 + "byteStart", 74 + "byteEnd" 75 + ], 76 + "properties": { 77 + "byteEnd": { 78 + "type": "integer", 79 + "minimum": 0 80 + }, 81 + "byteStart": { 82 + "type": "integer", 83 + "minimum": 0 84 + } 85 + }, 86 + "description": "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." 87 + } 88 + } 89 + }
+124 -88
lexicons/com/atproto/label/defs.json
··· 4 "defs": { 5 "label": { 6 "type": "object", 7 - "description": "Metadata tag on an atproto resource (eg, repo or record).", 8 - "required": ["src", "uri", "val", "cts"], 9 "properties": { 10 - "ver": { 11 - "type": "integer", 12 - "description": "The AT Protocol version of the label object." 13 - }, 14 - "src": { 15 - "type": "string", 16 - "format": "did", 17 - "description": "DID of the actor who created this label." 18 - }, 19 - "uri": { 20 - "type": "string", 21 - "format": "uri", 22 - "description": "AT URI of the record, repository (account), or other resource that this label applies to." 23 - }, 24 "cid": { 25 "type": "string", 26 "format": "cid", 27 "description": "Optionally, CID specifying the specific version of 'uri' resource this label applies to." 28 }, 29 - "val": { 30 - "type": "string", 31 - "maxLength": 128, 32 - "description": "The short string name of the value or type of this label." 33 - }, 34 - "neg": { 35 - "type": "boolean", 36 - "description": "If true, this is a negation label, overwriting a previous label." 37 - }, 38 "cts": { 39 "type": "string", 40 "format": "datetime", ··· 45 "format": "datetime", 46 "description": "Timestamp at which this label expires (no longer applies)." 47 }, 48 "sig": { 49 "type": "bytes", 50 "description": "Signature of dag-cbor encoded label." 51 - } 52 - } 53 - }, 54 - "selfLabels": { 55 - "type": "object", 56 - "description": "Metadata tags on an atproto record, published by the author within the record.", 57 - "required": ["values"], 58 - "properties": { 59 - "values": { 60 - "type": "array", 61 - "items": { "type": "ref", "ref": "#selfLabel" }, 62 - "maxLength": 10 63 } 64 - } 65 }, 66 "selfLabel": { 67 "type": "object", 68 - "description": "Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.", 69 - "required": ["val"], 70 "properties": { 71 "val": { 72 "type": "string", 73 "maxLength": 128, 74 "description": "The short string name of the value or type of this label." 75 } 76 - } 77 }, 78 "labelValueDefinition": { 79 "type": "object", 80 - "description": "Declares a label value and its expected interpretations and behaviors.", 81 - "required": ["identifier", "severity", "blurs", "locales"], 82 "properties": { 83 - "identifier": { 84 "type": "string", 85 - "description": "The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).", 86 - "maxLength": 100, 87 - "maxGraphemes": 100 88 }, 89 "severity": { 90 "type": "string", 91 "description": "How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.", 92 - "knownValues": ["inform", "alert", "none"] 93 }, 94 - "blurs": { 95 "type": "string", 96 - "description": "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.", 97 - "knownValues": ["content", "media", "none"] 98 }, 99 "defaultSetting": { 100 "type": "string", 101 "description": "The default setting for this label.", 102 - "knownValues": ["ignore", "warn", "hide"], 103 - "default": "warn" 104 - }, 105 - "adultOnly": { 106 - "type": "boolean", 107 - "description": "Does the user need to have adult content enabled in order to configure this label?" 108 - }, 109 - "locales": { 110 - "type": "array", 111 - "items": { "type": "ref", "ref": "#labelValueDefinitionStrings" } 112 } 113 - } 114 }, 115 "labelValueDefinitionStrings": { 116 "type": "object", 117 - "description": "Strings which describe the label in the UI, localized into a specific language.", 118 - "required": ["lang", "name", "description"], 119 "properties": { 120 "lang": { 121 "type": "string", 122 - "description": "The code of the language these strings are written in.", 123 - "format": "language" 124 }, 125 "name": { 126 "type": "string", 127 "description": "A short human-readable name for the label.", 128 - "maxGraphemes": 64, 129 - "maxLength": 640 130 }, 131 "description": { 132 "type": "string", 133 "description": "A longer description of what the label means and why it might be applied.", 134 - "maxGraphemes": 10000, 135 - "maxLength": 100000 136 } 137 - } 138 - }, 139 - "labelValue": { 140 - "type": "string", 141 - "knownValues": [ 142 - "!hide", 143 - "!no-promote", 144 - "!warn", 145 - "!no-unauthenticated", 146 - "dmca-violation", 147 - "doxxing", 148 - "porn", 149 - "sexual", 150 - "nudity", 151 - "nsfl", 152 - "gore" 153 - ] 154 } 155 } 156 - }
··· 4 "defs": { 5 "label": { 6 "type": "object", 7 + "required": [ 8 + "src", 9 + "uri", 10 + "val", 11 + "cts" 12 + ], 13 "properties": { 14 "cid": { 15 "type": "string", 16 "format": "cid", 17 "description": "Optionally, CID specifying the specific version of 'uri' resource this label applies to." 18 }, 19 "cts": { 20 "type": "string", 21 "format": "datetime", ··· 26 "format": "datetime", 27 "description": "Timestamp at which this label expires (no longer applies)." 28 }, 29 + "neg": { 30 + "type": "boolean", 31 + "description": "If true, this is a negation label, overwriting a previous label." 32 + }, 33 "sig": { 34 "type": "bytes", 35 "description": "Signature of dag-cbor encoded label." 36 + }, 37 + "src": { 38 + "type": "string", 39 + "format": "did", 40 + "description": "DID of the actor who created this label." 41 + }, 42 + "uri": { 43 + "type": "string", 44 + "format": "uri", 45 + "description": "AT URI of the record, repository (account), or other resource that this label applies to." 46 + }, 47 + "val": { 48 + "type": "string", 49 + "maxLength": 128, 50 + "description": "The short string name of the value or type of this label." 51 + }, 52 + "ver": { 53 + "type": "integer", 54 + "description": "The AT Protocol version of the label object." 55 } 56 + }, 57 + "description": "Metadata tag on an atproto resource (eg, repo or record)." 58 }, 59 "selfLabel": { 60 "type": "object", 61 + "required": [ 62 + "val" 63 + ], 64 "properties": { 65 "val": { 66 "type": "string", 67 "maxLength": 128, 68 "description": "The short string name of the value or type of this label." 69 } 70 + }, 71 + "description": "Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel." 72 + }, 73 + "labelValue": { 74 + "type": "string", 75 + "knownValues": [ 76 + "!hide", 77 + "!no-promote", 78 + "!warn", 79 + "!no-unauthenticated", 80 + "dmca-violation", 81 + "doxxing", 82 + "porn", 83 + "sexual", 84 + "nudity", 85 + "nsfl", 86 + "gore" 87 + ] 88 + }, 89 + "selfLabels": { 90 + "type": "object", 91 + "required": [ 92 + "values" 93 + ], 94 + "properties": { 95 + "values": { 96 + "type": "array", 97 + "items": { 98 + "ref": "#selfLabel", 99 + "type": "ref" 100 + }, 101 + "maxLength": 10 102 + } 103 + }, 104 + "description": "Metadata tags on an atproto record, published by the author within the record." 105 }, 106 "labelValueDefinition": { 107 "type": "object", 108 + "required": [ 109 + "identifier", 110 + "severity", 111 + "blurs", 112 + "locales" 113 + ], 114 "properties": { 115 + "blurs": { 116 "type": "string", 117 + "description": "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.", 118 + "knownValues": [ 119 + "content", 120 + "media", 121 + "none" 122 + ] 123 + }, 124 + "locales": { 125 + "type": "array", 126 + "items": { 127 + "ref": "#labelValueDefinitionStrings", 128 + "type": "ref" 129 + } 130 }, 131 "severity": { 132 "type": "string", 133 "description": "How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.", 134 + "knownValues": [ 135 + "inform", 136 + "alert", 137 + "none" 138 + ] 139 }, 140 + "adultOnly": { 141 + "type": "boolean", 142 + "description": "Does the user need to have adult content enabled in order to configure this label?" 143 + }, 144 + "identifier": { 145 "type": "string", 146 + "maxLength": 100, 147 + "description": "The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).", 148 + "maxGraphemes": 100 149 }, 150 "defaultSetting": { 151 "type": "string", 152 + "default": "warn", 153 "description": "The default setting for this label.", 154 + "knownValues": [ 155 + "ignore", 156 + "warn", 157 + "hide" 158 + ] 159 } 160 + }, 161 + "description": "Declares a label value and its expected interpretations and behaviors." 162 }, 163 "labelValueDefinitionStrings": { 164 "type": "object", 165 + "required": [ 166 + "lang", 167 + "name", 168 + "description" 169 + ], 170 "properties": { 171 "lang": { 172 "type": "string", 173 + "format": "language", 174 + "description": "The code of the language these strings are written in." 175 }, 176 "name": { 177 "type": "string", 178 + "maxLength": 640, 179 "description": "A short human-readable name for the label.", 180 + "maxGraphemes": 64 181 }, 182 "description": { 183 "type": "string", 184 + "maxLength": 100000, 185 "description": "A longer description of what the label means and why it might be applied.", 186 + "maxGraphemes": 10000 187 } 188 + }, 189 + "description": "Strings which describe the label in the UI, localized into a specific language." 190 } 191 } 192 + }
+119 -55
lexicons/com/atproto/repo/applyWrites.json
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 - "description": "Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS.", 8 "input": { 9 - "encoding": "application/json", 10 "schema": { 11 "type": "object", 12 - "required": ["repo", "writes"], 13 "properties": { 14 "repo": { 15 "type": "string", 16 "format": "at-identifier", 17 "description": "The handle or DID of the repo (aka, current account)." 18 - }, 19 - "validate": { 20 - "type": "boolean", 21 - "description": "Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons." 22 }, 23 "writes": { 24 "type": "array", 25 "items": { 26 "type": "union", 27 - "refs": ["#create", "#update", "#delete"], 28 "closed": true 29 } 30 }, 31 "swapCommit": { 32 "type": "string", 33 - "description": "If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations.", 34 - "format": "cid" 35 } 36 } 37 } 38 - }, 39 "output": { 40 - "encoding": "application/json", 41 "schema": { 42 "type": "object", 43 "required": [], 44 "properties": { 45 "commit": { 46 - "type": "ref", 47 - "ref": "com.atproto.repo.defs#commitMeta" 48 }, 49 "results": { 50 "type": "array", 51 "items": { 52 "type": "union", 53 - "refs": ["#createResult", "#updateResult", "#deleteResult"], 54 "closed": true 55 } 56 } 57 } 58 - } 59 }, 60 - "errors": [ 61 - { 62 - "name": "InvalidSwap", 63 - "description": "Indicates that the 'swapCommit' parameter did not match current commit." 64 - } 65 - ] 66 }, 67 "create": { 68 "type": "object", 69 - "description": "Operation which creates a new record.", 70 - "required": ["collection", "value"], 71 "properties": { 72 - "collection": { "type": "string", "format": "nsid" }, 73 "rkey": { 74 "type": "string", 75 "maxLength": 512, 76 - "format": "record-key", 77 "description": "NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility." 78 }, 79 - "value": { "type": "unknown" } 80 - } 81 }, 82 - "update": { 83 "type": "object", 84 - "description": "Operation which updates an existing record.", 85 - "required": ["collection", "rkey", "value"], 86 "properties": { 87 - "collection": { "type": "string", "format": "nsid" }, 88 - "rkey": { "type": "string", "format": "record-key" }, 89 - "value": { "type": "unknown" } 90 - } 91 }, 92 - "delete": { 93 "type": "object", 94 - "description": "Operation which deletes an existing record.", 95 - "required": ["collection", "rkey"], 96 "properties": { 97 - "collection": { "type": "string", "format": "nsid" }, 98 - "rkey": { "type": "string", "format": "record-key" } 99 - } 100 }, 101 "createResult": { 102 "type": "object", 103 - "required": ["uri", "cid"], 104 "properties": { 105 - "uri": { "type": "string", "format": "at-uri" }, 106 - "cid": { "type": "string", "format": "cid" }, 107 "validationStatus": { 108 "type": "string", 109 - "knownValues": ["valid", "unknown"] 110 } 111 } 112 }, 113 "updateResult": { 114 "type": "object", 115 - "required": ["uri", "cid"], 116 "properties": { 117 - "uri": { "type": "string", "format": "at-uri" }, 118 - "cid": { "type": "string", "format": "cid" }, 119 "validationStatus": { 120 "type": "string", 121 - "knownValues": ["valid", "unknown"] 122 } 123 } 124 - }, 125 - "deleteResult": { 126 - "type": "object", 127 - "required": [], 128 - "properties": {} 129 } 130 } 131 - }
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 "input": { 8 "schema": { 9 "type": "object", 10 + "required": [ 11 + "repo", 12 + "writes" 13 + ], 14 "properties": { 15 "repo": { 16 "type": "string", 17 "format": "at-identifier", 18 "description": "The handle or DID of the repo (aka, current account)." 19 }, 20 "writes": { 21 "type": "array", 22 "items": { 23 + "refs": [ 24 + "#create", 25 + "#update", 26 + "#delete" 27 + ], 28 "type": "union", 29 "closed": true 30 } 31 }, 32 + "validate": { 33 + "type": "boolean", 34 + "description": "Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons." 35 + }, 36 "swapCommit": { 37 "type": "string", 38 + "format": "cid", 39 + "description": "If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations." 40 } 41 } 42 + }, 43 + "encoding": "application/json" 44 + }, 45 + "errors": [ 46 + { 47 + "name": "InvalidSwap", 48 + "description": "Indicates that the 'swapCommit' parameter did not match current commit." 49 } 50 + ], 51 "output": { 52 "schema": { 53 "type": "object", 54 "required": [], 55 "properties": { 56 "commit": { 57 + "ref": "com.atproto.repo.defs#commitMeta", 58 + "type": "ref" 59 }, 60 "results": { 61 "type": "array", 62 "items": { 63 + "refs": [ 64 + "#createResult", 65 + "#updateResult", 66 + "#deleteResult" 67 + ], 68 "type": "union", 69 "closed": true 70 } 71 } 72 } 73 + }, 74 + "encoding": "application/json" 75 }, 76 + "description": "Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS." 77 }, 78 "create": { 79 "type": "object", 80 + "required": [ 81 + "collection", 82 + "value" 83 + ], 84 "properties": { 85 "rkey": { 86 "type": "string", 87 + "format": "record-key", 88 "maxLength": 512, 89 "description": "NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility." 90 }, 91 + "value": { 92 + "type": "unknown" 93 + }, 94 + "collection": { 95 + "type": "string", 96 + "format": "nsid" 97 + } 98 + }, 99 + "description": "Operation which creates a new record." 100 }, 101 + "delete": { 102 "type": "object", 103 + "required": [ 104 + "collection", 105 + "rkey" 106 + ], 107 "properties": { 108 + "rkey": { 109 + "type": "string", 110 + "format": "record-key" 111 + }, 112 + "collection": { 113 + "type": "string", 114 + "format": "nsid" 115 + } 116 + }, 117 + "description": "Operation which deletes an existing record." 118 }, 119 + "update": { 120 "type": "object", 121 + "required": [ 122 + "collection", 123 + "rkey", 124 + "value" 125 + ], 126 "properties": { 127 + "rkey": { 128 + "type": "string", 129 + "format": "record-key" 130 + }, 131 + "value": { 132 + "type": "unknown" 133 + }, 134 + "collection": { 135 + "type": "string", 136 + "format": "nsid" 137 + } 138 + }, 139 + "description": "Operation which updates an existing record." 140 }, 141 "createResult": { 142 "type": "object", 143 + "required": [ 144 + "uri", 145 + "cid" 146 + ], 147 "properties": { 148 + "cid": { 149 + "type": "string", 150 + "format": "cid" 151 + }, 152 + "uri": { 153 + "type": "string", 154 + "format": "at-uri" 155 + }, 156 "validationStatus": { 157 "type": "string", 158 + "knownValues": [ 159 + "valid", 160 + "unknown" 161 + ] 162 } 163 } 164 }, 165 + "deleteResult": { 166 + "type": "object", 167 + "required": [], 168 + "properties": {} 169 + }, 170 "updateResult": { 171 "type": "object", 172 + "required": [ 173 + "uri", 174 + "cid" 175 + ], 176 "properties": { 177 + "cid": { 178 + "type": "string", 179 + "format": "cid" 180 + }, 181 + "uri": { 182 + "type": "string", 183 + "format": "at-uri" 184 + }, 185 "validationStatus": { 186 "type": "string", 187 + "knownValues": [ 188 + "valid", 189 + "unknown" 190 + ] 191 } 192 } 193 } 194 } 195 + }
+45 -29
lexicons/com/atproto/repo/createRecord.json
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 - "description": "Create a single new repository record. Requires auth, implemented by PDS.", 8 "input": { 9 - "encoding": "application/json", 10 "schema": { 11 "type": "object", 12 - "required": ["repo", "collection", "record"], 13 "properties": { 14 "repo": { 15 "type": "string", 16 "format": "at-identifier", 17 "description": "The handle or DID of the repo (aka, current account)." 18 }, 19 - "collection": { 20 - "type": "string", 21 - "format": "nsid", 22 - "description": "The NSID of the record collection." 23 - }, 24 "rkey": { 25 "type": "string", 26 "format": "record-key", 27 - "description": "The Record Key.", 28 - "maxLength": 512 29 }, 30 "validate": { 31 "type": "boolean", 32 "description": "Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons." 33 }, 34 - "record": { 35 - "type": "unknown", 36 - "description": "The record itself. Must contain a $type field." 37 }, 38 "swapCommit": { 39 "type": "string", ··· 41 "description": "Compare and swap with the previous commit by CID." 42 } 43 } 44 } 45 - }, 46 "output": { 47 - "encoding": "application/json", 48 "schema": { 49 "type": "object", 50 - "required": ["uri", "cid"], 51 "properties": { 52 - "uri": { "type": "string", "format": "at-uri" }, 53 - "cid": { "type": "string", "format": "cid" }, 54 "commit": { 55 - "type": "ref", 56 - "ref": "com.atproto.repo.defs#commitMeta" 57 }, 58 "validationStatus": { 59 "type": "string", 60 - "knownValues": ["valid", "unknown"] 61 } 62 } 63 - } 64 }, 65 - "errors": [ 66 - { 67 - "name": "InvalidSwap", 68 - "description": "Indicates that 'swapCommit' didn't match current repo commit." 69 - } 70 - ] 71 } 72 } 73 - }
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 "input": { 8 "schema": { 9 "type": "object", 10 + "required": [ 11 + "repo", 12 + "collection", 13 + "record" 14 + ], 15 "properties": { 16 "repo": { 17 "type": "string", 18 "format": "at-identifier", 19 "description": "The handle or DID of the repo (aka, current account)." 20 }, 21 "rkey": { 22 "type": "string", 23 "format": "record-key", 24 + "maxLength": 512, 25 + "description": "The Record Key." 26 + }, 27 + "record": { 28 + "type": "unknown", 29 + "description": "The record itself. Must contain a $type field." 30 }, 31 "validate": { 32 "type": "boolean", 33 "description": "Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons." 34 }, 35 + "collection": { 36 + "type": "string", 37 + "format": "nsid", 38 + "description": "The NSID of the record collection." 39 }, 40 "swapCommit": { 41 "type": "string", ··· 43 "description": "Compare and swap with the previous commit by CID." 44 } 45 } 46 + }, 47 + "encoding": "application/json" 48 + }, 49 + "errors": [ 50 + { 51 + "name": "InvalidSwap", 52 + "description": "Indicates that 'swapCommit' didn't match current repo commit." 53 } 54 + ], 55 "output": { 56 "schema": { 57 "type": "object", 58 + "required": [ 59 + "uri", 60 + "cid" 61 + ], 62 "properties": { 63 + "cid": { 64 + "type": "string", 65 + "format": "cid" 66 + }, 67 + "uri": { 68 + "type": "string", 69 + "format": "at-uri" 70 + }, 71 "commit": { 72 + "ref": "com.atproto.repo.defs#commitMeta", 73 + "type": "ref" 74 }, 75 "validationStatus": { 76 "type": "string", 77 + "knownValues": [ 78 + "valid", 79 + "unknown" 80 + ] 81 } 82 } 83 + }, 84 + "encoding": "application/json" 85 }, 86 + "description": "Create a single new repository record. Requires auth, implemented by PDS." 87 } 88 } 89 + }
+13 -4
lexicons/com/atproto/repo/defs.json
··· 4 "defs": { 5 "commitMeta": { 6 "type": "object", 7 - "required": ["cid", "rev"], 8 "properties": { 9 - "cid": { "type": "string", "format": "cid" }, 10 - "rev": { "type": "string", "format": "tid" } 11 } 12 } 13 } 14 - }
··· 4 "defs": { 5 "commitMeta": { 6 "type": "object", 7 + "required": [ 8 + "cid", 9 + "rev" 10 + ], 11 "properties": { 12 + "cid": { 13 + "type": "string", 14 + "format": "cid" 15 + }, 16 + "rev": { 17 + "type": "string", 18 + "format": "tid" 19 + } 20 } 21 } 22 } 23 + }
+26 -18
lexicons/com/atproto/repo/deleteRecord.json
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 - "description": "Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS.", 8 "input": { 9 - "encoding": "application/json", 10 "schema": { 11 "type": "object", 12 - "required": ["repo", "collection", "rkey"], 13 "properties": { 14 "repo": { 15 "type": "string", 16 "format": "at-identifier", 17 "description": "The handle or DID of the repo (aka, current account)." 18 }, 19 - "collection": { 20 - "type": "string", 21 - "format": "nsid", 22 - "description": "The NSID of the record collection." 23 - }, 24 "rkey": { 25 "type": "string", 26 "format": "record-key", 27 "description": "The Record Key." 28 }, 29 - "swapRecord": { 30 "type": "string", 31 - "format": "cid", 32 - "description": "Compare and swap with the previous record by CID." 33 }, 34 "swapCommit": { 35 "type": "string", 36 "format": "cid", 37 "description": "Compare and swap with the previous commit by CID." 38 } 39 } 40 } 41 - }, 42 "output": { 43 - "encoding": "application/json", 44 "schema": { 45 "type": "object", 46 "properties": { 47 "commit": { 48 - "type": "ref", 49 - "ref": "com.atproto.repo.defs#commitMeta" 50 } 51 } 52 - } 53 }, 54 - "errors": [{ "name": "InvalidSwap" }] 55 } 56 } 57 - }
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 "input": { 8 "schema": { 9 "type": "object", 10 + "required": [ 11 + "repo", 12 + "collection", 13 + "rkey" 14 + ], 15 "properties": { 16 "repo": { 17 "type": "string", 18 "format": "at-identifier", 19 "description": "The handle or DID of the repo (aka, current account)." 20 }, 21 "rkey": { 22 "type": "string", 23 "format": "record-key", 24 "description": "The Record Key." 25 }, 26 + "collection": { 27 "type": "string", 28 + "format": "nsid", 29 + "description": "The NSID of the record collection." 30 }, 31 "swapCommit": { 32 "type": "string", 33 "format": "cid", 34 "description": "Compare and swap with the previous commit by CID." 35 + }, 36 + "swapRecord": { 37 + "type": "string", 38 + "format": "cid", 39 + "description": "Compare and swap with the previous record by CID." 40 } 41 } 42 + }, 43 + "encoding": "application/json" 44 + }, 45 + "errors": [ 46 + { 47 + "name": "InvalidSwap" 48 } 49 + ], 50 "output": { 51 "schema": { 52 "type": "object", 53 "properties": { 54 "commit": { 55 + "ref": "com.atproto.repo.defs#commitMeta", 56 + "type": "ref" 57 } 58 } 59 + }, 60 + "encoding": "application/json" 61 }, 62 + "description": "Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS." 63 } 64 } 65 + }
+30 -19
lexicons/com/atproto/repo/describeRepo.json
··· 4 "defs": { 5 "main": { 6 "type": "query", 7 - "description": "Get information about an account and repository, including the list of collections. Does not require auth.", 8 - "parameters": { 9 - "type": "params", 10 - "required": ["repo"], 11 - "properties": { 12 - "repo": { 13 - "type": "string", 14 - "format": "at-identifier", 15 - "description": "The handle or DID of the repo." 16 - } 17 - } 18 - }, 19 "output": { 20 - "encoding": "application/json", 21 "schema": { 22 "type": "object", 23 "required": [ ··· 28 "handleIsCorrect" 29 ], 30 "properties": { 31 - "handle": { "type": "string", "format": "handle" }, 32 - "did": { "type": "string", "format": "did" }, 33 "didDoc": { 34 "type": "unknown", 35 "description": "The complete DID document for this account." 36 }, 37 "collections": { 38 "type": "array", 39 - "description": "List of all the collections (NSIDs) for which this repo contains at least one record.", 40 - "items": { "type": "string", "format": "nsid" } 41 }, 42 "handleIsCorrect": { 43 "type": "boolean", 44 "description": "Indicates if handle is currently valid (resolves bi-directionally)" 45 } 46 } 47 } 48 - } 49 } 50 } 51 - }
··· 4 "defs": { 5 "main": { 6 "type": "query", 7 "output": { 8 "schema": { 9 "type": "object", 10 "required": [ ··· 15 "handleIsCorrect" 16 ], 17 "properties": { 18 + "did": { 19 + "type": "string", 20 + "format": "did" 21 + }, 22 "didDoc": { 23 "type": "unknown", 24 "description": "The complete DID document for this account." 25 }, 26 + "handle": { 27 + "type": "string", 28 + "format": "handle" 29 + }, 30 "collections": { 31 "type": "array", 32 + "items": { 33 + "type": "string", 34 + "format": "nsid" 35 + }, 36 + "description": "List of all the collections (NSIDs) for which this repo contains at least one record." 37 }, 38 "handleIsCorrect": { 39 "type": "boolean", 40 "description": "Indicates if handle is currently valid (resolves bi-directionally)" 41 } 42 } 43 + }, 44 + "encoding": "application/json" 45 + }, 46 + "parameters": { 47 + "type": "params", 48 + "required": [ 49 + "repo" 50 + ], 51 + "properties": { 52 + "repo": { 53 + "type": "string", 54 + "format": "at-identifier", 55 + "description": "The handle or DID of the repo." 56 + } 57 } 58 + }, 59 + "description": "Get information about an account and repository, including the list of collections. Does not require auth." 60 } 61 } 62 + }
+45 -26
lexicons/com/atproto/repo/getRecord.json
··· 4 "defs": { 5 "main": { 6 "type": "query", 7 - "description": "Get a single record from a repository. Does not require auth.", 8 "parameters": { 9 "type": "params", 10 - "required": ["repo", "collection", "rkey"], 11 "properties": { 12 "repo": { 13 "type": "string", 14 "format": "at-identifier", 15 "description": "The handle or DID of the repo." 16 - }, 17 - "collection": { 18 - "type": "string", 19 - "format": "nsid", 20 - "description": "The NSID of the record collection." 21 }, 22 "rkey": { 23 "type": "string", 24 - "description": "The Record Key.", 25 - "format": "record-key" 26 }, 27 - "cid": { 28 "type": "string", 29 - "format": "cid", 30 - "description": "The CID of the version of the record. If not specified, then return the most recent version." 31 } 32 } 33 }, 34 - "output": { 35 - "encoding": "application/json", 36 - "schema": { 37 - "type": "object", 38 - "required": ["uri", "value"], 39 - "properties": { 40 - "uri": { "type": "string", "format": "at-uri" }, 41 - "cid": { "type": "string", "format": "cid" }, 42 - "value": { "type": "unknown" } 43 - } 44 - } 45 - }, 46 - "errors": [{ "name": "RecordNotFound" }] 47 } 48 } 49 - }
··· 4 "defs": { 5 "main": { 6 "type": "query", 7 + "errors": [ 8 + { 9 + "name": "RecordNotFound" 10 + } 11 + ], 12 + "output": { 13 + "schema": { 14 + "type": "object", 15 + "required": [ 16 + "uri", 17 + "value" 18 + ], 19 + "properties": { 20 + "cid": { 21 + "type": "string", 22 + "format": "cid" 23 + }, 24 + "uri": { 25 + "type": "string", 26 + "format": "at-uri" 27 + }, 28 + "value": { 29 + "type": "unknown" 30 + } 31 + } 32 + }, 33 + "encoding": "application/json" 34 + }, 35 "parameters": { 36 "type": "params", 37 + "required": [ 38 + "repo", 39 + "collection", 40 + "rkey" 41 + ], 42 "properties": { 43 + "cid": { 44 + "type": "string", 45 + "format": "cid", 46 + "description": "The CID of the version of the record. If not specified, then return the most recent version." 47 + }, 48 "repo": { 49 "type": "string", 50 "format": "at-identifier", 51 "description": "The handle or DID of the repo." 52 }, 53 "rkey": { 54 "type": "string", 55 + "format": "record-key", 56 + "description": "The Record Key." 57 }, 58 + "collection": { 59 "type": "string", 60 + "format": "nsid", 61 + "description": "The NSID of the record collection." 62 } 63 } 64 }, 65 + "description": "Get a single record from a repository. Does not require auth." 66 } 67 } 68 + }
+3 -3
lexicons/com/atproto/repo/importRepo.json
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 - "description": "Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set.", 8 "input": { 9 "encoding": "application/vnd.ipld.car" 10 - } 11 } 12 } 13 - }
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 "input": { 8 "encoding": "application/vnd.ipld.car" 9 + }, 10 + "description": "Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set." 11 } 12 } 13 + }
+40 -22
lexicons/com/atproto/repo/listMissingBlobs.json
··· 4 "defs": { 5 "main": { 6 "type": "query", 7 - "description": "Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow.", 8 - "parameters": { 9 - "type": "params", 10 - "properties": { 11 - "limit": { 12 - "type": "integer", 13 - "minimum": 1, 14 - "maximum": 1000, 15 - "default": 500 16 - }, 17 - "cursor": { "type": "string" } 18 - } 19 - }, 20 "output": { 21 - "encoding": "application/json", 22 "schema": { 23 "type": "object", 24 - "required": ["blobs"], 25 "properties": { 26 - "cursor": { "type": "string" }, 27 "blobs": { 28 "type": "array", 29 - "items": { "type": "ref", "ref": "#recordBlob" } 30 } 31 } 32 } 33 - } 34 }, 35 "recordBlob": { 36 "type": "object", 37 - "required": ["cid", "recordUri"], 38 "properties": { 39 - "cid": { "type": "string", "format": "cid" }, 40 - "recordUri": { "type": "string", "format": "at-uri" } 41 } 42 } 43 } 44 - }
··· 4 "defs": { 5 "main": { 6 "type": "query", 7 "output": { 8 "schema": { 9 "type": "object", 10 + "required": [ 11 + "blobs" 12 + ], 13 "properties": { 14 "blobs": { 15 "type": "array", 16 + "items": { 17 + "ref": "#recordBlob", 18 + "type": "ref" 19 + } 20 + }, 21 + "cursor": { 22 + "type": "string" 23 } 24 } 25 + }, 26 + "encoding": "application/json" 27 + }, 28 + "parameters": { 29 + "type": "params", 30 + "properties": { 31 + "limit": { 32 + "type": "integer", 33 + "default": 500, 34 + "maximum": 1000, 35 + "minimum": 1 36 + }, 37 + "cursor": { 38 + "type": "string" 39 + } 40 } 41 + }, 42 + "description": "Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow." 43 }, 44 "recordBlob": { 45 "type": "object", 46 + "required": [ 47 + "cid", 48 + "recordUri" 49 + ], 50 "properties": { 51 + "cid": { 52 + "type": "string", 53 + "format": "cid" 54 + }, 55 + "recordUri": { 56 + "type": "string", 57 + "format": "at-uri" 58 + } 59 } 60 } 61 } 62 + }
+52 -36
lexicons/com/atproto/repo/listRecords.json
··· 4 "defs": { 5 "main": { 6 "type": "query", 7 - "description": "List a range of records in a repository, matching a specific collection. Does not require auth.", 8 "parameters": { 9 "type": "params", 10 - "required": ["repo", "collection"], 11 "properties": { 12 "repo": { 13 "type": "string", 14 "format": "at-identifier", 15 "description": "The handle or DID of the repo." 16 }, 17 - "collection": { 18 - "type": "string", 19 - "format": "nsid", 20 - "description": "The NSID of the record type." 21 - }, 22 "limit": { 23 "type": "integer", 24 - "minimum": 1, 25 "maximum": 100, 26 - "default": 50, 27 "description": "The number of records to return." 28 }, 29 - "cursor": { "type": "string" }, 30 - "rkeyStart": { 31 - "type": "string", 32 - "description": "DEPRECATED: The lowest sort-ordered rkey to start from (exclusive)" 33 - }, 34 - "rkeyEnd": { 35 - "type": "string", 36 - "description": "DEPRECATED: The highest sort-ordered rkey to stop at (exclusive)" 37 }, 38 "reverse": { 39 "type": "boolean", 40 "description": "Flag to reverse the order of the returned records." 41 } 42 } 43 }, 44 - "output": { 45 - "encoding": "application/json", 46 - "schema": { 47 - "type": "object", 48 - "required": ["records"], 49 - "properties": { 50 - "cursor": { "type": "string" }, 51 - "records": { 52 - "type": "array", 53 - "items": { "type": "ref", "ref": "#record" } 54 - } 55 - } 56 - } 57 - } 58 }, 59 "record": { 60 "type": "object", 61 - "required": ["uri", "cid", "value"], 62 "properties": { 63 - "uri": { "type": "string", "format": "at-uri" }, 64 - "cid": { "type": "string", "format": "cid" }, 65 - "value": { "type": "unknown" } 66 } 67 } 68 } 69 - }
··· 4 "defs": { 5 "main": { 6 "type": "query", 7 + "output": { 8 + "schema": { 9 + "type": "object", 10 + "required": [ 11 + "records" 12 + ], 13 + "properties": { 14 + "cursor": { 15 + "type": "string" 16 + }, 17 + "records": { 18 + "type": "array", 19 + "items": { 20 + "ref": "#record", 21 + "type": "ref" 22 + } 23 + } 24 + } 25 + }, 26 + "encoding": "application/json" 27 + }, 28 "parameters": { 29 "type": "params", 30 + "required": [ 31 + "repo", 32 + "collection" 33 + ], 34 "properties": { 35 "repo": { 36 "type": "string", 37 "format": "at-identifier", 38 "description": "The handle or DID of the repo." 39 }, 40 "limit": { 41 "type": "integer", 42 + "default": 50, 43 "maximum": 100, 44 + "minimum": 1, 45 "description": "The number of records to return." 46 }, 47 + "cursor": { 48 + "type": "string" 49 }, 50 "reverse": { 51 "type": "boolean", 52 "description": "Flag to reverse the order of the returned records." 53 + }, 54 + "collection": { 55 + "type": "string", 56 + "format": "nsid", 57 + "description": "The NSID of the record type." 58 } 59 } 60 }, 61 + "description": "List a range of records in a repository, matching a specific collection. Does not require auth." 62 }, 63 "record": { 64 "type": "object", 65 + "required": [ 66 + "uri", 67 + "cid", 68 + "value" 69 + ], 70 "properties": { 71 + "cid": { 72 + "type": "string", 73 + "format": "cid" 74 + }, 75 + "uri": { 76 + "type": "string", 77 + "format": "at-uri" 78 + }, 79 + "value": { 80 + "type": "unknown" 81 + } 82 } 83 } 84 } 85 + }
+52 -29
lexicons/com/atproto/repo/putRecord.json
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 - "description": "Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS.", 8 "input": { 9 - "encoding": "application/json", 10 "schema": { 11 "type": "object", 12 - "required": ["repo", "collection", "rkey", "record"], 13 - "nullable": ["swapRecord"], 14 "properties": { 15 "repo": { 16 "type": "string", 17 "format": "at-identifier", 18 "description": "The handle or DID of the repo (aka, current account)." 19 }, 20 - "collection": { 21 - "type": "string", 22 - "format": "nsid", 23 - "description": "The NSID of the record collection." 24 - }, 25 "rkey": { 26 "type": "string", 27 "format": "record-key", 28 - "description": "The Record Key.", 29 - "maxLength": 512 30 }, 31 "validate": { 32 "type": "boolean", 33 "description": "Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons." 34 }, 35 - "record": { 36 - "type": "unknown", 37 - "description": "The record to write." 38 - }, 39 - "swapRecord": { 40 "type": "string", 41 - "format": "cid", 42 - "description": "Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation" 43 }, 44 "swapCommit": { 45 "type": "string", 46 "format": "cid", 47 "description": "Compare and swap with the previous commit by CID." 48 } 49 } 50 - } 51 }, 52 "output": { 53 - "encoding": "application/json", 54 "schema": { 55 "type": "object", 56 - "required": ["uri", "cid"], 57 "properties": { 58 - "uri": { "type": "string", "format": "at-uri" }, 59 - "cid": { "type": "string", "format": "cid" }, 60 "commit": { 61 - "type": "ref", 62 - "ref": "com.atproto.repo.defs#commitMeta" 63 }, 64 "validationStatus": { 65 "type": "string", 66 - "knownValues": ["valid", "unknown"] 67 } 68 } 69 - } 70 }, 71 - "errors": [{ "name": "InvalidSwap" }] 72 } 73 } 74 - }
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 "input": { 8 "schema": { 9 "type": "object", 10 + "nullable": [ 11 + "swapRecord" 12 + ], 13 + "required": [ 14 + "repo", 15 + "collection", 16 + "rkey", 17 + "record" 18 + ], 19 "properties": { 20 "repo": { 21 "type": "string", 22 "format": "at-identifier", 23 "description": "The handle or DID of the repo (aka, current account)." 24 }, 25 "rkey": { 26 "type": "string", 27 "format": "record-key", 28 + "maxLength": 512, 29 + "description": "The Record Key." 30 + }, 31 + "record": { 32 + "type": "unknown", 33 + "description": "The record to write." 34 }, 35 "validate": { 36 "type": "boolean", 37 "description": "Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons." 38 }, 39 + "collection": { 40 "type": "string", 41 + "format": "nsid", 42 + "description": "The NSID of the record collection." 43 }, 44 "swapCommit": { 45 "type": "string", 46 "format": "cid", 47 "description": "Compare and swap with the previous commit by CID." 48 + }, 49 + "swapRecord": { 50 + "type": "string", 51 + "format": "cid", 52 + "description": "Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation" 53 } 54 } 55 + }, 56 + "encoding": "application/json" 57 }, 58 + "errors": [ 59 + { 60 + "name": "InvalidSwap" 61 + } 62 + ], 63 "output": { 64 "schema": { 65 "type": "object", 66 + "required": [ 67 + "uri", 68 + "cid" 69 + ], 70 "properties": { 71 + "cid": { 72 + "type": "string", 73 + "format": "cid" 74 + }, 75 + "uri": { 76 + "type": "string", 77 + "format": "at-uri" 78 + }, 79 "commit": { 80 + "ref": "com.atproto.repo.defs#commitMeta", 81 + "type": "ref" 82 }, 83 "validationStatus": { 84 "type": "string", 85 + "knownValues": [ 86 + "valid", 87 + "unknown" 88 + ] 89 } 90 } 91 + }, 92 + "encoding": "application/json" 93 }, 94 + "description": "Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS." 95 } 96 } 97 + }
+13 -4
lexicons/com/atproto/repo/strongRef.json
··· 5 "defs": { 6 "main": { 7 "type": "object", 8 - "required": ["uri", "cid"], 9 "properties": { 10 - "uri": { "type": "string", "format": "at-uri" }, 11 - "cid": { "type": "string", "format": "cid" } 12 } 13 } 14 } 15 - }
··· 5 "defs": { 6 "main": { 7 "type": "object", 8 + "required": [ 9 + "uri", 10 + "cid" 11 + ], 12 "properties": { 13 + "cid": { 14 + "type": "string", 15 + "format": "cid" 16 + }, 17 + "uri": { 18 + "type": "string", 19 + "format": "at-uri" 20 + } 21 } 22 } 23 } 24 + }
+11 -7
lexicons/com/atproto/repo/uploadBlob.json
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 - "description": "Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS.", 8 "input": { 9 "encoding": "*/*" 10 }, 11 "output": { 12 - "encoding": "application/json", 13 "schema": { 14 "type": "object", 15 - "required": ["blob"], 16 "properties": { 17 - "blob": { "type": "blob" } 18 } 19 - } 20 - } 21 } 22 } 23 - }
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 "input": { 8 "encoding": "*/*" 9 }, 10 "output": { 11 "schema": { 12 "type": "object", 13 + "required": [ 14 + "blob" 15 + ], 16 "properties": { 17 + "blob": { 18 + "type": "blob" 19 + } 20 } 21 + }, 22 + "encoding": "application/json" 23 + }, 24 + "description": "Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS." 25 } 26 } 27 + }
+17
lexicons.json
···
··· 1 + { 2 + "lexicons": [ 3 + "app.bsky.actor.defs", 4 + "com.atproto.repo.uploadBlob", 5 + "com.atproto.repo.strongRef", 6 + "com.atproto.repo.putRecord", 7 + "com.atproto.repo.listRecords", 8 + "com.atproto.repo.listMissingBlobs", 9 + "com.atproto.repo.importRepo", 10 + "com.atproto.repo.getRecord", 11 + "com.atproto.repo.describeRepo", 12 + "com.atproto.repo.deleteRecord", 13 + "com.atproto.repo.defs", 14 + "com.atproto.repo.createRecord", 15 + "com.atproto.repo.applyWrites" 16 + ] 17 + }
+6 -2
package.json
··· 21 "start:client": "pnpm --filter @statusphere/client start", 22 "clean": "pnpm -r clean", 23 "format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\"", 24 - "typecheck": "pnpm -r typecheck" 25 }, 26 "devDependencies": { 27 "@atproto/lex-cli": "^0.6.1", ··· 32 "rimraf": "^6.0.1", 33 "typescript": "^5.8.2" 34 }, 35 - "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0" 36 }
··· 21 "start:client": "pnpm --filter @statusphere/client start", 22 "clean": "pnpm -r clean", 23 "format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\"", 24 + "typecheck": "pnpm -r typecheck", 25 + "lpm": "node node_modules/@lpm/cli/bin.js" 26 }, 27 "devDependencies": { 28 "@atproto/lex-cli": "^0.6.1", ··· 33 "rimraf": "^6.0.1", 34 "typescript": "^5.8.2" 35 }, 36 + "packageManager": "pnpm@10.18.1", 37 + "dependencies": { 38 + "@lpm/cli": "jsr:0.3.0-rc.1" 39 + } 40 }
+206
packages/lexicon/src/index.ts
··· 7 import { schemas } from './lexicons.js' 8 import * as AppBskyActorDefs from './types/app/bsky/actor/defs.js' 9 import * as AppBskyActorProfile from './types/app/bsky/actor/profile.js' 10 import * as ComAtprotoLabelDefs from './types/com/atproto/label/defs.js' 11 import * as ComAtprotoRepoApplyWrites from './types/com/atproto/repo/applyWrites.js' 12 import * as ComAtprotoRepoCreateRecord from './types/com/atproto/repo/createRecord.js' ··· 47 export * as ComAtprotoRepoUploadBlob from './types/com/atproto/repo/uploadBlob.js' 48 export * as AppBskyActorDefs from './types/app/bsky/actor/defs.js' 49 export * as AppBskyActorProfile from './types/app/bsky/actor/profile.js' 50 51 export class AtpBaseClient extends XrpcClient { 52 xyz: XyzNS ··· 329 export class AppBskyNS { 330 _client: XrpcClient 331 actor: AppBskyActorNS 332 333 constructor(client: XrpcClient) { 334 this._client = client 335 this.actor = new AppBskyActorNS(client) 336 } 337 } 338 ··· 411 ) 412 } 413 }
··· 7 import { schemas } from './lexicons.js' 8 import * as AppBskyActorDefs from './types/app/bsky/actor/defs.js' 9 import * as AppBskyActorProfile from './types/app/bsky/actor/profile.js' 10 + import * as AppBskyEmbedDefs from './types/app/bsky/embed/defs.js' 11 + import * as AppBskyEmbedExternal from './types/app/bsky/embed/external.js' 12 + import * as AppBskyEmbedImages from './types/app/bsky/embed/images.js' 13 + import * as AppBskyEmbedRecord from './types/app/bsky/embed/record.js' 14 + import * as AppBskyEmbedRecordWithMedia from './types/app/bsky/embed/recordWithMedia.js' 15 + import * as AppBskyEmbedVideo from './types/app/bsky/embed/video.js' 16 + import * as AppBskyFeedDefs from './types/app/bsky/feed/defs.js' 17 + import * as AppBskyFeedPostgate from './types/app/bsky/feed/postgate.js' 18 + import * as AppBskyFeedThreadgate from './types/app/bsky/feed/threadgate.js' 19 + import * as AppBskyGraphDefs from './types/app/bsky/graph/defs.js' 20 + import * as AppBskyLabelerDefs from './types/app/bsky/labeler/defs.js' 21 + import * as AppBskyRichtextFacet from './types/app/bsky/richtext/facet.js' 22 import * as ComAtprotoLabelDefs from './types/com/atproto/label/defs.js' 23 import * as ComAtprotoRepoApplyWrites from './types/com/atproto/repo/applyWrites.js' 24 import * as ComAtprotoRepoCreateRecord from './types/com/atproto/repo/createRecord.js' ··· 59 export * as ComAtprotoRepoUploadBlob from './types/com/atproto/repo/uploadBlob.js' 60 export * as AppBskyActorDefs from './types/app/bsky/actor/defs.js' 61 export * as AppBskyActorProfile from './types/app/bsky/actor/profile.js' 62 + export * as AppBskyEmbedDefs from './types/app/bsky/embed/defs.js' 63 + export * as AppBskyEmbedExternal from './types/app/bsky/embed/external.js' 64 + export * as AppBskyEmbedImages from './types/app/bsky/embed/images.js' 65 + export * as AppBskyEmbedRecord from './types/app/bsky/embed/record.js' 66 + export * as AppBskyEmbedRecordWithMedia from './types/app/bsky/embed/recordWithMedia.js' 67 + export * as AppBskyEmbedVideo from './types/app/bsky/embed/video.js' 68 + export * as AppBskyFeedDefs from './types/app/bsky/feed/defs.js' 69 + export * as AppBskyFeedPostgate from './types/app/bsky/feed/postgate.js' 70 + export * as AppBskyFeedThreadgate from './types/app/bsky/feed/threadgate.js' 71 + export * as AppBskyGraphDefs from './types/app/bsky/graph/defs.js' 72 + export * as AppBskyLabelerDefs from './types/app/bsky/labeler/defs.js' 73 + export * as AppBskyRichtextFacet from './types/app/bsky/richtext/facet.js' 74 + 75 + export const APP_BSKY_FEED = { 76 + DefsRequestLess: 'app.bsky.feed.defs#requestLess', 77 + DefsRequestMore: 'app.bsky.feed.defs#requestMore', 78 + DefsInteractionLike: 'app.bsky.feed.defs#interactionLike', 79 + DefsInteractionSeen: 'app.bsky.feed.defs#interactionSeen', 80 + DefsClickthroughItem: 'app.bsky.feed.defs#clickthroughItem', 81 + DefsContentModeVideo: 'app.bsky.feed.defs#contentModeVideo', 82 + DefsInteractionQuote: 'app.bsky.feed.defs#interactionQuote', 83 + DefsInteractionReply: 'app.bsky.feed.defs#interactionReply', 84 + DefsInteractionShare: 'app.bsky.feed.defs#interactionShare', 85 + DefsClickthroughEmbed: 'app.bsky.feed.defs#clickthroughEmbed', 86 + DefsInteractionRepost: 'app.bsky.feed.defs#interactionRepost', 87 + DefsClickthroughAuthor: 'app.bsky.feed.defs#clickthroughAuthor', 88 + DefsClickthroughReposter: 'app.bsky.feed.defs#clickthroughReposter', 89 + DefsContentModeUnspecified: 'app.bsky.feed.defs#contentModeUnspecified', 90 + } 91 + export const APP_BSKY_GRAPH = { 92 + DefsModlist: 'app.bsky.graph.defs#modlist', 93 + DefsCuratelist: 'app.bsky.graph.defs#curatelist', 94 + DefsReferencelist: 'app.bsky.graph.defs#referencelist', 95 + } 96 97 export class AtpBaseClient extends XrpcClient { 98 xyz: XyzNS ··· 375 export class AppBskyNS { 376 _client: XrpcClient 377 actor: AppBskyActorNS 378 + embed: AppBskyEmbedNS 379 + feed: AppBskyFeedNS 380 + richtext: AppBskyRichtextNS 381 382 constructor(client: XrpcClient) { 383 this._client = client 384 this.actor = new AppBskyActorNS(client) 385 + this.embed = new AppBskyEmbedNS(client) 386 + this.feed = new AppBskyFeedNS(client) 387 + this.richtext = new AppBskyRichtextNS(client) 388 } 389 } 390 ··· 463 ) 464 } 465 } 466 + 467 + export class AppBskyEmbedNS { 468 + _client: XrpcClient 469 + 470 + constructor(client: XrpcClient) { 471 + this._client = client 472 + } 473 + } 474 + 475 + export class AppBskyFeedNS { 476 + _client: XrpcClient 477 + postgate: PostgateRecord 478 + threadgate: ThreadgateRecord 479 + 480 + constructor(client: XrpcClient) { 481 + this._client = client 482 + this.postgate = new PostgateRecord(client) 483 + this.threadgate = new ThreadgateRecord(client) 484 + } 485 + } 486 + 487 + export class PostgateRecord { 488 + _client: XrpcClient 489 + 490 + constructor(client: XrpcClient) { 491 + this._client = client 492 + } 493 + 494 + async list( 495 + params: OmitKey<ComAtprotoRepoListRecords.QueryParams, 'collection'>, 496 + ): Promise<{ 497 + cursor?: string 498 + records: { uri: string; value: AppBskyFeedPostgate.Record }[] 499 + }> { 500 + const res = await this._client.call('com.atproto.repo.listRecords', { 501 + collection: 'app.bsky.feed.postgate', 502 + ...params, 503 + }) 504 + return res.data 505 + } 506 + 507 + async get( 508 + params: OmitKey<ComAtprotoRepoGetRecord.QueryParams, 'collection'>, 509 + ): Promise<{ uri: string; cid: string; value: AppBskyFeedPostgate.Record }> { 510 + const res = await this._client.call('com.atproto.repo.getRecord', { 511 + collection: 'app.bsky.feed.postgate', 512 + ...params, 513 + }) 514 + return res.data 515 + } 516 + 517 + async create( 518 + params: OmitKey< 519 + ComAtprotoRepoCreateRecord.InputSchema, 520 + 'collection' | 'record' 521 + >, 522 + record: Un$Typed<AppBskyFeedPostgate.Record>, 523 + headers?: Record<string, string>, 524 + ): Promise<{ uri: string; cid: string }> { 525 + const collection = 'app.bsky.feed.postgate' 526 + const res = await this._client.call( 527 + 'com.atproto.repo.createRecord', 528 + undefined, 529 + { collection, ...params, record: { ...record, $type: collection } }, 530 + { encoding: 'application/json', headers }, 531 + ) 532 + return res.data 533 + } 534 + 535 + async delete( 536 + params: OmitKey<ComAtprotoRepoDeleteRecord.InputSchema, 'collection'>, 537 + headers?: Record<string, string>, 538 + ): Promise<void> { 539 + await this._client.call( 540 + 'com.atproto.repo.deleteRecord', 541 + undefined, 542 + { collection: 'app.bsky.feed.postgate', ...params }, 543 + { headers }, 544 + ) 545 + } 546 + } 547 + 548 + export class ThreadgateRecord { 549 + _client: XrpcClient 550 + 551 + constructor(client: XrpcClient) { 552 + this._client = client 553 + } 554 + 555 + async list( 556 + params: OmitKey<ComAtprotoRepoListRecords.QueryParams, 'collection'>, 557 + ): Promise<{ 558 + cursor?: string 559 + records: { uri: string; value: AppBskyFeedThreadgate.Record }[] 560 + }> { 561 + const res = await this._client.call('com.atproto.repo.listRecords', { 562 + collection: 'app.bsky.feed.threadgate', 563 + ...params, 564 + }) 565 + return res.data 566 + } 567 + 568 + async get( 569 + params: OmitKey<ComAtprotoRepoGetRecord.QueryParams, 'collection'>, 570 + ): Promise<{ 571 + uri: string 572 + cid: string 573 + value: AppBskyFeedThreadgate.Record 574 + }> { 575 + const res = await this._client.call('com.atproto.repo.getRecord', { 576 + collection: 'app.bsky.feed.threadgate', 577 + ...params, 578 + }) 579 + return res.data 580 + } 581 + 582 + async create( 583 + params: OmitKey< 584 + ComAtprotoRepoCreateRecord.InputSchema, 585 + 'collection' | 'record' 586 + >, 587 + record: Un$Typed<AppBskyFeedThreadgate.Record>, 588 + headers?: Record<string, string>, 589 + ): Promise<{ uri: string; cid: string }> { 590 + const collection = 'app.bsky.feed.threadgate' 591 + const res = await this._client.call( 592 + 'com.atproto.repo.createRecord', 593 + undefined, 594 + { collection, ...params, record: { ...record, $type: collection } }, 595 + { encoding: 'application/json', headers }, 596 + ) 597 + return res.data 598 + } 599 + 600 + async delete( 601 + params: OmitKey<ComAtprotoRepoDeleteRecord.InputSchema, 'collection'>, 602 + headers?: Record<string, string>, 603 + ): Promise<void> { 604 + await this._client.call( 605 + 'com.atproto.repo.deleteRecord', 606 + undefined, 607 + { collection: 'app.bsky.feed.threadgate', ...params }, 608 + { headers }, 609 + ) 610 + } 611 + } 612 + 613 + export class AppBskyRichtextNS { 614 + _client: XrpcClient 615 + 616 + constructor(client: XrpcClient) { 617 + this._client = client 618 + } 619 + }
+2500 -346
packages/lexicon/src/lexicons.ts
··· 193 defs: { 194 label: { 195 type: 'object', 196 - description: 197 - 'Metadata tag on an atproto resource (eg, repo or record).', 198 required: ['src', 'uri', 'val', 'cts'], 199 properties: { 200 - ver: { 201 - type: 'integer', 202 - description: 'The AT Protocol version of the label object.', 203 }, 204 src: { 205 type: 'string', ··· 212 description: 213 'AT URI of the record, repository (account), or other resource that this label applies to.', 214 }, 215 - cid: { 216 - type: 'string', 217 - format: 'cid', 218 - description: 219 - "Optionally, CID specifying the specific version of 'uri' resource this label applies to.", 220 - }, 221 val: { 222 type: 'string', 223 maxLength: 128, 224 description: 225 'The short string name of the value or type of this label.', 226 }, 227 - neg: { 228 - type: 'boolean', 229 - description: 230 - 'If true, this is a negation label, overwriting a previous label.', 231 }, 232 - cts: { 233 - type: 'string', 234 - format: 'datetime', 235 - description: 'Timestamp when this label was created.', 236 - }, 237 - exp: { 238 type: 'string', 239 - format: 'datetime', 240 description: 241 - 'Timestamp at which this label expires (no longer applies).', 242 - }, 243 - sig: { 244 - type: 'bytes', 245 - description: 'Signature of dag-cbor encoded label.', 246 }, 247 }, 248 }, 249 selfLabels: { 250 type: 'object', 251 - description: 252 - 'Metadata tags on an atproto record, published by the author within the record.', 253 required: ['values'], 254 properties: { 255 values: { 256 type: 'array', 257 items: { 258 type: 'ref', 259 - ref: 'lex:com.atproto.label.defs#selfLabel', 260 }, 261 maxLength: 10, 262 }, 263 }, 264 - }, 265 - selfLabel: { 266 - type: 'object', 267 description: 268 - 'Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.', 269 - required: ['val'], 270 - properties: { 271 - val: { 272 - type: 'string', 273 - maxLength: 128, 274 - description: 275 - 'The short string name of the value or type of this label.', 276 - }, 277 - }, 278 }, 279 labelValueDefinition: { 280 type: 'object', 281 - description: 282 - 'Declares a label value and its expected interpretations and behaviors.', 283 required: ['identifier', 'severity', 'blurs', 'locales'], 284 properties: { 285 - identifier: { 286 type: 'string', 287 description: 288 - "The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).", 289 - maxLength: 100, 290 - maxGraphemes: 100, 291 }, 292 severity: { 293 type: 'string', ··· 295 "How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.", 296 knownValues: ['inform', 'alert', 'none'], 297 }, 298 - blurs: { 299 type: 'string', 300 description: 301 - "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.", 302 - knownValues: ['content', 'media', 'none'], 303 }, 304 defaultSetting: { 305 type: 'string', 306 description: 'The default setting for this label.', 307 knownValues: ['ignore', 'warn', 'hide'], 308 - default: 'warn', 309 - }, 310 - adultOnly: { 311 - type: 'boolean', 312 - description: 313 - 'Does the user need to have adult content enabled in order to configure this label?', 314 - }, 315 - locales: { 316 - type: 'array', 317 - items: { 318 - type: 'ref', 319 - ref: 'lex:com.atproto.label.defs#labelValueDefinitionStrings', 320 - }, 321 }, 322 }, 323 }, 324 labelValueDefinitionStrings: { 325 type: 'object', 326 - description: 327 - 'Strings which describe the label in the UI, localized into a specific language.', 328 required: ['lang', 'name', 'description'], 329 properties: { 330 lang: { 331 type: 'string', 332 description: 333 'The code of the language these strings are written in.', 334 - format: 'language', 335 }, 336 name: { 337 type: 'string', 338 description: 'A short human-readable name for the label.', 339 maxGraphemes: 64, 340 - maxLength: 640, 341 }, 342 description: { 343 type: 'string', 344 description: 345 'A longer description of what the label means and why it might be applied.', 346 maxGraphemes: 10000, 347 - maxLength: 100000, 348 }, 349 }, 350 - }, 351 - labelValue: { 352 - type: 'string', 353 - knownValues: [ 354 - '!hide', 355 - '!no-promote', 356 - '!warn', 357 - '!no-unauthenticated', 358 - 'dmca-violation', 359 - 'doxxing', 360 - 'porn', 361 - 'sexual', 362 - 'nudity', 363 - 'nsfl', 364 - 'gore', 365 - ], 366 }, 367 }, 368 }, ··· 372 defs: { 373 main: { 374 type: 'procedure', 375 - description: 376 - 'Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS.', 377 input: { 378 - encoding: 'application/json', 379 schema: { 380 type: 'object', 381 required: ['repo', 'writes'], ··· 386 description: 387 'The handle or DID of the repo (aka, current account).', 388 }, 389 - validate: { 390 - type: 'boolean', 391 - description: 392 - "Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons.", 393 - }, 394 writes: { 395 type: 'array', 396 items: { 397 - type: 'union', 398 refs: [ 399 'lex:com.atproto.repo.applyWrites#create', 400 'lex:com.atproto.repo.applyWrites#update', 401 'lex:com.atproto.repo.applyWrites#delete', 402 ], 403 closed: true, 404 }, 405 }, 406 swapCommit: { 407 type: 'string', 408 description: 409 'If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations.', 410 - format: 'cid', 411 }, 412 }, 413 }, 414 }, 415 output: { 416 - encoding: 'application/json', 417 schema: { 418 type: 'object', 419 required: [], 420 properties: { 421 commit: { 422 type: 'ref', 423 - ref: 'lex:com.atproto.repo.defs#commitMeta', 424 }, 425 results: { 426 type: 'array', 427 items: { 428 - type: 'union', 429 refs: [ 430 'lex:com.atproto.repo.applyWrites#createResult', 431 'lex:com.atproto.repo.applyWrites#updateResult', 432 'lex:com.atproto.repo.applyWrites#deleteResult', 433 ], 434 closed: true, 435 }, 436 }, 437 }, 438 }, 439 }, 440 - errors: [ 441 - { 442 - name: 'InvalidSwap', 443 - description: 444 - "Indicates that the 'swapCommit' parameter did not match current commit.", 445 - }, 446 - ], 447 }, 448 create: { 449 type: 'object', 450 - description: 'Operation which creates a new record.', 451 required: ['collection', 'value'], 452 properties: { 453 - collection: { 454 - type: 'string', 455 - format: 'nsid', 456 - }, 457 rkey: { 458 type: 'string', 459 maxLength: 512, 460 - format: 'record-key', 461 description: 462 'NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility.', 463 }, 464 value: { 465 type: 'unknown', 466 }, 467 }, 468 }, 469 - update: { 470 type: 'object', 471 - description: 'Operation which updates an existing record.', 472 - required: ['collection', 'rkey', 'value'], 473 properties: { 474 collection: { 475 type: 'string', 476 format: 'nsid', 477 }, 478 rkey: { 479 type: 'string', 480 format: 'record-key', ··· 482 value: { 483 type: 'unknown', 484 }, 485 - }, 486 - }, 487 - delete: { 488 - type: 'object', 489 - description: 'Operation which deletes an existing record.', 490 - required: ['collection', 'rkey'], 491 - properties: { 492 collection: { 493 type: 'string', 494 format: 'nsid', 495 - }, 496 - rkey: { 497 - type: 'string', 498 - format: 'record-key', 499 }, 500 }, 501 }, 502 createResult: { 503 type: 'object', 504 required: ['uri', 'cid'], 505 properties: { 506 - uri: { 507 - type: 'string', 508 - format: 'at-uri', 509 - }, 510 cid: { 511 type: 'string', 512 format: 'cid', 513 }, 514 validationStatus: { 515 type: 'string', 516 knownValues: ['valid', 'unknown'], 517 }, 518 }, 519 }, 520 updateResult: { 521 type: 'object', 522 required: ['uri', 'cid'], 523 properties: { 524 - uri: { 525 - type: 'string', 526 - format: 'at-uri', 527 - }, 528 cid: { 529 type: 'string', 530 format: 'cid', 531 }, 532 validationStatus: { 533 type: 'string', ··· 535 }, 536 }, 537 }, 538 - deleteResult: { 539 - type: 'object', 540 - required: [], 541 - properties: {}, 542 - }, 543 }, 544 }, 545 ComAtprotoRepoCreateRecord: { ··· 548 defs: { 549 main: { 550 type: 'procedure', 551 - description: 552 - 'Create a single new repository record. Requires auth, implemented by PDS.', 553 input: { 554 - encoding: 'application/json', 555 schema: { 556 type: 'object', 557 required: ['repo', 'collection', 'record'], ··· 562 description: 563 'The handle or DID of the repo (aka, current account).', 564 }, 565 - collection: { 566 - type: 'string', 567 - format: 'nsid', 568 - description: 'The NSID of the record collection.', 569 - }, 570 rkey: { 571 type: 'string', 572 format: 'record-key', 573 description: 'The Record Key.', 574 - maxLength: 512, 575 }, 576 validate: { 577 type: 'boolean', 578 description: 579 "Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons.", 580 }, 581 - record: { 582 - type: 'unknown', 583 - description: 'The record itself. Must contain a $type field.', 584 }, 585 swapCommit: { 586 type: 'string', ··· 590 }, 591 }, 592 }, 593 }, 594 output: { 595 - encoding: 'application/json', 596 schema: { 597 type: 'object', 598 required: ['uri', 'cid'], 599 properties: { 600 uri: { 601 type: 'string', 602 format: 'at-uri', 603 }, 604 - cid: { 605 - type: 'string', 606 - format: 'cid', 607 - }, 608 commit: { 609 type: 'ref', 610 - ref: 'lex:com.atproto.repo.defs#commitMeta', 611 }, 612 validationStatus: { 613 type: 'string', ··· 615 }, 616 }, 617 }, 618 }, 619 - errors: [ 620 - { 621 - name: 'InvalidSwap', 622 - description: 623 - "Indicates that 'swapCommit' didn't match current repo commit.", 624 - }, 625 - ], 626 }, 627 }, 628 }, ··· 652 defs: { 653 main: { 654 type: 'procedure', 655 - description: 656 - "Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS.", 657 input: { 658 - encoding: 'application/json', 659 schema: { 660 type: 'object', 661 required: ['repo', 'collection', 'rkey'], ··· 666 description: 667 'The handle or DID of the repo (aka, current account).', 668 }, 669 - collection: { 670 - type: 'string', 671 - format: 'nsid', 672 - description: 'The NSID of the record collection.', 673 - }, 674 rkey: { 675 type: 'string', 676 format: 'record-key', 677 description: 'The Record Key.', 678 }, 679 - swapRecord: { 680 type: 'string', 681 - format: 'cid', 682 - description: 683 - 'Compare and swap with the previous record by CID.', 684 }, 685 swapCommit: { 686 type: 'string', ··· 688 description: 689 'Compare and swap with the previous commit by CID.', 690 }, 691 }, 692 }, 693 }, 694 output: { 695 - encoding: 'application/json', 696 schema: { 697 type: 'object', 698 properties: { 699 commit: { 700 - type: 'ref', 701 ref: 'lex:com.atproto.repo.defs#commitMeta', 702 }, 703 }, 704 }, 705 }, 706 - errors: [ 707 - { 708 - name: 'InvalidSwap', 709 - }, 710 - ], 711 }, 712 }, 713 }, ··· 717 defs: { 718 main: { 719 type: 'query', 720 - description: 721 - 'Get information about an account and repository, including the list of collections. Does not require auth.', 722 - parameters: { 723 - type: 'params', 724 - required: ['repo'], 725 - properties: { 726 - repo: { 727 - type: 'string', 728 - format: 'at-identifier', 729 - description: 'The handle or DID of the repo.', 730 - }, 731 - }, 732 - }, 733 output: { 734 - encoding: 'application/json', 735 schema: { 736 type: 'object', 737 required: [ ··· 742 'handleIsCorrect', 743 ], 744 properties: { 745 - handle: { 746 - type: 'string', 747 - format: 'handle', 748 - }, 749 did: { 750 type: 'string', 751 format: 'did', ··· 754 type: 'unknown', 755 description: 'The complete DID document for this account.', 756 }, 757 collections: { 758 type: 'array', 759 - description: 760 - 'List of all the collections (NSIDs) for which this repo contains at least one record.', 761 items: { 762 type: 'string', 763 format: 'nsid', 764 }, 765 }, 766 handleIsCorrect: { 767 type: 'boolean', ··· 770 }, 771 }, 772 }, 773 }, 774 }, 775 }, 776 }, ··· 780 defs: { 781 main: { 782 type: 'query', 783 - description: 784 - 'Get a single record from a repository. Does not require auth.', 785 - parameters: { 786 - type: 'params', 787 - required: ['repo', 'collection', 'rkey'], 788 - properties: { 789 - repo: { 790 - type: 'string', 791 - format: 'at-identifier', 792 - description: 'The handle or DID of the repo.', 793 - }, 794 - collection: { 795 - type: 'string', 796 - format: 'nsid', 797 - description: 'The NSID of the record collection.', 798 - }, 799 - rkey: { 800 - type: 'string', 801 - description: 'The Record Key.', 802 - format: 'record-key', 803 - }, 804 - cid: { 805 - type: 'string', 806 - format: 'cid', 807 - description: 808 - 'The CID of the version of the record. If not specified, then return the most recent version.', 809 - }, 810 }, 811 - }, 812 output: { 813 - encoding: 'application/json', 814 schema: { 815 type: 'object', 816 required: ['uri', 'value'], 817 properties: { 818 - uri: { 819 - type: 'string', 820 - format: 'at-uri', 821 - }, 822 cid: { 823 type: 'string', 824 format: 'cid', 825 }, 826 value: { 827 type: 'unknown', 828 }, 829 }, 830 }, 831 }, 832 - errors: [ 833 - { 834 - name: 'RecordNotFound', 835 }, 836 - ], 837 }, 838 }, 839 }, ··· 843 defs: { 844 main: { 845 type: 'procedure', 846 - description: 847 - 'Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set.', 848 input: { 849 encoding: 'application/vnd.ipld.car', 850 }, 851 }, 852 }, 853 }, ··· 857 defs: { 858 main: { 859 type: 'query', 860 - description: 861 - 'Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow.', 862 - parameters: { 863 - type: 'params', 864 - properties: { 865 - limit: { 866 - type: 'integer', 867 - minimum: 1, 868 - maximum: 1000, 869 - default: 500, 870 - }, 871 - cursor: { 872 - type: 'string', 873 - }, 874 - }, 875 - }, 876 output: { 877 - encoding: 'application/json', 878 schema: { 879 type: 'object', 880 required: ['blobs'], 881 properties: { 882 - cursor: { 883 - type: 'string', 884 - }, 885 blobs: { 886 type: 'array', 887 items: { 888 - type: 'ref', 889 ref: 'lex:com.atproto.repo.listMissingBlobs#recordBlob', 890 }, 891 }, 892 }, 893 }, 894 }, 895 }, 896 recordBlob: { 897 type: 'object', ··· 915 defs: { 916 main: { 917 type: 'query', 918 - description: 919 - 'List a range of records in a repository, matching a specific collection. Does not require auth.', 920 parameters: { 921 type: 'params', 922 required: ['repo', 'collection'], ··· 925 type: 'string', 926 format: 'at-identifier', 927 description: 'The handle or DID of the repo.', 928 - }, 929 - collection: { 930 - type: 'string', 931 - format: 'nsid', 932 - description: 'The NSID of the record type.', 933 }, 934 limit: { 935 type: 'integer', 936 - minimum: 1, 937 - maximum: 100, 938 default: 50, 939 description: 'The number of records to return.', 940 }, 941 cursor: { 942 type: 'string', 943 }, 944 - rkeyStart: { 945 - type: 'string', 946 - description: 947 - 'DEPRECATED: The lowest sort-ordered rkey to start from (exclusive)', 948 - }, 949 - rkeyEnd: { 950 - type: 'string', 951 - description: 952 - 'DEPRECATED: The highest sort-ordered rkey to stop at (exclusive)', 953 - }, 954 reverse: { 955 type: 'boolean', 956 description: 'Flag to reverse the order of the returned records.', 957 }, 958 - }, 959 - }, 960 - output: { 961 - encoding: 'application/json', 962 - schema: { 963 - type: 'object', 964 - required: ['records'], 965 - properties: { 966 - cursor: { 967 - type: 'string', 968 - }, 969 - records: { 970 - type: 'array', 971 - items: { 972 - type: 'ref', 973 - ref: 'lex:com.atproto.repo.listRecords#record', 974 - }, 975 - }, 976 }, 977 }, 978 }, 979 }, 980 record: { 981 type: 'object', 982 required: ['uri', 'cid', 'value'], 983 properties: { 984 - uri: { 985 - type: 'string', 986 - format: 'at-uri', 987 - }, 988 cid: { 989 type: 'string', 990 format: 'cid', 991 }, 992 value: { 993 type: 'unknown', ··· 1002 defs: { 1003 main: { 1004 type: 'procedure', 1005 - description: 1006 - 'Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS.', 1007 input: { 1008 - encoding: 'application/json', 1009 schema: { 1010 type: 'object', 1011 - required: ['repo', 'collection', 'rkey', 'record'], 1012 nullable: ['swapRecord'], 1013 properties: { 1014 repo: { 1015 type: 'string', ··· 1017 description: 1018 'The handle or DID of the repo (aka, current account).', 1019 }, 1020 - collection: { 1021 - type: 'string', 1022 - format: 'nsid', 1023 - description: 'The NSID of the record collection.', 1024 - }, 1025 rkey: { 1026 type: 'string', 1027 format: 'record-key', 1028 - description: 'The Record Key.', 1029 maxLength: 512, 1030 }, 1031 validate: { 1032 type: 'boolean', 1033 description: 1034 "Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons.", 1035 }, 1036 - record: { 1037 - type: 'unknown', 1038 - description: 'The record to write.', 1039 }, 1040 - swapRecord: { 1041 type: 'string', 1042 format: 'cid', 1043 description: 1044 - 'Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation', 1045 }, 1046 - swapCommit: { 1047 type: 'string', 1048 format: 'cid', 1049 description: 1050 - 'Compare and swap with the previous commit by CID.', 1051 }, 1052 }, 1053 }, 1054 }, 1055 output: { 1056 - encoding: 'application/json', 1057 schema: { 1058 type: 'object', 1059 required: ['uri', 'cid'], 1060 properties: { 1061 uri: { 1062 type: 'string', 1063 format: 'at-uri', 1064 }, 1065 - cid: { 1066 - type: 'string', 1067 - format: 'cid', 1068 - }, 1069 commit: { 1070 - type: 'ref', 1071 ref: 'lex:com.atproto.repo.defs#commitMeta', 1072 }, 1073 validationStatus: { 1074 type: 'string', ··· 1076 }, 1077 }, 1078 }, 1079 }, 1080 - errors: [ 1081 - { 1082 - name: 'InvalidSwap', 1083 - }, 1084 - ], 1085 }, 1086 }, 1087 }, ··· 1094 type: 'object', 1095 required: ['uri', 'cid'], 1096 properties: { 1097 - uri: { 1098 - type: 'string', 1099 - format: 'at-uri', 1100 - }, 1101 cid: { 1102 type: 'string', 1103 format: 'cid', 1104 }, 1105 }, 1106 }, ··· 1112 defs: { 1113 main: { 1114 type: 'procedure', 1115 - description: 1116 - 'Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS.', 1117 input: { 1118 encoding: '*/*', 1119 }, 1120 output: { 1121 - encoding: 'application/json', 1122 schema: { 1123 type: 'object', 1124 required: ['blob'], ··· 1128 }, 1129 }, 1130 }, 1131 }, 1132 }, 1133 }, 1134 }, ··· 1136 lexicon: 1, 1137 id: 'app.bsky.actor.defs', 1138 defs: { 1139 profileView: { 1140 type: 'object', 1141 required: ['did', 'handle'], ··· 1144 type: 'string', 1145 format: 'did', 1146 }, 1147 handle: { 1148 type: 'string', 1149 format: 'handle', 1150 }, 1151 displayName: { 1152 type: 'string', 1153 maxGraphemes: 64, 1154 - maxLength: 640, 1155 }, 1156 - description: { 1157 type: 'string', 1158 - maxGraphemes: 256, 1159 - maxLength: 2560, 1160 }, 1161 avatar: { 1162 type: 'string', 1163 format: 'uri', 1164 }, 1165 - indexedAt: { 1166 type: 'string', 1167 format: 'datetime', 1168 }, 1169 - createdAt: { 1170 type: 'string', 1171 format: 'datetime', 1172 }, 1173 labels: { 1174 type: 'array', 1175 items: { 1176 type: 'ref', 1177 - ref: 'lex:com.atproto.label.defs#label', 1178 }, 1179 }, 1180 }, 1181 }, 1182 }, 1183 }, ··· 1240 }, 1241 }, 1242 }, 1243 } as const satisfies Record<string, LexiconDoc> 1244 1245 export const schemas = Object.values(schemaDict) satisfies LexiconDoc[] ··· 1294 ComAtprotoRepoUploadBlob: 'com.atproto.repo.uploadBlob', 1295 AppBskyActorDefs: 'app.bsky.actor.defs', 1296 AppBskyActorProfile: 'app.bsky.actor.profile', 1297 } as const
··· 193 defs: { 194 label: { 195 type: 'object', 196 required: ['src', 'uri', 'val', 'cts'], 197 properties: { 198 + cid: { 199 + type: 'string', 200 + format: 'cid', 201 + description: 202 + "Optionally, CID specifying the specific version of 'uri' resource this label applies to.", 203 + }, 204 + cts: { 205 + type: 'string', 206 + format: 'datetime', 207 + description: 'Timestamp when this label was created.', 208 + }, 209 + exp: { 210 + type: 'string', 211 + format: 'datetime', 212 + description: 213 + 'Timestamp at which this label expires (no longer applies).', 214 + }, 215 + neg: { 216 + type: 'boolean', 217 + description: 218 + 'If true, this is a negation label, overwriting a previous label.', 219 + }, 220 + sig: { 221 + type: 'bytes', 222 + description: 'Signature of dag-cbor encoded label.', 223 }, 224 src: { 225 type: 'string', ··· 232 description: 233 'AT URI of the record, repository (account), or other resource that this label applies to.', 234 }, 235 val: { 236 type: 'string', 237 maxLength: 128, 238 description: 239 'The short string name of the value or type of this label.', 240 }, 241 + ver: { 242 + type: 'integer', 243 + description: 'The AT Protocol version of the label object.', 244 }, 245 + }, 246 + description: 247 + 'Metadata tag on an atproto resource (eg, repo or record).', 248 + }, 249 + selfLabel: { 250 + type: 'object', 251 + required: ['val'], 252 + properties: { 253 + val: { 254 type: 'string', 255 + maxLength: 128, 256 description: 257 + 'The short string name of the value or type of this label.', 258 }, 259 }, 260 + description: 261 + 'Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.', 262 + }, 263 + labelValue: { 264 + type: 'string', 265 + knownValues: [ 266 + '!hide', 267 + '!no-promote', 268 + '!warn', 269 + '!no-unauthenticated', 270 + 'dmca-violation', 271 + 'doxxing', 272 + 'porn', 273 + 'sexual', 274 + 'nudity', 275 + 'nsfl', 276 + 'gore', 277 + ], 278 }, 279 selfLabels: { 280 type: 'object', 281 required: ['values'], 282 properties: { 283 values: { 284 type: 'array', 285 items: { 286 + ref: 'lex:com.atproto.label.defs#selfLabel', 287 type: 'ref', 288 }, 289 maxLength: 10, 290 }, 291 }, 292 description: 293 + 'Metadata tags on an atproto record, published by the author within the record.', 294 }, 295 labelValueDefinition: { 296 type: 'object', 297 required: ['identifier', 'severity', 'blurs', 'locales'], 298 properties: { 299 + blurs: { 300 type: 'string', 301 description: 302 + "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.", 303 + knownValues: ['content', 'media', 'none'], 304 + }, 305 + locales: { 306 + type: 'array', 307 + items: { 308 + ref: 'lex:com.atproto.label.defs#labelValueDefinitionStrings', 309 + type: 'ref', 310 + }, 311 }, 312 severity: { 313 type: 'string', ··· 315 "How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.", 316 knownValues: ['inform', 'alert', 'none'], 317 }, 318 + adultOnly: { 319 + type: 'boolean', 320 + description: 321 + 'Does the user need to have adult content enabled in order to configure this label?', 322 + }, 323 + identifier: { 324 type: 'string', 325 + maxLength: 100, 326 description: 327 + "The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).", 328 + maxGraphemes: 100, 329 }, 330 defaultSetting: { 331 type: 'string', 332 + default: 'warn', 333 description: 'The default setting for this label.', 334 knownValues: ['ignore', 'warn', 'hide'], 335 }, 336 }, 337 + description: 338 + 'Declares a label value and its expected interpretations and behaviors.', 339 }, 340 labelValueDefinitionStrings: { 341 type: 'object', 342 required: ['lang', 'name', 'description'], 343 properties: { 344 lang: { 345 type: 'string', 346 + format: 'language', 347 description: 348 'The code of the language these strings are written in.', 349 }, 350 name: { 351 type: 'string', 352 + maxLength: 640, 353 description: 'A short human-readable name for the label.', 354 maxGraphemes: 64, 355 }, 356 description: { 357 type: 'string', 358 + maxLength: 100000, 359 description: 360 'A longer description of what the label means and why it might be applied.', 361 maxGraphemes: 10000, 362 }, 363 }, 364 + description: 365 + 'Strings which describe the label in the UI, localized into a specific language.', 366 }, 367 }, 368 }, ··· 372 defs: { 373 main: { 374 type: 'procedure', 375 input: { 376 schema: { 377 type: 'object', 378 required: ['repo', 'writes'], ··· 383 description: 384 'The handle or DID of the repo (aka, current account).', 385 }, 386 writes: { 387 type: 'array', 388 items: { 389 refs: [ 390 'lex:com.atproto.repo.applyWrites#create', 391 'lex:com.atproto.repo.applyWrites#update', 392 'lex:com.atproto.repo.applyWrites#delete', 393 ], 394 + type: 'union', 395 closed: true, 396 }, 397 }, 398 + validate: { 399 + type: 'boolean', 400 + description: 401 + "Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons.", 402 + }, 403 swapCommit: { 404 type: 'string', 405 + format: 'cid', 406 description: 407 'If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations.', 408 }, 409 }, 410 }, 411 + encoding: 'application/json', 412 }, 413 + errors: [ 414 + { 415 + name: 'InvalidSwap', 416 + description: 417 + "Indicates that the 'swapCommit' parameter did not match current commit.", 418 + }, 419 + ], 420 output: { 421 schema: { 422 type: 'object', 423 required: [], 424 properties: { 425 commit: { 426 + ref: 'lex:com.atproto.repo.defs#commitMeta', 427 type: 'ref', 428 }, 429 results: { 430 type: 'array', 431 items: { 432 refs: [ 433 'lex:com.atproto.repo.applyWrites#createResult', 434 'lex:com.atproto.repo.applyWrites#updateResult', 435 'lex:com.atproto.repo.applyWrites#deleteResult', 436 ], 437 + type: 'union', 438 closed: true, 439 }, 440 }, 441 }, 442 }, 443 + encoding: 'application/json', 444 }, 445 + description: 446 + 'Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS.', 447 }, 448 create: { 449 type: 'object', 450 required: ['collection', 'value'], 451 properties: { 452 rkey: { 453 type: 'string', 454 + format: 'record-key', 455 maxLength: 512, 456 description: 457 'NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility.', 458 }, 459 value: { 460 type: 'unknown', 461 + }, 462 + collection: { 463 + type: 'string', 464 + format: 'nsid', 465 }, 466 }, 467 + description: 'Operation which creates a new record.', 468 }, 469 + delete: { 470 type: 'object', 471 + required: ['collection', 'rkey'], 472 properties: { 473 + rkey: { 474 + type: 'string', 475 + format: 'record-key', 476 + }, 477 collection: { 478 type: 'string', 479 format: 'nsid', 480 }, 481 + }, 482 + description: 'Operation which deletes an existing record.', 483 + }, 484 + update: { 485 + type: 'object', 486 + required: ['collection', 'rkey', 'value'], 487 + properties: { 488 rkey: { 489 type: 'string', 490 format: 'record-key', ··· 492 value: { 493 type: 'unknown', 494 }, 495 collection: { 496 type: 'string', 497 format: 'nsid', 498 }, 499 }, 500 + description: 'Operation which updates an existing record.', 501 }, 502 createResult: { 503 type: 'object', 504 required: ['uri', 'cid'], 505 properties: { 506 cid: { 507 type: 'string', 508 format: 'cid', 509 }, 510 + uri: { 511 + type: 'string', 512 + format: 'at-uri', 513 + }, 514 validationStatus: { 515 type: 'string', 516 knownValues: ['valid', 'unknown'], 517 }, 518 }, 519 }, 520 + deleteResult: { 521 + type: 'object', 522 + required: [], 523 + properties: {}, 524 + }, 525 updateResult: { 526 type: 'object', 527 required: ['uri', 'cid'], 528 properties: { 529 cid: { 530 type: 'string', 531 format: 'cid', 532 + }, 533 + uri: { 534 + type: 'string', 535 + format: 'at-uri', 536 }, 537 validationStatus: { 538 type: 'string', ··· 540 }, 541 }, 542 }, 543 }, 544 }, 545 ComAtprotoRepoCreateRecord: { ··· 548 defs: { 549 main: { 550 type: 'procedure', 551 input: { 552 schema: { 553 type: 'object', 554 required: ['repo', 'collection', 'record'], ··· 559 description: 560 'The handle or DID of the repo (aka, current account).', 561 }, 562 rkey: { 563 type: 'string', 564 format: 'record-key', 565 + maxLength: 512, 566 description: 'The Record Key.', 567 + }, 568 + record: { 569 + type: 'unknown', 570 + description: 'The record itself. Must contain a $type field.', 571 }, 572 validate: { 573 type: 'boolean', 574 description: 575 "Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons.", 576 }, 577 + collection: { 578 + type: 'string', 579 + format: 'nsid', 580 + description: 'The NSID of the record collection.', 581 }, 582 swapCommit: { 583 type: 'string', ··· 587 }, 588 }, 589 }, 590 + encoding: 'application/json', 591 }, 592 + errors: [ 593 + { 594 + name: 'InvalidSwap', 595 + description: 596 + "Indicates that 'swapCommit' didn't match current repo commit.", 597 + }, 598 + ], 599 output: { 600 schema: { 601 type: 'object', 602 required: ['uri', 'cid'], 603 properties: { 604 + cid: { 605 + type: 'string', 606 + format: 'cid', 607 + }, 608 uri: { 609 type: 'string', 610 format: 'at-uri', 611 }, 612 commit: { 613 + ref: 'lex:com.atproto.repo.defs#commitMeta', 614 type: 'ref', 615 }, 616 validationStatus: { 617 type: 'string', ··· 619 }, 620 }, 621 }, 622 + encoding: 'application/json', 623 }, 624 + description: 625 + 'Create a single new repository record. Requires auth, implemented by PDS.', 626 }, 627 }, 628 }, ··· 652 defs: { 653 main: { 654 type: 'procedure', 655 input: { 656 schema: { 657 type: 'object', 658 required: ['repo', 'collection', 'rkey'], ··· 663 description: 664 'The handle or DID of the repo (aka, current account).', 665 }, 666 rkey: { 667 type: 'string', 668 format: 'record-key', 669 description: 'The Record Key.', 670 }, 671 + collection: { 672 type: 'string', 673 + format: 'nsid', 674 + description: 'The NSID of the record collection.', 675 }, 676 swapCommit: { 677 type: 'string', ··· 679 description: 680 'Compare and swap with the previous commit by CID.', 681 }, 682 + swapRecord: { 683 + type: 'string', 684 + format: 'cid', 685 + description: 686 + 'Compare and swap with the previous record by CID.', 687 + }, 688 }, 689 }, 690 + encoding: 'application/json', 691 }, 692 + errors: [ 693 + { 694 + name: 'InvalidSwap', 695 + }, 696 + ], 697 output: { 698 schema: { 699 type: 'object', 700 properties: { 701 commit: { 702 ref: 'lex:com.atproto.repo.defs#commitMeta', 703 + type: 'ref', 704 }, 705 }, 706 }, 707 + encoding: 'application/json', 708 }, 709 + description: 710 + "Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS.", 711 }, 712 }, 713 }, ··· 717 defs: { 718 main: { 719 type: 'query', 720 output: { 721 schema: { 722 type: 'object', 723 required: [ ··· 728 'handleIsCorrect', 729 ], 730 properties: { 731 did: { 732 type: 'string', 733 format: 'did', ··· 736 type: 'unknown', 737 description: 'The complete DID document for this account.', 738 }, 739 + handle: { 740 + type: 'string', 741 + format: 'handle', 742 + }, 743 collections: { 744 type: 'array', 745 items: { 746 type: 'string', 747 format: 'nsid', 748 }, 749 + description: 750 + 'List of all the collections (NSIDs) for which this repo contains at least one record.', 751 }, 752 handleIsCorrect: { 753 type: 'boolean', ··· 756 }, 757 }, 758 }, 759 + encoding: 'application/json', 760 }, 761 + parameters: { 762 + type: 'params', 763 + required: ['repo'], 764 + properties: { 765 + repo: { 766 + type: 'string', 767 + format: 'at-identifier', 768 + description: 'The handle or DID of the repo.', 769 + }, 770 + }, 771 + }, 772 + description: 773 + 'Get information about an account and repository, including the list of collections. Does not require auth.', 774 }, 775 }, 776 }, ··· 780 defs: { 781 main: { 782 type: 'query', 783 + errors: [ 784 + { 785 + name: 'RecordNotFound', 786 }, 787 + ], 788 output: { 789 schema: { 790 type: 'object', 791 required: ['uri', 'value'], 792 properties: { 793 cid: { 794 type: 'string', 795 format: 'cid', 796 }, 797 + uri: { 798 + type: 'string', 799 + format: 'at-uri', 800 + }, 801 value: { 802 type: 'unknown', 803 }, 804 }, 805 }, 806 + encoding: 'application/json', 807 }, 808 + parameters: { 809 + type: 'params', 810 + required: ['repo', 'collection', 'rkey'], 811 + properties: { 812 + cid: { 813 + type: 'string', 814 + format: 'cid', 815 + description: 816 + 'The CID of the version of the record. If not specified, then return the most recent version.', 817 + }, 818 + repo: { 819 + type: 'string', 820 + format: 'at-identifier', 821 + description: 'The handle or DID of the repo.', 822 + }, 823 + rkey: { 824 + type: 'string', 825 + format: 'record-key', 826 + description: 'The Record Key.', 827 + }, 828 + collection: { 829 + type: 'string', 830 + format: 'nsid', 831 + description: 'The NSID of the record collection.', 832 + }, 833 }, 834 + }, 835 + description: 836 + 'Get a single record from a repository. Does not require auth.', 837 }, 838 }, 839 }, ··· 843 defs: { 844 main: { 845 type: 'procedure', 846 input: { 847 encoding: 'application/vnd.ipld.car', 848 }, 849 + description: 850 + 'Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set.', 851 }, 852 }, 853 }, ··· 857 defs: { 858 main: { 859 type: 'query', 860 output: { 861 schema: { 862 type: 'object', 863 required: ['blobs'], 864 properties: { 865 blobs: { 866 type: 'array', 867 items: { 868 ref: 'lex:com.atproto.repo.listMissingBlobs#recordBlob', 869 + type: 'ref', 870 }, 871 }, 872 + cursor: { 873 + type: 'string', 874 + }, 875 }, 876 }, 877 + encoding: 'application/json', 878 }, 879 + parameters: { 880 + type: 'params', 881 + properties: { 882 + limit: { 883 + type: 'integer', 884 + default: 500, 885 + maximum: 1000, 886 + minimum: 1, 887 + }, 888 + cursor: { 889 + type: 'string', 890 + }, 891 + }, 892 + }, 893 + description: 894 + 'Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow.', 895 }, 896 recordBlob: { 897 type: 'object', ··· 915 defs: { 916 main: { 917 type: 'query', 918 + output: { 919 + schema: { 920 + type: 'object', 921 + required: ['records'], 922 + properties: { 923 + cursor: { 924 + type: 'string', 925 + }, 926 + records: { 927 + type: 'array', 928 + items: { 929 + ref: 'lex:com.atproto.repo.listRecords#record', 930 + type: 'ref', 931 + }, 932 + }, 933 + }, 934 + }, 935 + encoding: 'application/json', 936 + }, 937 parameters: { 938 type: 'params', 939 required: ['repo', 'collection'], ··· 942 type: 'string', 943 format: 'at-identifier', 944 description: 'The handle or DID of the repo.', 945 }, 946 limit: { 947 type: 'integer', 948 default: 50, 949 + maximum: 100, 950 + minimum: 1, 951 description: 'The number of records to return.', 952 }, 953 cursor: { 954 type: 'string', 955 }, 956 reverse: { 957 type: 'boolean', 958 description: 'Flag to reverse the order of the returned records.', 959 }, 960 + collection: { 961 + type: 'string', 962 + format: 'nsid', 963 + description: 'The NSID of the record type.', 964 }, 965 }, 966 }, 967 + description: 968 + 'List a range of records in a repository, matching a specific collection. Does not require auth.', 969 }, 970 record: { 971 type: 'object', 972 required: ['uri', 'cid', 'value'], 973 properties: { 974 cid: { 975 type: 'string', 976 format: 'cid', 977 + }, 978 + uri: { 979 + type: 'string', 980 + format: 'at-uri', 981 }, 982 value: { 983 type: 'unknown', ··· 992 defs: { 993 main: { 994 type: 'procedure', 995 input: { 996 schema: { 997 type: 'object', 998 nullable: ['swapRecord'], 999 + required: ['repo', 'collection', 'rkey', 'record'], 1000 properties: { 1001 repo: { 1002 type: 'string', ··· 1004 description: 1005 'The handle or DID of the repo (aka, current account).', 1006 }, 1007 rkey: { 1008 type: 'string', 1009 format: 'record-key', 1010 maxLength: 512, 1011 + description: 'The Record Key.', 1012 + }, 1013 + record: { 1014 + type: 'unknown', 1015 + description: 'The record to write.', 1016 }, 1017 validate: { 1018 type: 'boolean', 1019 description: 1020 "Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons.", 1021 }, 1022 + collection: { 1023 + type: 'string', 1024 + format: 'nsid', 1025 + description: 'The NSID of the record collection.', 1026 }, 1027 + swapCommit: { 1028 type: 'string', 1029 format: 'cid', 1030 description: 1031 + 'Compare and swap with the previous commit by CID.', 1032 }, 1033 + swapRecord: { 1034 type: 'string', 1035 format: 'cid', 1036 description: 1037 + 'Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation', 1038 }, 1039 }, 1040 }, 1041 + encoding: 'application/json', 1042 }, 1043 + errors: [ 1044 + { 1045 + name: 'InvalidSwap', 1046 + }, 1047 + ], 1048 output: { 1049 schema: { 1050 type: 'object', 1051 required: ['uri', 'cid'], 1052 properties: { 1053 + cid: { 1054 + type: 'string', 1055 + format: 'cid', 1056 + }, 1057 uri: { 1058 type: 'string', 1059 format: 'at-uri', 1060 }, 1061 commit: { 1062 ref: 'lex:com.atproto.repo.defs#commitMeta', 1063 + type: 'ref', 1064 }, 1065 validationStatus: { 1066 type: 'string', ··· 1068 }, 1069 }, 1070 }, 1071 + encoding: 'application/json', 1072 }, 1073 + description: 1074 + 'Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS.', 1075 }, 1076 }, 1077 }, ··· 1084 type: 'object', 1085 required: ['uri', 'cid'], 1086 properties: { 1087 cid: { 1088 type: 'string', 1089 format: 'cid', 1090 + }, 1091 + uri: { 1092 + type: 'string', 1093 + format: 'at-uri', 1094 }, 1095 }, 1096 }, ··· 1102 defs: { 1103 main: { 1104 type: 'procedure', 1105 input: { 1106 encoding: '*/*', 1107 }, 1108 output: { 1109 schema: { 1110 type: 'object', 1111 required: ['blob'], ··· 1115 }, 1116 }, 1117 }, 1118 + encoding: 'application/json', 1119 }, 1120 + description: 1121 + 'Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS.', 1122 }, 1123 }, 1124 }, ··· 1126 lexicon: 1, 1127 id: 'app.bsky.actor.defs', 1128 defs: { 1129 + nux: { 1130 + type: 'object', 1131 + required: ['id', 'completed'], 1132 + properties: { 1133 + id: { 1134 + type: 'string', 1135 + maxLength: 100, 1136 + }, 1137 + data: { 1138 + type: 'string', 1139 + maxLength: 3000, 1140 + description: 1141 + 'Arbitrary data for the NUX. The structure is defined by the NUX itself. Limited to 300 characters.', 1142 + maxGraphemes: 300, 1143 + }, 1144 + completed: { 1145 + type: 'boolean', 1146 + default: false, 1147 + }, 1148 + expiresAt: { 1149 + type: 'string', 1150 + format: 'datetime', 1151 + description: 1152 + 'The date and time at which the NUX will expire and should be considered completed.', 1153 + }, 1154 + }, 1155 + description: 'A new user experiences (NUX) storage object', 1156 + }, 1157 + mutedWord: { 1158 + type: 'object', 1159 + required: ['value', 'targets'], 1160 + properties: { 1161 + id: { 1162 + type: 'string', 1163 + }, 1164 + value: { 1165 + type: 'string', 1166 + maxLength: 10000, 1167 + description: 'The muted word itself.', 1168 + maxGraphemes: 1000, 1169 + }, 1170 + targets: { 1171 + type: 'array', 1172 + items: { 1173 + ref: 'lex:app.bsky.actor.defs#mutedWordTarget', 1174 + type: 'ref', 1175 + }, 1176 + description: 'The intended targets of the muted word.', 1177 + }, 1178 + expiresAt: { 1179 + type: 'string', 1180 + format: 'datetime', 1181 + description: 1182 + 'The date and time at which the muted word will expire and no longer be applied.', 1183 + }, 1184 + actorTarget: { 1185 + type: 'string', 1186 + default: 'all', 1187 + description: 1188 + 'Groups of users to apply the muted word to. If undefined, applies to all users.', 1189 + knownValues: ['all', 'exclude-following'], 1190 + }, 1191 + }, 1192 + description: 'A word that the account owner has muted.', 1193 + }, 1194 + savedFeed: { 1195 + type: 'object', 1196 + required: ['id', 'type', 'value', 'pinned'], 1197 + properties: { 1198 + id: { 1199 + type: 'string', 1200 + }, 1201 + type: { 1202 + type: 'string', 1203 + knownValues: ['feed', 'list', 'timeline'], 1204 + }, 1205 + value: { 1206 + type: 'string', 1207 + }, 1208 + pinned: { 1209 + type: 'boolean', 1210 + }, 1211 + }, 1212 + }, 1213 + preferences: { 1214 + type: 'array', 1215 + items: { 1216 + refs: [ 1217 + 'lex:app.bsky.actor.defs#adultContentPref', 1218 + 'lex:app.bsky.actor.defs#contentLabelPref', 1219 + 'lex:app.bsky.actor.defs#savedFeedsPref', 1220 + 'lex:app.bsky.actor.defs#savedFeedsPrefV2', 1221 + 'lex:app.bsky.actor.defs#personalDetailsPref', 1222 + 'lex:app.bsky.actor.defs#feedViewPref', 1223 + 'lex:app.bsky.actor.defs#threadViewPref', 1224 + 'lex:app.bsky.actor.defs#interestsPref', 1225 + 'lex:app.bsky.actor.defs#mutedWordsPref', 1226 + 'lex:app.bsky.actor.defs#hiddenPostsPref', 1227 + 'lex:app.bsky.actor.defs#bskyAppStatePref', 1228 + 'lex:app.bsky.actor.defs#labelersPref', 1229 + 'lex:app.bsky.actor.defs#postInteractionSettingsPref', 1230 + ], 1231 + type: 'union', 1232 + }, 1233 + }, 1234 profileView: { 1235 type: 'object', 1236 required: ['did', 'handle'], ··· 1239 type: 'string', 1240 format: 'did', 1241 }, 1242 + avatar: { 1243 + type: 'string', 1244 + format: 'uri', 1245 + }, 1246 handle: { 1247 type: 'string', 1248 format: 'handle', 1249 }, 1250 + labels: { 1251 + type: 'array', 1252 + items: { 1253 + ref: 'lex:com.atproto.label.defs#label', 1254 + type: 'ref', 1255 + }, 1256 + }, 1257 + viewer: { 1258 + ref: 'lex:app.bsky.actor.defs#viewerState', 1259 + type: 'ref', 1260 + }, 1261 + createdAt: { 1262 + type: 'string', 1263 + format: 'datetime', 1264 + }, 1265 + indexedAt: { 1266 + type: 'string', 1267 + format: 'datetime', 1268 + }, 1269 + associated: { 1270 + ref: 'lex:app.bsky.actor.defs#profileAssociated', 1271 + type: 'ref', 1272 + }, 1273 + description: { 1274 + type: 'string', 1275 + maxLength: 2560, 1276 + maxGraphemes: 256, 1277 + }, 1278 displayName: { 1279 type: 'string', 1280 + maxLength: 640, 1281 maxGraphemes: 64, 1282 + }, 1283 + }, 1284 + }, 1285 + viewerState: { 1286 + type: 'object', 1287 + properties: { 1288 + muted: { 1289 + type: 'boolean', 1290 + }, 1291 + blocking: { 1292 + type: 'string', 1293 + format: 'at-uri', 1294 + }, 1295 + blockedBy: { 1296 + type: 'boolean', 1297 + }, 1298 + following: { 1299 + type: 'string', 1300 + format: 'at-uri', 1301 + }, 1302 + followedBy: { 1303 + type: 'string', 1304 + format: 'at-uri', 1305 + }, 1306 + mutedByList: { 1307 + ref: 'lex:app.bsky.graph.defs#listViewBasic', 1308 + type: 'ref', 1309 + }, 1310 + blockingByList: { 1311 + ref: 'lex:app.bsky.graph.defs#listViewBasic', 1312 + type: 'ref', 1313 + }, 1314 + knownFollowers: { 1315 + ref: 'lex:app.bsky.actor.defs#knownFollowers', 1316 + type: 'ref', 1317 + }, 1318 + }, 1319 + description: 1320 + "Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests.", 1321 + }, 1322 + feedViewPref: { 1323 + type: 'object', 1324 + required: ['feed'], 1325 + properties: { 1326 + feed: { 1327 + type: 'string', 1328 + description: 1329 + 'The URI of the feed, or an identifier which describes the feed.', 1330 + }, 1331 + hideReplies: { 1332 + type: 'boolean', 1333 + description: 'Hide replies in the feed.', 1334 + }, 1335 + hideReposts: { 1336 + type: 'boolean', 1337 + description: 'Hide reposts in the feed.', 1338 + }, 1339 + hideQuotePosts: { 1340 + type: 'boolean', 1341 + description: 'Hide quote posts in the feed.', 1342 + }, 1343 + hideRepliesByLikeCount: { 1344 + type: 'integer', 1345 + description: 1346 + 'Hide replies in the feed if they do not have this number of likes.', 1347 + }, 1348 + hideRepliesByUnfollowed: { 1349 + type: 'boolean', 1350 + default: true, 1351 + description: 1352 + 'Hide replies in the feed if they are not by followed users.', 1353 + }, 1354 + }, 1355 + }, 1356 + labelersPref: { 1357 + type: 'object', 1358 + required: ['labelers'], 1359 + properties: { 1360 + labelers: { 1361 + type: 'array', 1362 + items: { 1363 + ref: 'lex:app.bsky.actor.defs#labelerPrefItem', 1364 + type: 'ref', 1365 + }, 1366 + }, 1367 + }, 1368 + }, 1369 + interestsPref: { 1370 + type: 'object', 1371 + required: ['tags'], 1372 + properties: { 1373 + tags: { 1374 + type: 'array', 1375 + items: { 1376 + type: 'string', 1377 + maxLength: 640, 1378 + maxGraphemes: 64, 1379 + }, 1380 + maxLength: 100, 1381 + description: 1382 + "A list of tags which describe the account owner's interests gathered during onboarding.", 1383 + }, 1384 + }, 1385 + }, 1386 + knownFollowers: { 1387 + type: 'object', 1388 + required: ['count', 'followers'], 1389 + properties: { 1390 + count: { 1391 + type: 'integer', 1392 + }, 1393 + followers: { 1394 + type: 'array', 1395 + items: { 1396 + ref: 'lex:app.bsky.actor.defs#profileViewBasic', 1397 + type: 'ref', 1398 + }, 1399 + maxLength: 5, 1400 + minLength: 0, 1401 + }, 1402 + }, 1403 + description: "The subject's followers whom you also follow", 1404 + }, 1405 + mutedWordsPref: { 1406 + type: 'object', 1407 + required: ['items'], 1408 + properties: { 1409 + items: { 1410 + type: 'array', 1411 + items: { 1412 + ref: 'lex:app.bsky.actor.defs#mutedWord', 1413 + type: 'ref', 1414 + }, 1415 + description: 'A list of words the account owner has muted.', 1416 + }, 1417 + }, 1418 + }, 1419 + savedFeedsPref: { 1420 + type: 'object', 1421 + required: ['pinned', 'saved'], 1422 + properties: { 1423 + saved: { 1424 + type: 'array', 1425 + items: { 1426 + type: 'string', 1427 + format: 'at-uri', 1428 + }, 1429 + }, 1430 + pinned: { 1431 + type: 'array', 1432 + items: { 1433 + type: 'string', 1434 + format: 'at-uri', 1435 + }, 1436 + }, 1437 + timelineIndex: { 1438 + type: 'integer', 1439 + }, 1440 + }, 1441 + }, 1442 + threadViewPref: { 1443 + type: 'object', 1444 + properties: { 1445 + sort: { 1446 + type: 'string', 1447 + description: 'Sorting mode for threads.', 1448 + knownValues: [ 1449 + 'oldest', 1450 + 'newest', 1451 + 'most-likes', 1452 + 'random', 1453 + 'hotness', 1454 + ], 1455 + }, 1456 + prioritizeFollowedUsers: { 1457 + type: 'boolean', 1458 + description: 'Show followed users at the top of all replies.', 1459 + }, 1460 + }, 1461 + }, 1462 + hiddenPostsPref: { 1463 + type: 'object', 1464 + required: ['items'], 1465 + properties: { 1466 + items: { 1467 + type: 'array', 1468 + items: { 1469 + type: 'string', 1470 + format: 'at-uri', 1471 + }, 1472 + description: 1473 + 'A list of URIs of posts the account owner has hidden.', 1474 + }, 1475 + }, 1476 + }, 1477 + labelerPrefItem: { 1478 + type: 'object', 1479 + required: ['did'], 1480 + properties: { 1481 + did: { 1482 + type: 'string', 1483 + format: 'did', 1484 + }, 1485 + }, 1486 + }, 1487 + mutedWordTarget: { 1488 + type: 'string', 1489 + maxLength: 640, 1490 + knownValues: ['content', 'tag'], 1491 + maxGraphemes: 64, 1492 + }, 1493 + adultContentPref: { 1494 + type: 'object', 1495 + required: ['enabled'], 1496 + properties: { 1497 + enabled: { 1498 + type: 'boolean', 1499 + default: false, 1500 + }, 1501 + }, 1502 + }, 1503 + bskyAppStatePref: { 1504 + type: 'object', 1505 + properties: { 1506 + nuxs: { 1507 + type: 'array', 1508 + items: { 1509 + ref: 'lex:app.bsky.actor.defs#nux', 1510 + type: 'ref', 1511 + }, 1512 + maxLength: 100, 1513 + description: 'Storage for NUXs the user has encountered.', 1514 + }, 1515 + queuedNudges: { 1516 + type: 'array', 1517 + items: { 1518 + type: 'string', 1519 + maxLength: 100, 1520 + }, 1521 + maxLength: 1000, 1522 + description: 1523 + 'An array of tokens which identify nudges (modals, popups, tours, highlight dots) that should be shown to the user.', 1524 + }, 1525 + activeProgressGuide: { 1526 + ref: 'lex:app.bsky.actor.defs#bskyAppProgressGuide', 1527 + type: 'ref', 1528 + }, 1529 + }, 1530 + description: 1531 + "A grab bag of state that's specific to the bsky.app program. Third-party apps shouldn't use this.", 1532 + }, 1533 + contentLabelPref: { 1534 + type: 'object', 1535 + required: ['label', 'visibility'], 1536 + properties: { 1537 + label: { 1538 + type: 'string', 1539 + }, 1540 + labelerDid: { 1541 + type: 'string', 1542 + format: 'did', 1543 + description: 1544 + 'Which labeler does this preference apply to? If undefined, applies globally.', 1545 + }, 1546 + visibility: { 1547 + type: 'string', 1548 + knownValues: ['ignore', 'show', 'warn', 'hide'], 1549 }, 1550 + }, 1551 + }, 1552 + profileViewBasic: { 1553 + type: 'object', 1554 + required: ['did', 'handle'], 1555 + properties: { 1556 + did: { 1557 type: 'string', 1558 + format: 'did', 1559 }, 1560 avatar: { 1561 type: 'string', 1562 format: 'uri', 1563 }, 1564 + handle: { 1565 + type: 'string', 1566 + format: 'handle', 1567 + }, 1568 + labels: { 1569 + type: 'array', 1570 + items: { 1571 + ref: 'lex:com.atproto.label.defs#label', 1572 + type: 'ref', 1573 + }, 1574 + }, 1575 + viewer: { 1576 + ref: 'lex:app.bsky.actor.defs#viewerState', 1577 + type: 'ref', 1578 + }, 1579 + createdAt: { 1580 type: 'string', 1581 format: 'datetime', 1582 }, 1583 + associated: { 1584 + ref: 'lex:app.bsky.actor.defs#profileAssociated', 1585 + type: 'ref', 1586 + }, 1587 + displayName: { 1588 + type: 'string', 1589 + maxLength: 640, 1590 + maxGraphemes: 64, 1591 + }, 1592 + }, 1593 + }, 1594 + savedFeedsPrefV2: { 1595 + type: 'object', 1596 + required: ['items'], 1597 + properties: { 1598 + items: { 1599 + type: 'array', 1600 + items: { 1601 + ref: 'lex:app.bsky.actor.defs#savedFeed', 1602 + type: 'ref', 1603 + }, 1604 + }, 1605 + }, 1606 + }, 1607 + profileAssociated: { 1608 + type: 'object', 1609 + properties: { 1610 + chat: { 1611 + ref: 'lex:app.bsky.actor.defs#profileAssociatedChat', 1612 + type: 'ref', 1613 + }, 1614 + lists: { 1615 + type: 'integer', 1616 + }, 1617 + labeler: { 1618 + type: 'boolean', 1619 + }, 1620 + feedgens: { 1621 + type: 'integer', 1622 + }, 1623 + starterPacks: { 1624 + type: 'integer', 1625 + }, 1626 + }, 1627 + }, 1628 + personalDetailsPref: { 1629 + type: 'object', 1630 + properties: { 1631 + birthDate: { 1632 type: 'string', 1633 format: 'datetime', 1634 + description: 'The birth date of account owner.', 1635 + }, 1636 + }, 1637 + }, 1638 + profileViewDetailed: { 1639 + type: 'object', 1640 + required: ['did', 'handle'], 1641 + properties: { 1642 + did: { 1643 + type: 'string', 1644 + format: 'did', 1645 + }, 1646 + avatar: { 1647 + type: 'string', 1648 + format: 'uri', 1649 + }, 1650 + banner: { 1651 + type: 'string', 1652 + format: 'uri', 1653 + }, 1654 + handle: { 1655 + type: 'string', 1656 + format: 'handle', 1657 }, 1658 labels: { 1659 type: 'array', 1660 items: { 1661 + ref: 'lex:com.atproto.label.defs#label', 1662 type: 'ref', 1663 + }, 1664 + }, 1665 + viewer: { 1666 + ref: 'lex:app.bsky.actor.defs#viewerState', 1667 + type: 'ref', 1668 + }, 1669 + createdAt: { 1670 + type: 'string', 1671 + format: 'datetime', 1672 + }, 1673 + indexedAt: { 1674 + type: 'string', 1675 + format: 'datetime', 1676 + }, 1677 + associated: { 1678 + ref: 'lex:app.bsky.actor.defs#profileAssociated', 1679 + type: 'ref', 1680 + }, 1681 + pinnedPost: { 1682 + ref: 'lex:com.atproto.repo.strongRef', 1683 + type: 'ref', 1684 + }, 1685 + postsCount: { 1686 + type: 'integer', 1687 + }, 1688 + description: { 1689 + type: 'string', 1690 + maxLength: 2560, 1691 + maxGraphemes: 256, 1692 + }, 1693 + displayName: { 1694 + type: 'string', 1695 + maxLength: 640, 1696 + maxGraphemes: 64, 1697 + }, 1698 + followsCount: { 1699 + type: 'integer', 1700 + }, 1701 + followersCount: { 1702 + type: 'integer', 1703 + }, 1704 + joinedViaStarterPack: { 1705 + ref: 'lex:app.bsky.graph.defs#starterPackViewBasic', 1706 + type: 'ref', 1707 + }, 1708 + }, 1709 + }, 1710 + bskyAppProgressGuide: { 1711 + type: 'object', 1712 + required: ['guide'], 1713 + properties: { 1714 + guide: { 1715 + type: 'string', 1716 + maxLength: 100, 1717 + }, 1718 + }, 1719 + description: 1720 + 'If set, an active progress guide. Once completed, can be set to undefined. Should have unspecced fields tracking progress.', 1721 + }, 1722 + profileAssociatedChat: { 1723 + type: 'object', 1724 + required: ['allowIncoming'], 1725 + properties: { 1726 + allowIncoming: { 1727 + type: 'string', 1728 + knownValues: ['all', 'none', 'following'], 1729 + }, 1730 + }, 1731 + }, 1732 + postInteractionSettingsPref: { 1733 + type: 'object', 1734 + required: [], 1735 + properties: { 1736 + threadgateAllowRules: { 1737 + type: 'array', 1738 + items: { 1739 + refs: [ 1740 + 'lex:app.bsky.feed.threadgate#mentionRule', 1741 + 'lex:app.bsky.feed.threadgate#followerRule', 1742 + 'lex:app.bsky.feed.threadgate#followingRule', 1743 + 'lex:app.bsky.feed.threadgate#listRule', 1744 + ], 1745 + type: 'union', 1746 + }, 1747 + maxLength: 5, 1748 + description: 1749 + '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.', 1750 + }, 1751 + postgateEmbeddingRules: { 1752 + type: 'array', 1753 + items: { 1754 + refs: ['lex:app.bsky.feed.postgate#disableRule'], 1755 + type: 'union', 1756 }, 1757 + maxLength: 5, 1758 + description: 1759 + '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.', 1760 }, 1761 }, 1762 + description: 1763 + '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.', 1764 }, 1765 }, 1766 }, ··· 1823 }, 1824 }, 1825 }, 1826 + AppBskyEmbedDefs: { 1827 + lexicon: 1, 1828 + id: 'app.bsky.embed.defs', 1829 + defs: { 1830 + aspectRatio: { 1831 + type: 'object', 1832 + required: ['width', 'height'], 1833 + properties: { 1834 + width: { 1835 + type: 'integer', 1836 + minimum: 1, 1837 + }, 1838 + height: { 1839 + type: 'integer', 1840 + minimum: 1, 1841 + }, 1842 + }, 1843 + description: 1844 + 'width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit.', 1845 + }, 1846 + }, 1847 + }, 1848 + AppBskyEmbedExternal: { 1849 + lexicon: 1, 1850 + id: 'app.bsky.embed.external', 1851 + defs: { 1852 + main: { 1853 + type: 'object', 1854 + required: ['external'], 1855 + properties: { 1856 + external: { 1857 + ref: 'lex:app.bsky.embed.external#external', 1858 + type: 'ref', 1859 + }, 1860 + }, 1861 + description: 1862 + "A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post).", 1863 + }, 1864 + view: { 1865 + type: 'object', 1866 + required: ['external'], 1867 + properties: { 1868 + external: { 1869 + ref: 'lex:app.bsky.embed.external#viewExternal', 1870 + type: 'ref', 1871 + }, 1872 + }, 1873 + }, 1874 + external: { 1875 + type: 'object', 1876 + required: ['uri', 'title', 'description'], 1877 + properties: { 1878 + uri: { 1879 + type: 'string', 1880 + format: 'uri', 1881 + }, 1882 + thumb: { 1883 + type: 'blob', 1884 + accept: ['image/*'], 1885 + maxSize: 1000000, 1886 + }, 1887 + title: { 1888 + type: 'string', 1889 + }, 1890 + description: { 1891 + type: 'string', 1892 + }, 1893 + }, 1894 + }, 1895 + viewExternal: { 1896 + type: 'object', 1897 + required: ['uri', 'title', 'description'], 1898 + properties: { 1899 + uri: { 1900 + type: 'string', 1901 + format: 'uri', 1902 + }, 1903 + thumb: { 1904 + type: 'string', 1905 + format: 'uri', 1906 + }, 1907 + title: { 1908 + type: 'string', 1909 + }, 1910 + description: { 1911 + type: 'string', 1912 + }, 1913 + }, 1914 + }, 1915 + }, 1916 + }, 1917 + AppBskyEmbedImages: { 1918 + lexicon: 1, 1919 + id: 'app.bsky.embed.images', 1920 + description: 'A set of images embedded in a Bluesky record (eg, a post).', 1921 + defs: { 1922 + main: { 1923 + type: 'object', 1924 + required: ['images'], 1925 + properties: { 1926 + images: { 1927 + type: 'array', 1928 + items: { 1929 + ref: 'lex:app.bsky.embed.images#image', 1930 + type: 'ref', 1931 + }, 1932 + maxLength: 4, 1933 + }, 1934 + }, 1935 + }, 1936 + view: { 1937 + type: 'object', 1938 + required: ['images'], 1939 + properties: { 1940 + images: { 1941 + type: 'array', 1942 + items: { 1943 + ref: 'lex:app.bsky.embed.images#viewImage', 1944 + type: 'ref', 1945 + }, 1946 + maxLength: 4, 1947 + }, 1948 + }, 1949 + }, 1950 + image: { 1951 + type: 'object', 1952 + required: ['image', 'alt'], 1953 + properties: { 1954 + alt: { 1955 + type: 'string', 1956 + description: 1957 + 'Alt text description of the image, for accessibility.', 1958 + }, 1959 + image: { 1960 + type: 'blob', 1961 + accept: ['image/*'], 1962 + maxSize: 1000000, 1963 + }, 1964 + aspectRatio: { 1965 + ref: 'lex:app.bsky.embed.defs#aspectRatio', 1966 + type: 'ref', 1967 + }, 1968 + }, 1969 + }, 1970 + viewImage: { 1971 + type: 'object', 1972 + required: ['thumb', 'fullsize', 'alt'], 1973 + properties: { 1974 + alt: { 1975 + type: 'string', 1976 + description: 1977 + 'Alt text description of the image, for accessibility.', 1978 + }, 1979 + thumb: { 1980 + type: 'string', 1981 + format: 'uri', 1982 + description: 1983 + 'Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View.', 1984 + }, 1985 + fullsize: { 1986 + type: 'string', 1987 + format: 'uri', 1988 + description: 1989 + '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.', 1990 + }, 1991 + aspectRatio: { 1992 + ref: 'lex:app.bsky.embed.defs#aspectRatio', 1993 + type: 'ref', 1994 + }, 1995 + }, 1996 + }, 1997 + }, 1998 + }, 1999 + AppBskyEmbedRecord: { 2000 + lexicon: 1, 2001 + id: 'app.bsky.embed.record', 2002 + description: 2003 + 'A representation of a record embedded in a Bluesky record (eg, a post). For example, a quote-post, or sharing a feed generator record.', 2004 + defs: { 2005 + main: { 2006 + type: 'object', 2007 + required: ['record'], 2008 + properties: { 2009 + record: { 2010 + ref: 'lex:com.atproto.repo.strongRef', 2011 + type: 'ref', 2012 + }, 2013 + }, 2014 + }, 2015 + view: { 2016 + type: 'object', 2017 + required: ['record'], 2018 + properties: { 2019 + record: { 2020 + refs: [ 2021 + 'lex:app.bsky.embed.record#viewRecord', 2022 + 'lex:app.bsky.embed.record#viewNotFound', 2023 + 'lex:app.bsky.embed.record#viewBlocked', 2024 + 'lex:app.bsky.embed.record#viewDetached', 2025 + 'lex:app.bsky.feed.defs#generatorView', 2026 + 'lex:app.bsky.graph.defs#listView', 2027 + 'lex:app.bsky.labeler.defs#labelerView', 2028 + 'lex:app.bsky.graph.defs#starterPackViewBasic', 2029 + ], 2030 + type: 'union', 2031 + }, 2032 + }, 2033 + }, 2034 + viewRecord: { 2035 + type: 'object', 2036 + required: ['uri', 'cid', 'author', 'value', 'indexedAt'], 2037 + properties: { 2038 + cid: { 2039 + type: 'string', 2040 + format: 'cid', 2041 + }, 2042 + uri: { 2043 + type: 'string', 2044 + format: 'at-uri', 2045 + }, 2046 + value: { 2047 + type: 'unknown', 2048 + description: 'The record data itself.', 2049 + }, 2050 + author: { 2051 + ref: 'lex:app.bsky.actor.defs#profileViewBasic', 2052 + type: 'ref', 2053 + }, 2054 + embeds: { 2055 + type: 'array', 2056 + items: { 2057 + refs: [ 2058 + 'lex:app.bsky.embed.images#view', 2059 + 'lex:app.bsky.embed.video#view', 2060 + 'lex:app.bsky.embed.external#view', 2061 + 'lex:app.bsky.embed.record#view', 2062 + 'lex:app.bsky.embed.recordWithMedia#view', 2063 + ], 2064 + type: 'union', 2065 + }, 2066 + }, 2067 + labels: { 2068 + type: 'array', 2069 + items: { 2070 + ref: 'lex:com.atproto.label.defs#label', 2071 + type: 'ref', 2072 + }, 2073 + }, 2074 + indexedAt: { 2075 + type: 'string', 2076 + format: 'datetime', 2077 + }, 2078 + likeCount: { 2079 + type: 'integer', 2080 + }, 2081 + quoteCount: { 2082 + type: 'integer', 2083 + }, 2084 + replyCount: { 2085 + type: 'integer', 2086 + }, 2087 + repostCount: { 2088 + type: 'integer', 2089 + }, 2090 + }, 2091 + }, 2092 + viewBlocked: { 2093 + type: 'object', 2094 + required: ['uri', 'blocked', 'author'], 2095 + properties: { 2096 + uri: { 2097 + type: 'string', 2098 + format: 'at-uri', 2099 + }, 2100 + author: { 2101 + ref: 'lex:app.bsky.feed.defs#blockedAuthor', 2102 + type: 'ref', 2103 + }, 2104 + blocked: { 2105 + type: 'boolean', 2106 + const: true, 2107 + }, 2108 + }, 2109 + }, 2110 + viewDetached: { 2111 + type: 'object', 2112 + required: ['uri', 'detached'], 2113 + properties: { 2114 + uri: { 2115 + type: 'string', 2116 + format: 'at-uri', 2117 + }, 2118 + detached: { 2119 + type: 'boolean', 2120 + const: true, 2121 + }, 2122 + }, 2123 + }, 2124 + viewNotFound: { 2125 + type: 'object', 2126 + required: ['uri', 'notFound'], 2127 + properties: { 2128 + uri: { 2129 + type: 'string', 2130 + format: 'at-uri', 2131 + }, 2132 + notFound: { 2133 + type: 'boolean', 2134 + const: true, 2135 + }, 2136 + }, 2137 + }, 2138 + }, 2139 + }, 2140 + AppBskyEmbedRecordWithMedia: { 2141 + lexicon: 1, 2142 + id: 'app.bsky.embed.recordWithMedia', 2143 + description: 2144 + '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.', 2145 + defs: { 2146 + main: { 2147 + type: 'object', 2148 + required: ['record', 'media'], 2149 + properties: { 2150 + media: { 2151 + refs: [ 2152 + 'lex:app.bsky.embed.images', 2153 + 'lex:app.bsky.embed.video', 2154 + 'lex:app.bsky.embed.external', 2155 + ], 2156 + type: 'union', 2157 + }, 2158 + record: { 2159 + ref: 'lex:app.bsky.embed.record', 2160 + type: 'ref', 2161 + }, 2162 + }, 2163 + }, 2164 + view: { 2165 + type: 'object', 2166 + required: ['record', 'media'], 2167 + properties: { 2168 + media: { 2169 + refs: [ 2170 + 'lex:app.bsky.embed.images#view', 2171 + 'lex:app.bsky.embed.video#view', 2172 + 'lex:app.bsky.embed.external#view', 2173 + ], 2174 + type: 'union', 2175 + }, 2176 + record: { 2177 + ref: 'lex:app.bsky.embed.record#view', 2178 + type: 'ref', 2179 + }, 2180 + }, 2181 + }, 2182 + }, 2183 + }, 2184 + AppBskyEmbedVideo: { 2185 + lexicon: 1, 2186 + id: 'app.bsky.embed.video', 2187 + description: 'A video embedded in a Bluesky record (eg, a post).', 2188 + defs: { 2189 + main: { 2190 + type: 'object', 2191 + required: ['video'], 2192 + properties: { 2193 + alt: { 2194 + type: 'string', 2195 + maxLength: 10000, 2196 + description: 2197 + 'Alt text description of the video, for accessibility.', 2198 + maxGraphemes: 1000, 2199 + }, 2200 + video: { 2201 + type: 'blob', 2202 + accept: ['video/mp4'], 2203 + maxSize: 50000000, 2204 + }, 2205 + captions: { 2206 + type: 'array', 2207 + items: { 2208 + ref: 'lex:app.bsky.embed.video#caption', 2209 + type: 'ref', 2210 + }, 2211 + maxLength: 20, 2212 + }, 2213 + aspectRatio: { 2214 + ref: 'lex:app.bsky.embed.defs#aspectRatio', 2215 + type: 'ref', 2216 + }, 2217 + }, 2218 + }, 2219 + view: { 2220 + type: 'object', 2221 + required: ['cid', 'playlist'], 2222 + properties: { 2223 + alt: { 2224 + type: 'string', 2225 + maxLength: 10000, 2226 + maxGraphemes: 1000, 2227 + }, 2228 + cid: { 2229 + type: 'string', 2230 + format: 'cid', 2231 + }, 2232 + playlist: { 2233 + type: 'string', 2234 + format: 'uri', 2235 + }, 2236 + thumbnail: { 2237 + type: 'string', 2238 + format: 'uri', 2239 + }, 2240 + aspectRatio: { 2241 + ref: 'lex:app.bsky.embed.defs#aspectRatio', 2242 + type: 'ref', 2243 + }, 2244 + }, 2245 + }, 2246 + caption: { 2247 + type: 'object', 2248 + required: ['lang', 'file'], 2249 + properties: { 2250 + file: { 2251 + type: 'blob', 2252 + accept: ['text/vtt'], 2253 + maxSize: 20000, 2254 + }, 2255 + lang: { 2256 + type: 'string', 2257 + format: 'language', 2258 + }, 2259 + }, 2260 + }, 2261 + }, 2262 + }, 2263 + AppBskyFeedDefs: { 2264 + lexicon: 1, 2265 + id: 'app.bsky.feed.defs', 2266 + defs: { 2267 + postView: { 2268 + type: 'object', 2269 + required: ['uri', 'cid', 'author', 'record', 'indexedAt'], 2270 + properties: { 2271 + cid: { 2272 + type: 'string', 2273 + format: 'cid', 2274 + }, 2275 + uri: { 2276 + type: 'string', 2277 + format: 'at-uri', 2278 + }, 2279 + embed: { 2280 + refs: [ 2281 + 'lex:app.bsky.embed.images#view', 2282 + 'lex:app.bsky.embed.video#view', 2283 + 'lex:app.bsky.embed.external#view', 2284 + 'lex:app.bsky.embed.record#view', 2285 + 'lex:app.bsky.embed.recordWithMedia#view', 2286 + ], 2287 + type: 'union', 2288 + }, 2289 + author: { 2290 + ref: 'lex:app.bsky.actor.defs#profileViewBasic', 2291 + type: 'ref', 2292 + }, 2293 + labels: { 2294 + type: 'array', 2295 + items: { 2296 + ref: 'lex:com.atproto.label.defs#label', 2297 + type: 'ref', 2298 + }, 2299 + }, 2300 + record: { 2301 + type: 'unknown', 2302 + }, 2303 + viewer: { 2304 + ref: 'lex:app.bsky.feed.defs#viewerState', 2305 + type: 'ref', 2306 + }, 2307 + indexedAt: { 2308 + type: 'string', 2309 + format: 'datetime', 2310 + }, 2311 + likeCount: { 2312 + type: 'integer', 2313 + }, 2314 + quoteCount: { 2315 + type: 'integer', 2316 + }, 2317 + replyCount: { 2318 + type: 'integer', 2319 + }, 2320 + threadgate: { 2321 + ref: 'lex:app.bsky.feed.defs#threadgateView', 2322 + type: 'ref', 2323 + }, 2324 + repostCount: { 2325 + type: 'integer', 2326 + }, 2327 + }, 2328 + }, 2329 + replyRef: { 2330 + type: 'object', 2331 + required: ['root', 'parent'], 2332 + properties: { 2333 + root: { 2334 + refs: [ 2335 + 'lex:app.bsky.feed.defs#postView', 2336 + 'lex:app.bsky.feed.defs#notFoundPost', 2337 + 'lex:app.bsky.feed.defs#blockedPost', 2338 + ], 2339 + type: 'union', 2340 + }, 2341 + parent: { 2342 + refs: [ 2343 + 'lex:app.bsky.feed.defs#postView', 2344 + 'lex:app.bsky.feed.defs#notFoundPost', 2345 + 'lex:app.bsky.feed.defs#blockedPost', 2346 + ], 2347 + type: 'union', 2348 + }, 2349 + grandparentAuthor: { 2350 + ref: 'lex:app.bsky.actor.defs#profileViewBasic', 2351 + type: 'ref', 2352 + description: 2353 + 'When parent is a reply to another post, this is the author of that post.', 2354 + }, 2355 + }, 2356 + }, 2357 + reasonPin: { 2358 + type: 'object', 2359 + properties: {}, 2360 + }, 2361 + blockedPost: { 2362 + type: 'object', 2363 + required: ['uri', 'blocked', 'author'], 2364 + properties: { 2365 + uri: { 2366 + type: 'string', 2367 + format: 'at-uri', 2368 + }, 2369 + author: { 2370 + ref: 'lex:app.bsky.feed.defs#blockedAuthor', 2371 + type: 'ref', 2372 + }, 2373 + blocked: { 2374 + type: 'boolean', 2375 + const: true, 2376 + }, 2377 + }, 2378 + }, 2379 + interaction: { 2380 + type: 'object', 2381 + properties: { 2382 + item: { 2383 + type: 'string', 2384 + format: 'at-uri', 2385 + }, 2386 + event: { 2387 + type: 'string', 2388 + knownValues: [ 2389 + 'app.bsky.feed.defs#requestLess', 2390 + 'app.bsky.feed.defs#requestMore', 2391 + 'app.bsky.feed.defs#clickthroughItem', 2392 + 'app.bsky.feed.defs#clickthroughAuthor', 2393 + 'app.bsky.feed.defs#clickthroughReposter', 2394 + 'app.bsky.feed.defs#clickthroughEmbed', 2395 + 'app.bsky.feed.defs#interactionSeen', 2396 + 'app.bsky.feed.defs#interactionLike', 2397 + 'app.bsky.feed.defs#interactionRepost', 2398 + 'app.bsky.feed.defs#interactionReply', 2399 + 'app.bsky.feed.defs#interactionQuote', 2400 + 'app.bsky.feed.defs#interactionShare', 2401 + ], 2402 + }, 2403 + feedContext: { 2404 + type: 'string', 2405 + maxLength: 2000, 2406 + description: 2407 + 'Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton.', 2408 + }, 2409 + }, 2410 + }, 2411 + requestLess: { 2412 + type: 'token', 2413 + description: 2414 + 'Request that less content like the given feed item be shown in the feed', 2415 + }, 2416 + requestMore: { 2417 + type: 'token', 2418 + description: 2419 + 'Request that more content like the given feed item be shown in the feed', 2420 + }, 2421 + viewerState: { 2422 + type: 'object', 2423 + properties: { 2424 + like: { 2425 + type: 'string', 2426 + format: 'at-uri', 2427 + }, 2428 + pinned: { 2429 + type: 'boolean', 2430 + }, 2431 + repost: { 2432 + type: 'string', 2433 + format: 'at-uri', 2434 + }, 2435 + threadMuted: { 2436 + type: 'boolean', 2437 + }, 2438 + replyDisabled: { 2439 + type: 'boolean', 2440 + }, 2441 + embeddingDisabled: { 2442 + type: 'boolean', 2443 + }, 2444 + }, 2445 + description: 2446 + "Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests.", 2447 + }, 2448 + feedViewPost: { 2449 + type: 'object', 2450 + required: ['post'], 2451 + properties: { 2452 + post: { 2453 + ref: 'lex:app.bsky.feed.defs#postView', 2454 + type: 'ref', 2455 + }, 2456 + reply: { 2457 + ref: 'lex:app.bsky.feed.defs#replyRef', 2458 + type: 'ref', 2459 + }, 2460 + reason: { 2461 + refs: [ 2462 + 'lex:app.bsky.feed.defs#reasonRepost', 2463 + 'lex:app.bsky.feed.defs#reasonPin', 2464 + ], 2465 + type: 'union', 2466 + }, 2467 + feedContext: { 2468 + type: 'string', 2469 + maxLength: 2000, 2470 + description: 2471 + 'Context provided by feed generator that may be passed back alongside interactions.', 2472 + }, 2473 + }, 2474 + }, 2475 + notFoundPost: { 2476 + type: 'object', 2477 + required: ['uri', 'notFound'], 2478 + properties: { 2479 + uri: { 2480 + type: 'string', 2481 + format: 'at-uri', 2482 + }, 2483 + notFound: { 2484 + type: 'boolean', 2485 + const: true, 2486 + }, 2487 + }, 2488 + }, 2489 + reasonRepost: { 2490 + type: 'object', 2491 + required: ['by', 'indexedAt'], 2492 + properties: { 2493 + by: { 2494 + ref: 'lex:app.bsky.actor.defs#profileViewBasic', 2495 + type: 'ref', 2496 + }, 2497 + indexedAt: { 2498 + type: 'string', 2499 + format: 'datetime', 2500 + }, 2501 + }, 2502 + }, 2503 + blockedAuthor: { 2504 + type: 'object', 2505 + required: ['did'], 2506 + properties: { 2507 + did: { 2508 + type: 'string', 2509 + format: 'did', 2510 + }, 2511 + viewer: { 2512 + ref: 'lex:app.bsky.actor.defs#viewerState', 2513 + type: 'ref', 2514 + }, 2515 + }, 2516 + }, 2517 + generatorView: { 2518 + type: 'object', 2519 + required: ['uri', 'cid', 'did', 'creator', 'displayName', 'indexedAt'], 2520 + properties: { 2521 + cid: { 2522 + type: 'string', 2523 + format: 'cid', 2524 + }, 2525 + did: { 2526 + type: 'string', 2527 + format: 'did', 2528 + }, 2529 + uri: { 2530 + type: 'string', 2531 + format: 'at-uri', 2532 + }, 2533 + avatar: { 2534 + type: 'string', 2535 + format: 'uri', 2536 + }, 2537 + labels: { 2538 + type: 'array', 2539 + items: { 2540 + ref: 'lex:com.atproto.label.defs#label', 2541 + type: 'ref', 2542 + }, 2543 + }, 2544 + viewer: { 2545 + ref: 'lex:app.bsky.feed.defs#generatorViewerState', 2546 + type: 'ref', 2547 + }, 2548 + creator: { 2549 + ref: 'lex:app.bsky.actor.defs#profileView', 2550 + type: 'ref', 2551 + }, 2552 + indexedAt: { 2553 + type: 'string', 2554 + format: 'datetime', 2555 + }, 2556 + likeCount: { 2557 + type: 'integer', 2558 + minimum: 0, 2559 + }, 2560 + contentMode: { 2561 + type: 'string', 2562 + knownValues: [ 2563 + 'app.bsky.feed.defs#contentModeUnspecified', 2564 + 'app.bsky.feed.defs#contentModeVideo', 2565 + ], 2566 + }, 2567 + description: { 2568 + type: 'string', 2569 + maxLength: 3000, 2570 + maxGraphemes: 300, 2571 + }, 2572 + displayName: { 2573 + type: 'string', 2574 + }, 2575 + descriptionFacets: { 2576 + type: 'array', 2577 + items: { 2578 + ref: 'lex:app.bsky.richtext.facet', 2579 + type: 'ref', 2580 + }, 2581 + }, 2582 + acceptsInteractions: { 2583 + type: 'boolean', 2584 + }, 2585 + }, 2586 + }, 2587 + threadContext: { 2588 + type: 'object', 2589 + properties: { 2590 + rootAuthorLike: { 2591 + type: 'string', 2592 + format: 'at-uri', 2593 + }, 2594 + }, 2595 + description: 2596 + 'Metadata about this post within the context of the thread it is in.', 2597 + }, 2598 + threadViewPost: { 2599 + type: 'object', 2600 + required: ['post'], 2601 + properties: { 2602 + post: { 2603 + ref: 'lex:app.bsky.feed.defs#postView', 2604 + type: 'ref', 2605 + }, 2606 + parent: { 2607 + refs: [ 2608 + 'lex:app.bsky.feed.defs#threadViewPost', 2609 + 'lex:app.bsky.feed.defs#notFoundPost', 2610 + 'lex:app.bsky.feed.defs#blockedPost', 2611 + ], 2612 + type: 'union', 2613 + }, 2614 + replies: { 2615 + type: 'array', 2616 + items: { 2617 + refs: [ 2618 + 'lex:app.bsky.feed.defs#threadViewPost', 2619 + 'lex:app.bsky.feed.defs#notFoundPost', 2620 + 'lex:app.bsky.feed.defs#blockedPost', 2621 + ], 2622 + type: 'union', 2623 + }, 2624 + }, 2625 + threadContext: { 2626 + ref: 'lex:app.bsky.feed.defs#threadContext', 2627 + type: 'ref', 2628 + }, 2629 + }, 2630 + }, 2631 + threadgateView: { 2632 + type: 'object', 2633 + properties: { 2634 + cid: { 2635 + type: 'string', 2636 + format: 'cid', 2637 + }, 2638 + uri: { 2639 + type: 'string', 2640 + format: 'at-uri', 2641 + }, 2642 + lists: { 2643 + type: 'array', 2644 + items: { 2645 + ref: 'lex:app.bsky.graph.defs#listViewBasic', 2646 + type: 'ref', 2647 + }, 2648 + }, 2649 + record: { 2650 + type: 'unknown', 2651 + }, 2652 + }, 2653 + }, 2654 + interactionLike: { 2655 + type: 'token', 2656 + description: 'User liked the feed item', 2657 + }, 2658 + interactionSeen: { 2659 + type: 'token', 2660 + description: 'Feed item was seen by user', 2661 + }, 2662 + clickthroughItem: { 2663 + type: 'token', 2664 + description: 'User clicked through to the feed item', 2665 + }, 2666 + contentModeVideo: { 2667 + type: 'token', 2668 + description: 2669 + 'Declares the feed generator returns posts containing app.bsky.embed.video embeds.', 2670 + }, 2671 + interactionQuote: { 2672 + type: 'token', 2673 + description: 'User quoted the feed item', 2674 + }, 2675 + interactionReply: { 2676 + type: 'token', 2677 + description: 'User replied to the feed item', 2678 + }, 2679 + interactionShare: { 2680 + type: 'token', 2681 + description: 'User shared the feed item', 2682 + }, 2683 + skeletonFeedPost: { 2684 + type: 'object', 2685 + required: ['post'], 2686 + properties: { 2687 + post: { 2688 + type: 'string', 2689 + format: 'at-uri', 2690 + }, 2691 + reason: { 2692 + refs: [ 2693 + 'lex:app.bsky.feed.defs#skeletonReasonRepost', 2694 + 'lex:app.bsky.feed.defs#skeletonReasonPin', 2695 + ], 2696 + type: 'union', 2697 + }, 2698 + feedContext: { 2699 + type: 'string', 2700 + maxLength: 2000, 2701 + description: 2702 + 'Context that will be passed through to client and may be passed to feed generator back alongside interactions.', 2703 + }, 2704 + }, 2705 + }, 2706 + clickthroughEmbed: { 2707 + type: 'token', 2708 + description: 2709 + 'User clicked through to the embedded content of the feed item', 2710 + }, 2711 + interactionRepost: { 2712 + type: 'token', 2713 + description: 'User reposted the feed item', 2714 + }, 2715 + skeletonReasonPin: { 2716 + type: 'object', 2717 + properties: {}, 2718 + }, 2719 + clickthroughAuthor: { 2720 + type: 'token', 2721 + description: 'User clicked through to the author of the feed item', 2722 + }, 2723 + clickthroughReposter: { 2724 + type: 'token', 2725 + description: 'User clicked through to the reposter of the feed item', 2726 + }, 2727 + generatorViewerState: { 2728 + type: 'object', 2729 + properties: { 2730 + like: { 2731 + type: 'string', 2732 + format: 'at-uri', 2733 + }, 2734 + }, 2735 + }, 2736 + skeletonReasonRepost: { 2737 + type: 'object', 2738 + required: ['repost'], 2739 + properties: { 2740 + repost: { 2741 + type: 'string', 2742 + format: 'at-uri', 2743 + }, 2744 + }, 2745 + }, 2746 + contentModeUnspecified: { 2747 + type: 'token', 2748 + description: 'Declares the feed generator returns any types of posts.', 2749 + }, 2750 + }, 2751 + }, 2752 + AppBskyFeedPostgate: { 2753 + lexicon: 1, 2754 + id: 'app.bsky.feed.postgate', 2755 + defs: { 2756 + main: { 2757 + key: 'tid', 2758 + type: 'record', 2759 + record: { 2760 + type: 'object', 2761 + required: ['post', 'createdAt'], 2762 + properties: { 2763 + post: { 2764 + type: 'string', 2765 + format: 'at-uri', 2766 + description: 'Reference (AT-URI) to the post record.', 2767 + }, 2768 + createdAt: { 2769 + type: 'string', 2770 + format: 'datetime', 2771 + }, 2772 + embeddingRules: { 2773 + type: 'array', 2774 + items: { 2775 + refs: ['lex:app.bsky.feed.postgate#disableRule'], 2776 + type: 'union', 2777 + }, 2778 + maxLength: 5, 2779 + description: 2780 + '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.', 2781 + }, 2782 + detachedEmbeddingUris: { 2783 + type: 'array', 2784 + items: { 2785 + type: 'string', 2786 + format: 'at-uri', 2787 + }, 2788 + maxLength: 50, 2789 + description: 2790 + 'List of AT-URIs embedding this post that the author has detached from.', 2791 + }, 2792 + }, 2793 + }, 2794 + description: 2795 + '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.', 2796 + }, 2797 + disableRule: { 2798 + type: 'object', 2799 + properties: {}, 2800 + description: 'Disables embedding of this post.', 2801 + }, 2802 + }, 2803 + }, 2804 + AppBskyFeedThreadgate: { 2805 + lexicon: 1, 2806 + id: 'app.bsky.feed.threadgate', 2807 + defs: { 2808 + main: { 2809 + key: 'tid', 2810 + type: 'record', 2811 + record: { 2812 + type: 'object', 2813 + required: ['post', 'createdAt'], 2814 + properties: { 2815 + post: { 2816 + type: 'string', 2817 + format: 'at-uri', 2818 + description: 'Reference (AT-URI) to the post record.', 2819 + }, 2820 + allow: { 2821 + type: 'array', 2822 + items: { 2823 + refs: [ 2824 + 'lex:app.bsky.feed.threadgate#mentionRule', 2825 + 'lex:app.bsky.feed.threadgate#followerRule', 2826 + 'lex:app.bsky.feed.threadgate#followingRule', 2827 + 'lex:app.bsky.feed.threadgate#listRule', 2828 + ], 2829 + type: 'union', 2830 + }, 2831 + maxLength: 5, 2832 + description: 2833 + '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.', 2834 + }, 2835 + createdAt: { 2836 + type: 'string', 2837 + format: 'datetime', 2838 + }, 2839 + hiddenReplies: { 2840 + type: 'array', 2841 + items: { 2842 + type: 'string', 2843 + format: 'at-uri', 2844 + }, 2845 + maxLength: 50, 2846 + description: 'List of hidden reply URIs.', 2847 + }, 2848 + }, 2849 + }, 2850 + description: 2851 + "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.", 2852 + }, 2853 + listRule: { 2854 + type: 'object', 2855 + required: ['list'], 2856 + properties: { 2857 + list: { 2858 + type: 'string', 2859 + format: 'at-uri', 2860 + }, 2861 + }, 2862 + description: 'Allow replies from actors on a list.', 2863 + }, 2864 + mentionRule: { 2865 + type: 'object', 2866 + properties: {}, 2867 + description: 'Allow replies from actors mentioned in your post.', 2868 + }, 2869 + followerRule: { 2870 + type: 'object', 2871 + properties: {}, 2872 + description: 'Allow replies from actors who follow you.', 2873 + }, 2874 + followingRule: { 2875 + type: 'object', 2876 + properties: {}, 2877 + description: 'Allow replies from actors you follow.', 2878 + }, 2879 + }, 2880 + }, 2881 + AppBskyGraphDefs: { 2882 + lexicon: 1, 2883 + id: 'app.bsky.graph.defs', 2884 + defs: { 2885 + modlist: { 2886 + type: 'token', 2887 + description: 2888 + 'A list of actors to apply an aggregate moderation action (mute/block) on.', 2889 + }, 2890 + listView: { 2891 + type: 'object', 2892 + required: ['uri', 'cid', 'creator', 'name', 'purpose', 'indexedAt'], 2893 + properties: { 2894 + cid: { 2895 + type: 'string', 2896 + format: 'cid', 2897 + }, 2898 + uri: { 2899 + type: 'string', 2900 + format: 'at-uri', 2901 + }, 2902 + name: { 2903 + type: 'string', 2904 + maxLength: 64, 2905 + minLength: 1, 2906 + }, 2907 + avatar: { 2908 + type: 'string', 2909 + format: 'uri', 2910 + }, 2911 + labels: { 2912 + type: 'array', 2913 + items: { 2914 + ref: 'lex:com.atproto.label.defs#label', 2915 + type: 'ref', 2916 + }, 2917 + }, 2918 + viewer: { 2919 + ref: 'lex:app.bsky.graph.defs#listViewerState', 2920 + type: 'ref', 2921 + }, 2922 + creator: { 2923 + ref: 'lex:app.bsky.actor.defs#profileView', 2924 + type: 'ref', 2925 + }, 2926 + purpose: { 2927 + ref: 'lex:app.bsky.graph.defs#listPurpose', 2928 + type: 'ref', 2929 + }, 2930 + indexedAt: { 2931 + type: 'string', 2932 + format: 'datetime', 2933 + }, 2934 + description: { 2935 + type: 'string', 2936 + maxLength: 3000, 2937 + maxGraphemes: 300, 2938 + }, 2939 + listItemCount: { 2940 + type: 'integer', 2941 + minimum: 0, 2942 + }, 2943 + descriptionFacets: { 2944 + type: 'array', 2945 + items: { 2946 + ref: 'lex:app.bsky.richtext.facet', 2947 + type: 'ref', 2948 + }, 2949 + }, 2950 + }, 2951 + }, 2952 + curatelist: { 2953 + type: 'token', 2954 + description: 2955 + 'A list of actors used for curation purposes such as list feeds or interaction gating.', 2956 + }, 2957 + listPurpose: { 2958 + type: 'string', 2959 + knownValues: [ 2960 + 'app.bsky.graph.defs#modlist', 2961 + 'app.bsky.graph.defs#curatelist', 2962 + 'app.bsky.graph.defs#referencelist', 2963 + ], 2964 + }, 2965 + listItemView: { 2966 + type: 'object', 2967 + required: ['uri', 'subject'], 2968 + properties: { 2969 + uri: { 2970 + type: 'string', 2971 + format: 'at-uri', 2972 + }, 2973 + subject: { 2974 + ref: 'lex:app.bsky.actor.defs#profileView', 2975 + type: 'ref', 2976 + }, 2977 + }, 2978 + }, 2979 + relationship: { 2980 + type: 'object', 2981 + required: ['did'], 2982 + properties: { 2983 + did: { 2984 + type: 'string', 2985 + format: 'did', 2986 + }, 2987 + following: { 2988 + type: 'string', 2989 + format: 'at-uri', 2990 + description: 2991 + 'if the actor follows this DID, this is the AT-URI of the follow record', 2992 + }, 2993 + followedBy: { 2994 + type: 'string', 2995 + format: 'at-uri', 2996 + description: 2997 + 'if the actor is followed by this DID, contains the AT-URI of the follow record', 2998 + }, 2999 + }, 3000 + description: 3001 + 'lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object)', 3002 + }, 3003 + listViewBasic: { 3004 + type: 'object', 3005 + required: ['uri', 'cid', 'name', 'purpose'], 3006 + properties: { 3007 + cid: { 3008 + type: 'string', 3009 + format: 'cid', 3010 + }, 3011 + uri: { 3012 + type: 'string', 3013 + format: 'at-uri', 3014 + }, 3015 + name: { 3016 + type: 'string', 3017 + maxLength: 64, 3018 + minLength: 1, 3019 + }, 3020 + avatar: { 3021 + type: 'string', 3022 + format: 'uri', 3023 + }, 3024 + labels: { 3025 + type: 'array', 3026 + items: { 3027 + ref: 'lex:com.atproto.label.defs#label', 3028 + type: 'ref', 3029 + }, 3030 + }, 3031 + viewer: { 3032 + ref: 'lex:app.bsky.graph.defs#listViewerState', 3033 + type: 'ref', 3034 + }, 3035 + purpose: { 3036 + ref: 'lex:app.bsky.graph.defs#listPurpose', 3037 + type: 'ref', 3038 + }, 3039 + indexedAt: { 3040 + type: 'string', 3041 + format: 'datetime', 3042 + }, 3043 + listItemCount: { 3044 + type: 'integer', 3045 + minimum: 0, 3046 + }, 3047 + }, 3048 + }, 3049 + notFoundActor: { 3050 + type: 'object', 3051 + required: ['actor', 'notFound'], 3052 + properties: { 3053 + actor: { 3054 + type: 'string', 3055 + format: 'at-identifier', 3056 + }, 3057 + notFound: { 3058 + type: 'boolean', 3059 + const: true, 3060 + }, 3061 + }, 3062 + description: 'indicates that a handle or DID could not be resolved', 3063 + }, 3064 + referencelist: { 3065 + type: 'token', 3066 + description: 3067 + 'A list of actors used for only for reference purposes such as within a starter pack.', 3068 + }, 3069 + listViewerState: { 3070 + type: 'object', 3071 + properties: { 3072 + muted: { 3073 + type: 'boolean', 3074 + }, 3075 + blocked: { 3076 + type: 'string', 3077 + format: 'at-uri', 3078 + }, 3079 + }, 3080 + }, 3081 + starterPackView: { 3082 + type: 'object', 3083 + required: ['uri', 'cid', 'record', 'creator', 'indexedAt'], 3084 + properties: { 3085 + cid: { 3086 + type: 'string', 3087 + format: 'cid', 3088 + }, 3089 + uri: { 3090 + type: 'string', 3091 + format: 'at-uri', 3092 + }, 3093 + list: { 3094 + ref: 'lex:app.bsky.graph.defs#listViewBasic', 3095 + type: 'ref', 3096 + }, 3097 + feeds: { 3098 + type: 'array', 3099 + items: { 3100 + ref: 'lex:app.bsky.feed.defs#generatorView', 3101 + type: 'ref', 3102 + }, 3103 + maxLength: 3, 3104 + }, 3105 + labels: { 3106 + type: 'array', 3107 + items: { 3108 + ref: 'lex:com.atproto.label.defs#label', 3109 + type: 'ref', 3110 + }, 3111 + }, 3112 + record: { 3113 + type: 'unknown', 3114 + }, 3115 + creator: { 3116 + ref: 'lex:app.bsky.actor.defs#profileViewBasic', 3117 + type: 'ref', 3118 + }, 3119 + indexedAt: { 3120 + type: 'string', 3121 + format: 'datetime', 3122 + }, 3123 + joinedWeekCount: { 3124 + type: 'integer', 3125 + minimum: 0, 3126 + }, 3127 + listItemsSample: { 3128 + type: 'array', 3129 + items: { 3130 + ref: 'lex:app.bsky.graph.defs#listItemView', 3131 + type: 'ref', 3132 + }, 3133 + maxLength: 12, 3134 + }, 3135 + joinedAllTimeCount: { 3136 + type: 'integer', 3137 + minimum: 0, 3138 + }, 3139 + }, 3140 + }, 3141 + starterPackViewBasic: { 3142 + type: 'object', 3143 + required: ['uri', 'cid', 'record', 'creator', 'indexedAt'], 3144 + properties: { 3145 + cid: { 3146 + type: 'string', 3147 + format: 'cid', 3148 + }, 3149 + uri: { 3150 + type: 'string', 3151 + format: 'at-uri', 3152 + }, 3153 + labels: { 3154 + type: 'array', 3155 + items: { 3156 + ref: 'lex:com.atproto.label.defs#label', 3157 + type: 'ref', 3158 + }, 3159 + }, 3160 + record: { 3161 + type: 'unknown', 3162 + }, 3163 + creator: { 3164 + ref: 'lex:app.bsky.actor.defs#profileViewBasic', 3165 + type: 'ref', 3166 + }, 3167 + indexedAt: { 3168 + type: 'string', 3169 + format: 'datetime', 3170 + }, 3171 + listItemCount: { 3172 + type: 'integer', 3173 + minimum: 0, 3174 + }, 3175 + joinedWeekCount: { 3176 + type: 'integer', 3177 + minimum: 0, 3178 + }, 3179 + joinedAllTimeCount: { 3180 + type: 'integer', 3181 + minimum: 0, 3182 + }, 3183 + }, 3184 + }, 3185 + }, 3186 + }, 3187 + AppBskyLabelerDefs: { 3188 + lexicon: 1, 3189 + id: 'app.bsky.labeler.defs', 3190 + defs: { 3191 + labelerView: { 3192 + type: 'object', 3193 + required: ['uri', 'cid', 'creator', 'indexedAt'], 3194 + properties: { 3195 + cid: { 3196 + type: 'string', 3197 + format: 'cid', 3198 + }, 3199 + uri: { 3200 + type: 'string', 3201 + format: 'at-uri', 3202 + }, 3203 + labels: { 3204 + type: 'array', 3205 + items: { 3206 + ref: 'lex:com.atproto.label.defs#label', 3207 + type: 'ref', 3208 + }, 3209 + }, 3210 + viewer: { 3211 + ref: 'lex:app.bsky.labeler.defs#labelerViewerState', 3212 + type: 'ref', 3213 + }, 3214 + creator: { 3215 + ref: 'lex:app.bsky.actor.defs#profileView', 3216 + type: 'ref', 3217 + }, 3218 + indexedAt: { 3219 + type: 'string', 3220 + format: 'datetime', 3221 + }, 3222 + likeCount: { 3223 + type: 'integer', 3224 + minimum: 0, 3225 + }, 3226 + }, 3227 + }, 3228 + labelerPolicies: { 3229 + type: 'object', 3230 + required: ['labelValues'], 3231 + properties: { 3232 + labelValues: { 3233 + type: 'array', 3234 + items: { 3235 + ref: 'lex:com.atproto.label.defs#labelValue', 3236 + type: 'ref', 3237 + }, 3238 + description: 3239 + 'The label values which this labeler publishes. May include global or custom labels.', 3240 + }, 3241 + labelValueDefinitions: { 3242 + type: 'array', 3243 + items: { 3244 + ref: 'lex:com.atproto.label.defs#labelValueDefinition', 3245 + type: 'ref', 3246 + }, 3247 + description: 3248 + 'Label values created by this labeler and scoped exclusively to it. Labels defined here will override global label definitions for this labeler.', 3249 + }, 3250 + }, 3251 + }, 3252 + labelerViewerState: { 3253 + type: 'object', 3254 + properties: { 3255 + like: { 3256 + type: 'string', 3257 + format: 'at-uri', 3258 + }, 3259 + }, 3260 + }, 3261 + labelerViewDetailed: { 3262 + type: 'object', 3263 + required: ['uri', 'cid', 'creator', 'policies', 'indexedAt'], 3264 + properties: { 3265 + cid: { 3266 + type: 'string', 3267 + format: 'cid', 3268 + }, 3269 + uri: { 3270 + type: 'string', 3271 + format: 'at-uri', 3272 + }, 3273 + labels: { 3274 + type: 'array', 3275 + items: { 3276 + ref: 'lex:com.atproto.label.defs#label', 3277 + type: 'ref', 3278 + }, 3279 + }, 3280 + viewer: { 3281 + ref: 'lex:app.bsky.labeler.defs#labelerViewerState', 3282 + type: 'ref', 3283 + }, 3284 + creator: { 3285 + ref: 'lex:app.bsky.actor.defs#profileView', 3286 + type: 'ref', 3287 + }, 3288 + policies: { 3289 + ref: 'lex:app.bsky.labeler.defs#labelerPolicies', 3290 + type: 'ref', 3291 + }, 3292 + indexedAt: { 3293 + type: 'string', 3294 + format: 'datetime', 3295 + }, 3296 + likeCount: { 3297 + type: 'integer', 3298 + minimum: 0, 3299 + }, 3300 + }, 3301 + }, 3302 + }, 3303 + }, 3304 + AppBskyRichtextFacet: { 3305 + lexicon: 1, 3306 + id: 'app.bsky.richtext.facet', 3307 + defs: { 3308 + tag: { 3309 + type: 'object', 3310 + required: ['tag'], 3311 + properties: { 3312 + tag: { 3313 + type: 'string', 3314 + maxLength: 640, 3315 + maxGraphemes: 64, 3316 + }, 3317 + }, 3318 + description: 3319 + "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').", 3320 + }, 3321 + link: { 3322 + type: 'object', 3323 + required: ['uri'], 3324 + properties: { 3325 + uri: { 3326 + type: 'string', 3327 + format: 'uri', 3328 + }, 3329 + }, 3330 + description: 3331 + 'Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL.', 3332 + }, 3333 + main: { 3334 + type: 'object', 3335 + required: ['index', 'features'], 3336 + properties: { 3337 + index: { 3338 + ref: 'lex:app.bsky.richtext.facet#byteSlice', 3339 + type: 'ref', 3340 + }, 3341 + features: { 3342 + type: 'array', 3343 + items: { 3344 + refs: [ 3345 + 'lex:app.bsky.richtext.facet#mention', 3346 + 'lex:app.bsky.richtext.facet#link', 3347 + 'lex:app.bsky.richtext.facet#tag', 3348 + ], 3349 + type: 'union', 3350 + }, 3351 + }, 3352 + }, 3353 + description: 'Annotation of a sub-string within rich text.', 3354 + }, 3355 + mention: { 3356 + type: 'object', 3357 + required: ['did'], 3358 + properties: { 3359 + did: { 3360 + type: 'string', 3361 + format: 'did', 3362 + }, 3363 + }, 3364 + description: 3365 + "Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID.", 3366 + }, 3367 + byteSlice: { 3368 + type: 'object', 3369 + required: ['byteStart', 'byteEnd'], 3370 + properties: { 3371 + byteEnd: { 3372 + type: 'integer', 3373 + minimum: 0, 3374 + }, 3375 + byteStart: { 3376 + type: 'integer', 3377 + minimum: 0, 3378 + }, 3379 + }, 3380 + description: 3381 + '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.', 3382 + }, 3383 + }, 3384 + }, 3385 } as const satisfies Record<string, LexiconDoc> 3386 3387 export const schemas = Object.values(schemaDict) satisfies LexiconDoc[] ··· 3436 ComAtprotoRepoUploadBlob: 'com.atproto.repo.uploadBlob', 3437 AppBskyActorDefs: 'app.bsky.actor.defs', 3438 AppBskyActorProfile: 'app.bsky.actor.profile', 3439 + AppBskyEmbedDefs: 'app.bsky.embed.defs', 3440 + AppBskyEmbedExternal: 'app.bsky.embed.external', 3441 + AppBskyEmbedImages: 'app.bsky.embed.images', 3442 + AppBskyEmbedRecord: 'app.bsky.embed.record', 3443 + AppBskyEmbedRecordWithMedia: 'app.bsky.embed.recordWithMedia', 3444 + AppBskyEmbedVideo: 'app.bsky.embed.video', 3445 + AppBskyFeedDefs: 'app.bsky.feed.defs', 3446 + AppBskyFeedPostgate: 'app.bsky.feed.postgate', 3447 + AppBskyFeedThreadgate: 'app.bsky.feed.threadgate', 3448 + AppBskyGraphDefs: 'app.bsky.graph.defs', 3449 + AppBskyLabelerDefs: 'app.bsky.labeler.defs', 3450 + AppBskyRichtextFacet: 'app.bsky.richtext.facet', 3451 } as const
+496 -5
packages/lexicon/src/types/app/bsky/actor/defs.ts
··· 7 import { validate as _validate } from '../../../../lexicons' 8 import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util' 9 import type * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs.js' 10 11 const is$typed = _is$typed, 12 validate = _validate 13 const id = 'app.bsky.actor.defs' 14 15 export interface ProfileView { 16 $type?: 'app.bsky.actor.defs#profileView' 17 did: string 18 - handle: string 19 - displayName?: string 20 - description?: string 21 avatar?: string 22 - indexedAt?: string 23 createdAt?: string 24 - labels?: ComAtprotoLabelDefs.Label[] 25 } 26 27 const hashProfileView = 'profileView' ··· 33 export function validateProfileView<V>(v: V) { 34 return validate<ProfileView & V>(v, id, hashProfileView) 35 }
··· 7 import { validate as _validate } from '../../../../lexicons' 8 import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util' 9 import type * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs.js' 10 + import type * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef.js' 11 + import type * as AppBskyFeedPostgate from '../feed/postgate.js' 12 + import type * as AppBskyFeedThreadgate from '../feed/threadgate.js' 13 + import type * as AppBskyGraphDefs from '../graph/defs.js' 14 15 const is$typed = _is$typed, 16 validate = _validate 17 const id = 'app.bsky.actor.defs' 18 19 + /** A new user experiences (NUX) storage object */ 20 + export interface Nux { 21 + $type?: 'app.bsky.actor.defs#nux' 22 + id: string 23 + /** Arbitrary data for the NUX. The structure is defined by the NUX itself. Limited to 300 characters. */ 24 + data?: string 25 + completed: boolean 26 + /** The date and time at which the NUX will expire and should be considered completed. */ 27 + expiresAt?: string 28 + } 29 + 30 + const hashNux = 'nux' 31 + 32 + export function isNux<V>(v: V) { 33 + return is$typed(v, id, hashNux) 34 + } 35 + 36 + export function validateNux<V>(v: V) { 37 + return validate<Nux & V>(v, id, hashNux) 38 + } 39 + 40 + /** A word that the account owner has muted. */ 41 + export interface MutedWord { 42 + $type?: 'app.bsky.actor.defs#mutedWord' 43 + id?: string 44 + /** The muted word itself. */ 45 + value: string 46 + /** The intended targets of the muted word. */ 47 + targets: MutedWordTarget[] 48 + /** The date and time at which the muted word will expire and no longer be applied. */ 49 + expiresAt?: string 50 + /** Groups of users to apply the muted word to. If undefined, applies to all users. */ 51 + actorTarget: 'all' | 'exclude-following' | (string & {}) 52 + } 53 + 54 + const hashMutedWord = 'mutedWord' 55 + 56 + export function isMutedWord<V>(v: V) { 57 + return is$typed(v, id, hashMutedWord) 58 + } 59 + 60 + export function validateMutedWord<V>(v: V) { 61 + return validate<MutedWord & V>(v, id, hashMutedWord) 62 + } 63 + 64 + export interface SavedFeed { 65 + $type?: 'app.bsky.actor.defs#savedFeed' 66 + id: string 67 + type: 'feed' | 'list' | 'timeline' | (string & {}) 68 + value: string 69 + pinned: boolean 70 + } 71 + 72 + const hashSavedFeed = 'savedFeed' 73 + 74 + export function isSavedFeed<V>(v: V) { 75 + return is$typed(v, id, hashSavedFeed) 76 + } 77 + 78 + export function validateSavedFeed<V>(v: V) { 79 + return validate<SavedFeed & V>(v, id, hashSavedFeed) 80 + } 81 + 82 + export type Preferences = ( 83 + | $Typed<AdultContentPref> 84 + | $Typed<ContentLabelPref> 85 + | $Typed<SavedFeedsPref> 86 + | $Typed<SavedFeedsPrefV2> 87 + | $Typed<PersonalDetailsPref> 88 + | $Typed<FeedViewPref> 89 + | $Typed<ThreadViewPref> 90 + | $Typed<InterestsPref> 91 + | $Typed<MutedWordsPref> 92 + | $Typed<HiddenPostsPref> 93 + | $Typed<BskyAppStatePref> 94 + | $Typed<LabelersPref> 95 + | $Typed<PostInteractionSettingsPref> 96 + | { $type: string } 97 + )[] 98 + 99 export interface ProfileView { 100 $type?: 'app.bsky.actor.defs#profileView' 101 did: string 102 avatar?: string 103 + handle: string 104 + labels?: ComAtprotoLabelDefs.Label[] 105 + viewer?: ViewerState 106 createdAt?: string 107 + indexedAt?: string 108 + associated?: ProfileAssociated 109 + description?: string 110 + displayName?: string 111 } 112 113 const hashProfileView = 'profileView' ··· 119 export function validateProfileView<V>(v: V) { 120 return validate<ProfileView & V>(v, id, hashProfileView) 121 } 122 + 123 + /** Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests. */ 124 + export interface ViewerState { 125 + $type?: 'app.bsky.actor.defs#viewerState' 126 + muted?: boolean 127 + blocking?: string 128 + blockedBy?: boolean 129 + following?: string 130 + followedBy?: string 131 + mutedByList?: AppBskyGraphDefs.ListViewBasic 132 + blockingByList?: AppBskyGraphDefs.ListViewBasic 133 + knownFollowers?: KnownFollowers 134 + } 135 + 136 + const hashViewerState = 'viewerState' 137 + 138 + export function isViewerState<V>(v: V) { 139 + return is$typed(v, id, hashViewerState) 140 + } 141 + 142 + export function validateViewerState<V>(v: V) { 143 + return validate<ViewerState & V>(v, id, hashViewerState) 144 + } 145 + 146 + export interface FeedViewPref { 147 + $type?: 'app.bsky.actor.defs#feedViewPref' 148 + /** The URI of the feed, or an identifier which describes the feed. */ 149 + feed: string 150 + /** Hide replies in the feed. */ 151 + hideReplies?: boolean 152 + /** Hide reposts in the feed. */ 153 + hideReposts?: boolean 154 + /** Hide quote posts in the feed. */ 155 + hideQuotePosts?: boolean 156 + /** Hide replies in the feed if they do not have this number of likes. */ 157 + hideRepliesByLikeCount?: number 158 + /** Hide replies in the feed if they are not by followed users. */ 159 + hideRepliesByUnfollowed: boolean 160 + } 161 + 162 + const hashFeedViewPref = 'feedViewPref' 163 + 164 + export function isFeedViewPref<V>(v: V) { 165 + return is$typed(v, id, hashFeedViewPref) 166 + } 167 + 168 + export function validateFeedViewPref<V>(v: V) { 169 + return validate<FeedViewPref & V>(v, id, hashFeedViewPref) 170 + } 171 + 172 + export interface LabelersPref { 173 + $type?: 'app.bsky.actor.defs#labelersPref' 174 + labelers: LabelerPrefItem[] 175 + } 176 + 177 + const hashLabelersPref = 'labelersPref' 178 + 179 + export function isLabelersPref<V>(v: V) { 180 + return is$typed(v, id, hashLabelersPref) 181 + } 182 + 183 + export function validateLabelersPref<V>(v: V) { 184 + return validate<LabelersPref & V>(v, id, hashLabelersPref) 185 + } 186 + 187 + export interface InterestsPref { 188 + $type?: 'app.bsky.actor.defs#interestsPref' 189 + /** A list of tags which describe the account owner's interests gathered during onboarding. */ 190 + tags: string[] 191 + } 192 + 193 + const hashInterestsPref = 'interestsPref' 194 + 195 + export function isInterestsPref<V>(v: V) { 196 + return is$typed(v, id, hashInterestsPref) 197 + } 198 + 199 + export function validateInterestsPref<V>(v: V) { 200 + return validate<InterestsPref & V>(v, id, hashInterestsPref) 201 + } 202 + 203 + /** The subject's followers whom you also follow */ 204 + export interface KnownFollowers { 205 + $type?: 'app.bsky.actor.defs#knownFollowers' 206 + count: number 207 + followers: ProfileViewBasic[] 208 + } 209 + 210 + const hashKnownFollowers = 'knownFollowers' 211 + 212 + export function isKnownFollowers<V>(v: V) { 213 + return is$typed(v, id, hashKnownFollowers) 214 + } 215 + 216 + export function validateKnownFollowers<V>(v: V) { 217 + return validate<KnownFollowers & V>(v, id, hashKnownFollowers) 218 + } 219 + 220 + export interface MutedWordsPref { 221 + $type?: 'app.bsky.actor.defs#mutedWordsPref' 222 + /** A list of words the account owner has muted. */ 223 + items: MutedWord[] 224 + } 225 + 226 + const hashMutedWordsPref = 'mutedWordsPref' 227 + 228 + export function isMutedWordsPref<V>(v: V) { 229 + return is$typed(v, id, hashMutedWordsPref) 230 + } 231 + 232 + export function validateMutedWordsPref<V>(v: V) { 233 + return validate<MutedWordsPref & V>(v, id, hashMutedWordsPref) 234 + } 235 + 236 + export interface SavedFeedsPref { 237 + $type?: 'app.bsky.actor.defs#savedFeedsPref' 238 + saved: string[] 239 + pinned: string[] 240 + timelineIndex?: number 241 + } 242 + 243 + const hashSavedFeedsPref = 'savedFeedsPref' 244 + 245 + export function isSavedFeedsPref<V>(v: V) { 246 + return is$typed(v, id, hashSavedFeedsPref) 247 + } 248 + 249 + export function validateSavedFeedsPref<V>(v: V) { 250 + return validate<SavedFeedsPref & V>(v, id, hashSavedFeedsPref) 251 + } 252 + 253 + export interface ThreadViewPref { 254 + $type?: 'app.bsky.actor.defs#threadViewPref' 255 + /** Sorting mode for threads. */ 256 + sort?: 257 + | 'oldest' 258 + | 'newest' 259 + | 'most-likes' 260 + | 'random' 261 + | 'hotness' 262 + | (string & {}) 263 + /** Show followed users at the top of all replies. */ 264 + prioritizeFollowedUsers?: boolean 265 + } 266 + 267 + const hashThreadViewPref = 'threadViewPref' 268 + 269 + export function isThreadViewPref<V>(v: V) { 270 + return is$typed(v, id, hashThreadViewPref) 271 + } 272 + 273 + export function validateThreadViewPref<V>(v: V) { 274 + return validate<ThreadViewPref & V>(v, id, hashThreadViewPref) 275 + } 276 + 277 + export interface HiddenPostsPref { 278 + $type?: 'app.bsky.actor.defs#hiddenPostsPref' 279 + /** A list of URIs of posts the account owner has hidden. */ 280 + items: string[] 281 + } 282 + 283 + const hashHiddenPostsPref = 'hiddenPostsPref' 284 + 285 + export function isHiddenPostsPref<V>(v: V) { 286 + return is$typed(v, id, hashHiddenPostsPref) 287 + } 288 + 289 + export function validateHiddenPostsPref<V>(v: V) { 290 + return validate<HiddenPostsPref & V>(v, id, hashHiddenPostsPref) 291 + } 292 + 293 + export interface LabelerPrefItem { 294 + $type?: 'app.bsky.actor.defs#labelerPrefItem' 295 + did: string 296 + } 297 + 298 + const hashLabelerPrefItem = 'labelerPrefItem' 299 + 300 + export function isLabelerPrefItem<V>(v: V) { 301 + return is$typed(v, id, hashLabelerPrefItem) 302 + } 303 + 304 + export function validateLabelerPrefItem<V>(v: V) { 305 + return validate<LabelerPrefItem & V>(v, id, hashLabelerPrefItem) 306 + } 307 + 308 + export type MutedWordTarget = 'content' | 'tag' | (string & {}) 309 + 310 + export interface AdultContentPref { 311 + $type?: 'app.bsky.actor.defs#adultContentPref' 312 + enabled: boolean 313 + } 314 + 315 + const hashAdultContentPref = 'adultContentPref' 316 + 317 + export function isAdultContentPref<V>(v: V) { 318 + return is$typed(v, id, hashAdultContentPref) 319 + } 320 + 321 + export function validateAdultContentPref<V>(v: V) { 322 + return validate<AdultContentPref & V>(v, id, hashAdultContentPref) 323 + } 324 + 325 + /** A grab bag of state that's specific to the bsky.app program. Third-party apps shouldn't use this. */ 326 + export interface BskyAppStatePref { 327 + $type?: 'app.bsky.actor.defs#bskyAppStatePref' 328 + /** Storage for NUXs the user has encountered. */ 329 + nuxs?: Nux[] 330 + /** An array of tokens which identify nudges (modals, popups, tours, highlight dots) that should be shown to the user. */ 331 + queuedNudges?: string[] 332 + activeProgressGuide?: BskyAppProgressGuide 333 + } 334 + 335 + const hashBskyAppStatePref = 'bskyAppStatePref' 336 + 337 + export function isBskyAppStatePref<V>(v: V) { 338 + return is$typed(v, id, hashBskyAppStatePref) 339 + } 340 + 341 + export function validateBskyAppStatePref<V>(v: V) { 342 + return validate<BskyAppStatePref & V>(v, id, hashBskyAppStatePref) 343 + } 344 + 345 + export interface ContentLabelPref { 346 + $type?: 'app.bsky.actor.defs#contentLabelPref' 347 + label: string 348 + /** Which labeler does this preference apply to? If undefined, applies globally. */ 349 + labelerDid?: string 350 + visibility: 'ignore' | 'show' | 'warn' | 'hide' | (string & {}) 351 + } 352 + 353 + const hashContentLabelPref = 'contentLabelPref' 354 + 355 + export function isContentLabelPref<V>(v: V) { 356 + return is$typed(v, id, hashContentLabelPref) 357 + } 358 + 359 + export function validateContentLabelPref<V>(v: V) { 360 + return validate<ContentLabelPref & V>(v, id, hashContentLabelPref) 361 + } 362 + 363 + export interface ProfileViewBasic { 364 + $type?: 'app.bsky.actor.defs#profileViewBasic' 365 + did: string 366 + avatar?: string 367 + handle: string 368 + labels?: ComAtprotoLabelDefs.Label[] 369 + viewer?: ViewerState 370 + createdAt?: string 371 + associated?: ProfileAssociated 372 + displayName?: string 373 + } 374 + 375 + const hashProfileViewBasic = 'profileViewBasic' 376 + 377 + export function isProfileViewBasic<V>(v: V) { 378 + return is$typed(v, id, hashProfileViewBasic) 379 + } 380 + 381 + export function validateProfileViewBasic<V>(v: V) { 382 + return validate<ProfileViewBasic & V>(v, id, hashProfileViewBasic) 383 + } 384 + 385 + export interface SavedFeedsPrefV2 { 386 + $type?: 'app.bsky.actor.defs#savedFeedsPrefV2' 387 + items: SavedFeed[] 388 + } 389 + 390 + const hashSavedFeedsPrefV2 = 'savedFeedsPrefV2' 391 + 392 + export function isSavedFeedsPrefV2<V>(v: V) { 393 + return is$typed(v, id, hashSavedFeedsPrefV2) 394 + } 395 + 396 + export function validateSavedFeedsPrefV2<V>(v: V) { 397 + return validate<SavedFeedsPrefV2 & V>(v, id, hashSavedFeedsPrefV2) 398 + } 399 + 400 + export interface ProfileAssociated { 401 + $type?: 'app.bsky.actor.defs#profileAssociated' 402 + chat?: ProfileAssociatedChat 403 + lists?: number 404 + labeler?: boolean 405 + feedgens?: number 406 + starterPacks?: number 407 + } 408 + 409 + const hashProfileAssociated = 'profileAssociated' 410 + 411 + export function isProfileAssociated<V>(v: V) { 412 + return is$typed(v, id, hashProfileAssociated) 413 + } 414 + 415 + export function validateProfileAssociated<V>(v: V) { 416 + return validate<ProfileAssociated & V>(v, id, hashProfileAssociated) 417 + } 418 + 419 + export interface PersonalDetailsPref { 420 + $type?: 'app.bsky.actor.defs#personalDetailsPref' 421 + /** The birth date of account owner. */ 422 + birthDate?: string 423 + } 424 + 425 + const hashPersonalDetailsPref = 'personalDetailsPref' 426 + 427 + export function isPersonalDetailsPref<V>(v: V) { 428 + return is$typed(v, id, hashPersonalDetailsPref) 429 + } 430 + 431 + export function validatePersonalDetailsPref<V>(v: V) { 432 + return validate<PersonalDetailsPref & V>(v, id, hashPersonalDetailsPref) 433 + } 434 + 435 + export interface ProfileViewDetailed { 436 + $type?: 'app.bsky.actor.defs#profileViewDetailed' 437 + did: string 438 + avatar?: string 439 + banner?: string 440 + handle: string 441 + labels?: ComAtprotoLabelDefs.Label[] 442 + viewer?: ViewerState 443 + createdAt?: string 444 + indexedAt?: string 445 + associated?: ProfileAssociated 446 + pinnedPost?: ComAtprotoRepoStrongRef.Main 447 + postsCount?: number 448 + description?: string 449 + displayName?: string 450 + followsCount?: number 451 + followersCount?: number 452 + joinedViaStarterPack?: AppBskyGraphDefs.StarterPackViewBasic 453 + } 454 + 455 + const hashProfileViewDetailed = 'profileViewDetailed' 456 + 457 + export function isProfileViewDetailed<V>(v: V) { 458 + return is$typed(v, id, hashProfileViewDetailed) 459 + } 460 + 461 + export function validateProfileViewDetailed<V>(v: V) { 462 + return validate<ProfileViewDetailed & V>(v, id, hashProfileViewDetailed) 463 + } 464 + 465 + /** If set, an active progress guide. Once completed, can be set to undefined. Should have unspecced fields tracking progress. */ 466 + export interface BskyAppProgressGuide { 467 + $type?: 'app.bsky.actor.defs#bskyAppProgressGuide' 468 + guide: string 469 + } 470 + 471 + const hashBskyAppProgressGuide = 'bskyAppProgressGuide' 472 + 473 + export function isBskyAppProgressGuide<V>(v: V) { 474 + return is$typed(v, id, hashBskyAppProgressGuide) 475 + } 476 + 477 + export function validateBskyAppProgressGuide<V>(v: V) { 478 + return validate<BskyAppProgressGuide & V>(v, id, hashBskyAppProgressGuide) 479 + } 480 + 481 + export interface ProfileAssociatedChat { 482 + $type?: 'app.bsky.actor.defs#profileAssociatedChat' 483 + allowIncoming: 'all' | 'none' | 'following' | (string & {}) 484 + } 485 + 486 + const hashProfileAssociatedChat = 'profileAssociatedChat' 487 + 488 + export function isProfileAssociatedChat<V>(v: V) { 489 + return is$typed(v, id, hashProfileAssociatedChat) 490 + } 491 + 492 + export function validateProfileAssociatedChat<V>(v: V) { 493 + return validate<ProfileAssociatedChat & V>(v, id, hashProfileAssociatedChat) 494 + } 495 + 496 + /** 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. */ 497 + export interface PostInteractionSettingsPref { 498 + $type?: 'app.bsky.actor.defs#postInteractionSettingsPref' 499 + /** 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. */ 500 + threadgateAllowRules?: ( 501 + | $Typed<AppBskyFeedThreadgate.MentionRule> 502 + | $Typed<AppBskyFeedThreadgate.FollowerRule> 503 + | $Typed<AppBskyFeedThreadgate.FollowingRule> 504 + | $Typed<AppBskyFeedThreadgate.ListRule> 505 + | { $type: string } 506 + )[] 507 + /** 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. */ 508 + postgateEmbeddingRules?: ( 509 + | $Typed<AppBskyFeedPostgate.DisableRule> 510 + | { $type: string } 511 + )[] 512 + } 513 + 514 + const hashPostInteractionSettingsPref = 'postInteractionSettingsPref' 515 + 516 + export function isPostInteractionSettingsPref<V>(v: V) { 517 + return is$typed(v, id, hashPostInteractionSettingsPref) 518 + } 519 + 520 + export function validatePostInteractionSettingsPref<V>(v: V) { 521 + return validate<PostInteractionSettingsPref & V>( 522 + v, 523 + id, 524 + hashPostInteractionSettingsPref, 525 + ) 526 + }
+29
packages/lexicon/src/types/app/bsky/embed/defs.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { BlobRef, ValidationResult } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util' 9 + 10 + const is$typed = _is$typed, 11 + validate = _validate 12 + const id = 'app.bsky.embed.defs' 13 + 14 + /** width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit. */ 15 + export interface AspectRatio { 16 + $type?: 'app.bsky.embed.defs#aspectRatio' 17 + width: number 18 + height: number 19 + } 20 + 21 + const hashAspectRatio = 'aspectRatio' 22 + 23 + export function isAspectRatio<V>(v: V) { 24 + return is$typed(v, id, hashAspectRatio) 25 + } 26 + 27 + export function validateAspectRatio<V>(v: V) { 28 + return validate<AspectRatio & V>(v, id, hashAspectRatio) 29 + }
+79
packages/lexicon/src/types/app/bsky/embed/external.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { BlobRef, ValidationResult } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util' 9 + 10 + const is$typed = _is$typed, 11 + validate = _validate 12 + const id = 'app.bsky.embed.external' 13 + 14 + /** A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post). */ 15 + export interface Main { 16 + $type?: 'app.bsky.embed.external' 17 + external: External 18 + } 19 + 20 + const hashMain = 'main' 21 + 22 + export function isMain<V>(v: V) { 23 + return is$typed(v, id, hashMain) 24 + } 25 + 26 + export function validateMain<V>(v: V) { 27 + return validate<Main & V>(v, id, hashMain) 28 + } 29 + 30 + export interface View { 31 + $type?: 'app.bsky.embed.external#view' 32 + external: ViewExternal 33 + } 34 + 35 + const hashView = 'view' 36 + 37 + export function isView<V>(v: V) { 38 + return is$typed(v, id, hashView) 39 + } 40 + 41 + export function validateView<V>(v: V) { 42 + return validate<View & V>(v, id, hashView) 43 + } 44 + 45 + export interface External { 46 + $type?: 'app.bsky.embed.external#external' 47 + uri: string 48 + thumb?: BlobRef 49 + title: string 50 + description: string 51 + } 52 + 53 + const hashExternal = 'external' 54 + 55 + export function isExternal<V>(v: V) { 56 + return is$typed(v, id, hashExternal) 57 + } 58 + 59 + export function validateExternal<V>(v: V) { 60 + return validate<External & V>(v, id, hashExternal) 61 + } 62 + 63 + export interface ViewExternal { 64 + $type?: 'app.bsky.embed.external#viewExternal' 65 + uri: string 66 + thumb?: string 67 + title: string 68 + description: string 69 + } 70 + 71 + const hashViewExternal = 'viewExternal' 72 + 73 + export function isViewExternal<V>(v: V) { 74 + return is$typed(v, id, hashViewExternal) 75 + } 76 + 77 + export function validateViewExternal<V>(v: V) { 78 + return validate<ViewExternal & V>(v, id, hashViewExternal) 79 + }
+82
packages/lexicon/src/types/app/bsky/embed/images.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { BlobRef, ValidationResult } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util' 9 + import type * as AppBskyEmbedDefs from './defs.js' 10 + 11 + const is$typed = _is$typed, 12 + validate = _validate 13 + const id = 'app.bsky.embed.images' 14 + 15 + export interface Main { 16 + $type?: 'app.bsky.embed.images' 17 + images: Image[] 18 + } 19 + 20 + const hashMain = 'main' 21 + 22 + export function isMain<V>(v: V) { 23 + return is$typed(v, id, hashMain) 24 + } 25 + 26 + export function validateMain<V>(v: V) { 27 + return validate<Main & V>(v, id, hashMain) 28 + } 29 + 30 + export interface View { 31 + $type?: 'app.bsky.embed.images#view' 32 + images: ViewImage[] 33 + } 34 + 35 + const hashView = 'view' 36 + 37 + export function isView<V>(v: V) { 38 + return is$typed(v, id, hashView) 39 + } 40 + 41 + export function validateView<V>(v: V) { 42 + return validate<View & V>(v, id, hashView) 43 + } 44 + 45 + export interface Image { 46 + $type?: 'app.bsky.embed.images#image' 47 + /** Alt text description of the image, for accessibility. */ 48 + alt: string 49 + image: BlobRef 50 + aspectRatio?: AppBskyEmbedDefs.AspectRatio 51 + } 52 + 53 + const hashImage = 'image' 54 + 55 + export function isImage<V>(v: V) { 56 + return is$typed(v, id, hashImage) 57 + } 58 + 59 + export function validateImage<V>(v: V) { 60 + return validate<Image & V>(v, id, hashImage) 61 + } 62 + 63 + export interface ViewImage { 64 + $type?: 'app.bsky.embed.images#viewImage' 65 + /** Alt text description of the image, for accessibility. */ 66 + alt: string 67 + /** Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View. */ 68 + thumb: string 69 + /** 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. */ 70 + fullsize: string 71 + aspectRatio?: AppBskyEmbedDefs.AspectRatio 72 + } 73 + 74 + const hashViewImage = 'viewImage' 75 + 76 + export function isViewImage<V>(v: V) { 77 + return is$typed(v, id, hashViewImage) 78 + } 79 + 80 + export function validateViewImage<V>(v: V) { 81 + return validate<ViewImage & V>(v, id, hashViewImage) 82 + }
+143
packages/lexicon/src/types/app/bsky/embed/record.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { BlobRef, ValidationResult } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util' 9 + import type * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs.js' 10 + import type * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef.js' 11 + import type * as AppBskyActorDefs from '../actor/defs.js' 12 + import type * as AppBskyFeedDefs from '../feed/defs.js' 13 + import type * as AppBskyGraphDefs from '../graph/defs.js' 14 + import type * as AppBskyLabelerDefs from '../labeler/defs.js' 15 + import type * as AppBskyEmbedExternal from './external.js' 16 + import type * as AppBskyEmbedImages from './images.js' 17 + import type * as AppBskyEmbedRecordWithMedia from './recordWithMedia.js' 18 + import type * as AppBskyEmbedVideo from './video.js' 19 + 20 + const is$typed = _is$typed, 21 + validate = _validate 22 + const id = 'app.bsky.embed.record' 23 + 24 + export interface Main { 25 + $type?: 'app.bsky.embed.record' 26 + record: ComAtprotoRepoStrongRef.Main 27 + } 28 + 29 + const hashMain = 'main' 30 + 31 + export function isMain<V>(v: V) { 32 + return is$typed(v, id, hashMain) 33 + } 34 + 35 + export function validateMain<V>(v: V) { 36 + return validate<Main & V>(v, id, hashMain) 37 + } 38 + 39 + export interface View { 40 + $type?: 'app.bsky.embed.record#view' 41 + record: 42 + | $Typed<ViewRecord> 43 + | $Typed<ViewNotFound> 44 + | $Typed<ViewBlocked> 45 + | $Typed<ViewDetached> 46 + | $Typed<AppBskyFeedDefs.GeneratorView> 47 + | $Typed<AppBskyGraphDefs.ListView> 48 + | $Typed<AppBskyLabelerDefs.LabelerView> 49 + | $Typed<AppBskyGraphDefs.StarterPackViewBasic> 50 + | { $type: string } 51 + } 52 + 53 + const hashView = 'view' 54 + 55 + export function isView<V>(v: V) { 56 + return is$typed(v, id, hashView) 57 + } 58 + 59 + export function validateView<V>(v: V) { 60 + return validate<View & V>(v, id, hashView) 61 + } 62 + 63 + export interface ViewRecord { 64 + $type?: 'app.bsky.embed.record#viewRecord' 65 + cid: string 66 + uri: string 67 + /** The record data itself. */ 68 + value: { [_ in string]: unknown } 69 + author: AppBskyActorDefs.ProfileViewBasic 70 + embeds?: ( 71 + | $Typed<AppBskyEmbedImages.View> 72 + | $Typed<AppBskyEmbedVideo.View> 73 + | $Typed<AppBskyEmbedExternal.View> 74 + | $Typed<View> 75 + | $Typed<AppBskyEmbedRecordWithMedia.View> 76 + | { $type: string } 77 + )[] 78 + labels?: ComAtprotoLabelDefs.Label[] 79 + indexedAt: string 80 + likeCount?: number 81 + quoteCount?: number 82 + replyCount?: number 83 + repostCount?: number 84 + } 85 + 86 + const hashViewRecord = 'viewRecord' 87 + 88 + export function isViewRecord<V>(v: V) { 89 + return is$typed(v, id, hashViewRecord) 90 + } 91 + 92 + export function validateViewRecord<V>(v: V) { 93 + return validate<ViewRecord & V>(v, id, hashViewRecord) 94 + } 95 + 96 + export interface ViewBlocked { 97 + $type?: 'app.bsky.embed.record#viewBlocked' 98 + uri: string 99 + author: AppBskyFeedDefs.BlockedAuthor 100 + blocked: true 101 + } 102 + 103 + const hashViewBlocked = 'viewBlocked' 104 + 105 + export function isViewBlocked<V>(v: V) { 106 + return is$typed(v, id, hashViewBlocked) 107 + } 108 + 109 + export function validateViewBlocked<V>(v: V) { 110 + return validate<ViewBlocked & V>(v, id, hashViewBlocked) 111 + } 112 + 113 + export interface ViewDetached { 114 + $type?: 'app.bsky.embed.record#viewDetached' 115 + uri: string 116 + detached: true 117 + } 118 + 119 + const hashViewDetached = 'viewDetached' 120 + 121 + export function isViewDetached<V>(v: V) { 122 + return is$typed(v, id, hashViewDetached) 123 + } 124 + 125 + export function validateViewDetached<V>(v: V) { 126 + return validate<ViewDetached & V>(v, id, hashViewDetached) 127 + } 128 + 129 + export interface ViewNotFound { 130 + $type?: 'app.bsky.embed.record#viewNotFound' 131 + uri: string 132 + notFound: true 133 + } 134 + 135 + const hashViewNotFound = 'viewNotFound' 136 + 137 + export function isViewNotFound<V>(v: V) { 138 + return is$typed(v, id, hashViewNotFound) 139 + } 140 + 141 + export function validateViewNotFound<V>(v: V) { 142 + return validate<ViewNotFound & V>(v, id, hashViewNotFound) 143 + }
+56
packages/lexicon/src/types/app/bsky/embed/recordWithMedia.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { BlobRef, ValidationResult } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util' 9 + import type * as AppBskyEmbedExternal from './external.js' 10 + import type * as AppBskyEmbedImages from './images.js' 11 + import type * as AppBskyEmbedRecord from './record.js' 12 + import type * as AppBskyEmbedVideo from './video.js' 13 + 14 + const is$typed = _is$typed, 15 + validate = _validate 16 + const id = 'app.bsky.embed.recordWithMedia' 17 + 18 + export interface Main { 19 + $type?: 'app.bsky.embed.recordWithMedia' 20 + media: 21 + | $Typed<AppBskyEmbedImages.Main> 22 + | $Typed<AppBskyEmbedVideo.Main> 23 + | $Typed<AppBskyEmbedExternal.Main> 24 + | { $type: string } 25 + record: AppBskyEmbedRecord.Main 26 + } 27 + 28 + const hashMain = 'main' 29 + 30 + export function isMain<V>(v: V) { 31 + return is$typed(v, id, hashMain) 32 + } 33 + 34 + export function validateMain<V>(v: V) { 35 + return validate<Main & V>(v, id, hashMain) 36 + } 37 + 38 + export interface View { 39 + $type?: 'app.bsky.embed.recordWithMedia#view' 40 + media: 41 + | $Typed<AppBskyEmbedImages.View> 42 + | $Typed<AppBskyEmbedVideo.View> 43 + | $Typed<AppBskyEmbedExternal.View> 44 + | { $type: string } 45 + record: AppBskyEmbedRecord.View 46 + } 47 + 48 + const hashView = 'view' 49 + 50 + export function isView<V>(v: V) { 51 + return is$typed(v, id, hashView) 52 + } 53 + 54 + export function validateView<V>(v: V) { 55 + return validate<View & V>(v, id, hashView) 56 + }
+67
packages/lexicon/src/types/app/bsky/embed/video.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { BlobRef, ValidationResult } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util' 9 + import type * as AppBskyEmbedDefs from './defs.js' 10 + 11 + const is$typed = _is$typed, 12 + validate = _validate 13 + const id = 'app.bsky.embed.video' 14 + 15 + export interface Main { 16 + $type?: 'app.bsky.embed.video' 17 + /** Alt text description of the video, for accessibility. */ 18 + alt?: string 19 + video: BlobRef 20 + captions?: Caption[] 21 + aspectRatio?: AppBskyEmbedDefs.AspectRatio 22 + } 23 + 24 + const hashMain = 'main' 25 + 26 + export function isMain<V>(v: V) { 27 + return is$typed(v, id, hashMain) 28 + } 29 + 30 + export function validateMain<V>(v: V) { 31 + return validate<Main & V>(v, id, hashMain) 32 + } 33 + 34 + export interface View { 35 + $type?: 'app.bsky.embed.video#view' 36 + alt?: string 37 + cid: string 38 + playlist: string 39 + thumbnail?: string 40 + aspectRatio?: AppBskyEmbedDefs.AspectRatio 41 + } 42 + 43 + const hashView = 'view' 44 + 45 + export function isView<V>(v: V) { 46 + return is$typed(v, id, hashView) 47 + } 48 + 49 + export function validateView<V>(v: V) { 50 + return validate<View & V>(v, id, hashView) 51 + } 52 + 53 + export interface Caption { 54 + $type?: 'app.bsky.embed.video#caption' 55 + file: BlobRef 56 + lang: string 57 + } 58 + 59 + const hashCaption = 'caption' 60 + 61 + export function isCaption<V>(v: V) { 62 + return is$typed(v, id, hashCaption) 63 + } 64 + 65 + export function validateCaption<V>(v: V) { 66 + return validate<Caption & V>(v, id, hashCaption) 67 + }
+419
packages/lexicon/src/types/app/bsky/feed/defs.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { BlobRef, ValidationResult } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util' 9 + import type * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs.js' 10 + import type * as AppBskyActorDefs from '../actor/defs.js' 11 + import type * as AppBskyEmbedExternal from '../embed/external.js' 12 + import type * as AppBskyEmbedImages from '../embed/images.js' 13 + import type * as AppBskyEmbedRecord from '../embed/record.js' 14 + import type * as AppBskyEmbedRecordWithMedia from '../embed/recordWithMedia.js' 15 + import type * as AppBskyEmbedVideo from '../embed/video.js' 16 + import type * as AppBskyGraphDefs from '../graph/defs.js' 17 + import type * as AppBskyRichtextFacet from '../richtext/facet.js' 18 + 19 + const is$typed = _is$typed, 20 + validate = _validate 21 + const id = 'app.bsky.feed.defs' 22 + 23 + export interface PostView { 24 + $type?: 'app.bsky.feed.defs#postView' 25 + cid: string 26 + uri: string 27 + embed?: 28 + | $Typed<AppBskyEmbedImages.View> 29 + | $Typed<AppBskyEmbedVideo.View> 30 + | $Typed<AppBskyEmbedExternal.View> 31 + | $Typed<AppBskyEmbedRecord.View> 32 + | $Typed<AppBskyEmbedRecordWithMedia.View> 33 + | { $type: string } 34 + author: AppBskyActorDefs.ProfileViewBasic 35 + labels?: ComAtprotoLabelDefs.Label[] 36 + record: { [_ in string]: unknown } 37 + viewer?: ViewerState 38 + indexedAt: string 39 + likeCount?: number 40 + quoteCount?: number 41 + replyCount?: number 42 + threadgate?: ThreadgateView 43 + repostCount?: number 44 + } 45 + 46 + const hashPostView = 'postView' 47 + 48 + export function isPostView<V>(v: V) { 49 + return is$typed(v, id, hashPostView) 50 + } 51 + 52 + export function validatePostView<V>(v: V) { 53 + return validate<PostView & V>(v, id, hashPostView) 54 + } 55 + 56 + export interface ReplyRef { 57 + $type?: 'app.bsky.feed.defs#replyRef' 58 + root: 59 + | $Typed<PostView> 60 + | $Typed<NotFoundPost> 61 + | $Typed<BlockedPost> 62 + | { $type: string } 63 + parent: 64 + | $Typed<PostView> 65 + | $Typed<NotFoundPost> 66 + | $Typed<BlockedPost> 67 + | { $type: string } 68 + grandparentAuthor?: AppBskyActorDefs.ProfileViewBasic 69 + } 70 + 71 + const hashReplyRef = 'replyRef' 72 + 73 + export function isReplyRef<V>(v: V) { 74 + return is$typed(v, id, hashReplyRef) 75 + } 76 + 77 + export function validateReplyRef<V>(v: V) { 78 + return validate<ReplyRef & V>(v, id, hashReplyRef) 79 + } 80 + 81 + export interface ReasonPin { 82 + $type?: 'app.bsky.feed.defs#reasonPin' 83 + } 84 + 85 + const hashReasonPin = 'reasonPin' 86 + 87 + export function isReasonPin<V>(v: V) { 88 + return is$typed(v, id, hashReasonPin) 89 + } 90 + 91 + export function validateReasonPin<V>(v: V) { 92 + return validate<ReasonPin & V>(v, id, hashReasonPin) 93 + } 94 + 95 + export interface BlockedPost { 96 + $type?: 'app.bsky.feed.defs#blockedPost' 97 + uri: string 98 + author: BlockedAuthor 99 + blocked: true 100 + } 101 + 102 + const hashBlockedPost = 'blockedPost' 103 + 104 + export function isBlockedPost<V>(v: V) { 105 + return is$typed(v, id, hashBlockedPost) 106 + } 107 + 108 + export function validateBlockedPost<V>(v: V) { 109 + return validate<BlockedPost & V>(v, id, hashBlockedPost) 110 + } 111 + 112 + export interface Interaction { 113 + $type?: 'app.bsky.feed.defs#interaction' 114 + item?: string 115 + event?: 116 + | 'app.bsky.feed.defs#requestLess' 117 + | 'app.bsky.feed.defs#requestMore' 118 + | 'app.bsky.feed.defs#clickthroughItem' 119 + | 'app.bsky.feed.defs#clickthroughAuthor' 120 + | 'app.bsky.feed.defs#clickthroughReposter' 121 + | 'app.bsky.feed.defs#clickthroughEmbed' 122 + | 'app.bsky.feed.defs#interactionSeen' 123 + | 'app.bsky.feed.defs#interactionLike' 124 + | 'app.bsky.feed.defs#interactionRepost' 125 + | 'app.bsky.feed.defs#interactionReply' 126 + | 'app.bsky.feed.defs#interactionQuote' 127 + | 'app.bsky.feed.defs#interactionShare' 128 + | (string & {}) 129 + /** Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton. */ 130 + feedContext?: string 131 + } 132 + 133 + const hashInteraction = 'interaction' 134 + 135 + export function isInteraction<V>(v: V) { 136 + return is$typed(v, id, hashInteraction) 137 + } 138 + 139 + export function validateInteraction<V>(v: V) { 140 + return validate<Interaction & V>(v, id, hashInteraction) 141 + } 142 + 143 + /** Request that less content like the given feed item be shown in the feed */ 144 + export const REQUESTLESS = `${id}#requestLess` 145 + /** Request that more content like the given feed item be shown in the feed */ 146 + export const REQUESTMORE = `${id}#requestMore` 147 + 148 + /** Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests. */ 149 + export interface ViewerState { 150 + $type?: 'app.bsky.feed.defs#viewerState' 151 + like?: string 152 + pinned?: boolean 153 + repost?: string 154 + threadMuted?: boolean 155 + replyDisabled?: boolean 156 + embeddingDisabled?: boolean 157 + } 158 + 159 + const hashViewerState = 'viewerState' 160 + 161 + export function isViewerState<V>(v: V) { 162 + return is$typed(v, id, hashViewerState) 163 + } 164 + 165 + export function validateViewerState<V>(v: V) { 166 + return validate<ViewerState & V>(v, id, hashViewerState) 167 + } 168 + 169 + export interface FeedViewPost { 170 + $type?: 'app.bsky.feed.defs#feedViewPost' 171 + post: PostView 172 + reply?: ReplyRef 173 + reason?: $Typed<ReasonRepost> | $Typed<ReasonPin> | { $type: string } 174 + /** Context provided by feed generator that may be passed back alongside interactions. */ 175 + feedContext?: string 176 + } 177 + 178 + const hashFeedViewPost = 'feedViewPost' 179 + 180 + export function isFeedViewPost<V>(v: V) { 181 + return is$typed(v, id, hashFeedViewPost) 182 + } 183 + 184 + export function validateFeedViewPost<V>(v: V) { 185 + return validate<FeedViewPost & V>(v, id, hashFeedViewPost) 186 + } 187 + 188 + export interface NotFoundPost { 189 + $type?: 'app.bsky.feed.defs#notFoundPost' 190 + uri: string 191 + notFound: true 192 + } 193 + 194 + const hashNotFoundPost = 'notFoundPost' 195 + 196 + export function isNotFoundPost<V>(v: V) { 197 + return is$typed(v, id, hashNotFoundPost) 198 + } 199 + 200 + export function validateNotFoundPost<V>(v: V) { 201 + return validate<NotFoundPost & V>(v, id, hashNotFoundPost) 202 + } 203 + 204 + export interface ReasonRepost { 205 + $type?: 'app.bsky.feed.defs#reasonRepost' 206 + by: AppBskyActorDefs.ProfileViewBasic 207 + indexedAt: string 208 + } 209 + 210 + const hashReasonRepost = 'reasonRepost' 211 + 212 + export function isReasonRepost<V>(v: V) { 213 + return is$typed(v, id, hashReasonRepost) 214 + } 215 + 216 + export function validateReasonRepost<V>(v: V) { 217 + return validate<ReasonRepost & V>(v, id, hashReasonRepost) 218 + } 219 + 220 + export interface BlockedAuthor { 221 + $type?: 'app.bsky.feed.defs#blockedAuthor' 222 + did: string 223 + viewer?: AppBskyActorDefs.ViewerState 224 + } 225 + 226 + const hashBlockedAuthor = 'blockedAuthor' 227 + 228 + export function isBlockedAuthor<V>(v: V) { 229 + return is$typed(v, id, hashBlockedAuthor) 230 + } 231 + 232 + export function validateBlockedAuthor<V>(v: V) { 233 + return validate<BlockedAuthor & V>(v, id, hashBlockedAuthor) 234 + } 235 + 236 + export interface GeneratorView { 237 + $type?: 'app.bsky.feed.defs#generatorView' 238 + cid: string 239 + did: string 240 + uri: string 241 + avatar?: string 242 + labels?: ComAtprotoLabelDefs.Label[] 243 + viewer?: GeneratorViewerState 244 + creator: AppBskyActorDefs.ProfileView 245 + indexedAt: string 246 + likeCount?: number 247 + contentMode?: 248 + | 'app.bsky.feed.defs#contentModeUnspecified' 249 + | 'app.bsky.feed.defs#contentModeVideo' 250 + | (string & {}) 251 + description?: string 252 + displayName: string 253 + descriptionFacets?: AppBskyRichtextFacet.Main[] 254 + acceptsInteractions?: boolean 255 + } 256 + 257 + const hashGeneratorView = 'generatorView' 258 + 259 + export function isGeneratorView<V>(v: V) { 260 + return is$typed(v, id, hashGeneratorView) 261 + } 262 + 263 + export function validateGeneratorView<V>(v: V) { 264 + return validate<GeneratorView & V>(v, id, hashGeneratorView) 265 + } 266 + 267 + /** Metadata about this post within the context of the thread it is in. */ 268 + export interface ThreadContext { 269 + $type?: 'app.bsky.feed.defs#threadContext' 270 + rootAuthorLike?: string 271 + } 272 + 273 + const hashThreadContext = 'threadContext' 274 + 275 + export function isThreadContext<V>(v: V) { 276 + return is$typed(v, id, hashThreadContext) 277 + } 278 + 279 + export function validateThreadContext<V>(v: V) { 280 + return validate<ThreadContext & V>(v, id, hashThreadContext) 281 + } 282 + 283 + export interface ThreadViewPost { 284 + $type?: 'app.bsky.feed.defs#threadViewPost' 285 + post: PostView 286 + parent?: 287 + | $Typed<ThreadViewPost> 288 + | $Typed<NotFoundPost> 289 + | $Typed<BlockedPost> 290 + | { $type: string } 291 + replies?: ( 292 + | $Typed<ThreadViewPost> 293 + | $Typed<NotFoundPost> 294 + | $Typed<BlockedPost> 295 + | { $type: string } 296 + )[] 297 + threadContext?: ThreadContext 298 + } 299 + 300 + const hashThreadViewPost = 'threadViewPost' 301 + 302 + export function isThreadViewPost<V>(v: V) { 303 + return is$typed(v, id, hashThreadViewPost) 304 + } 305 + 306 + export function validateThreadViewPost<V>(v: V) { 307 + return validate<ThreadViewPost & V>(v, id, hashThreadViewPost) 308 + } 309 + 310 + export interface ThreadgateView { 311 + $type?: 'app.bsky.feed.defs#threadgateView' 312 + cid?: string 313 + uri?: string 314 + lists?: AppBskyGraphDefs.ListViewBasic[] 315 + record?: { [_ in string]: unknown } 316 + } 317 + 318 + const hashThreadgateView = 'threadgateView' 319 + 320 + export function isThreadgateView<V>(v: V) { 321 + return is$typed(v, id, hashThreadgateView) 322 + } 323 + 324 + export function validateThreadgateView<V>(v: V) { 325 + return validate<ThreadgateView & V>(v, id, hashThreadgateView) 326 + } 327 + 328 + /** User liked the feed item */ 329 + export const INTERACTIONLIKE = `${id}#interactionLike` 330 + /** Feed item was seen by user */ 331 + export const INTERACTIONSEEN = `${id}#interactionSeen` 332 + /** User clicked through to the feed item */ 333 + export const CLICKTHROUGHITEM = `${id}#clickthroughItem` 334 + /** Declares the feed generator returns posts containing app.bsky.embed.video embeds. */ 335 + export const CONTENTMODEVIDEO = `${id}#contentModeVideo` 336 + /** User quoted the feed item */ 337 + export const INTERACTIONQUOTE = `${id}#interactionQuote` 338 + /** User replied to the feed item */ 339 + export const INTERACTIONREPLY = `${id}#interactionReply` 340 + /** User shared the feed item */ 341 + export const INTERACTIONSHARE = `${id}#interactionShare` 342 + 343 + export interface SkeletonFeedPost { 344 + $type?: 'app.bsky.feed.defs#skeletonFeedPost' 345 + post: string 346 + reason?: 347 + | $Typed<SkeletonReasonRepost> 348 + | $Typed<SkeletonReasonPin> 349 + | { $type: string } 350 + /** Context that will be passed through to client and may be passed to feed generator back alongside interactions. */ 351 + feedContext?: string 352 + } 353 + 354 + const hashSkeletonFeedPost = 'skeletonFeedPost' 355 + 356 + export function isSkeletonFeedPost<V>(v: V) { 357 + return is$typed(v, id, hashSkeletonFeedPost) 358 + } 359 + 360 + export function validateSkeletonFeedPost<V>(v: V) { 361 + return validate<SkeletonFeedPost & V>(v, id, hashSkeletonFeedPost) 362 + } 363 + 364 + /** User clicked through to the embedded content of the feed item */ 365 + export const CLICKTHROUGHEMBED = `${id}#clickthroughEmbed` 366 + /** User reposted the feed item */ 367 + export const INTERACTIONREPOST = `${id}#interactionRepost` 368 + 369 + export interface SkeletonReasonPin { 370 + $type?: 'app.bsky.feed.defs#skeletonReasonPin' 371 + } 372 + 373 + const hashSkeletonReasonPin = 'skeletonReasonPin' 374 + 375 + export function isSkeletonReasonPin<V>(v: V) { 376 + return is$typed(v, id, hashSkeletonReasonPin) 377 + } 378 + 379 + export function validateSkeletonReasonPin<V>(v: V) { 380 + return validate<SkeletonReasonPin & V>(v, id, hashSkeletonReasonPin) 381 + } 382 + 383 + /** User clicked through to the author of the feed item */ 384 + export const CLICKTHROUGHAUTHOR = `${id}#clickthroughAuthor` 385 + /** User clicked through to the reposter of the feed item */ 386 + export const CLICKTHROUGHREPOSTER = `${id}#clickthroughReposter` 387 + 388 + export interface GeneratorViewerState { 389 + $type?: 'app.bsky.feed.defs#generatorViewerState' 390 + like?: string 391 + } 392 + 393 + const hashGeneratorViewerState = 'generatorViewerState' 394 + 395 + export function isGeneratorViewerState<V>(v: V) { 396 + return is$typed(v, id, hashGeneratorViewerState) 397 + } 398 + 399 + export function validateGeneratorViewerState<V>(v: V) { 400 + return validate<GeneratorViewerState & V>(v, id, hashGeneratorViewerState) 401 + } 402 + 403 + export interface SkeletonReasonRepost { 404 + $type?: 'app.bsky.feed.defs#skeletonReasonRepost' 405 + repost: string 406 + } 407 + 408 + const hashSkeletonReasonRepost = 'skeletonReasonRepost' 409 + 410 + export function isSkeletonReasonRepost<V>(v: V) { 411 + return is$typed(v, id, hashSkeletonReasonRepost) 412 + } 413 + 414 + export function validateSkeletonReasonRepost<V>(v: V) { 415 + return validate<SkeletonReasonRepost & V>(v, id, hashSkeletonReasonRepost) 416 + } 417 + 418 + /** Declares the feed generator returns any types of posts. */ 419 + export const CONTENTMODEUNSPECIFIED = `${id}#contentModeUnspecified`
+49
packages/lexicon/src/types/app/bsky/feed/postgate.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { BlobRef, ValidationResult } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util' 9 + 10 + const is$typed = _is$typed, 11 + validate = _validate 12 + const id = 'app.bsky.feed.postgate' 13 + 14 + export interface Record { 15 + $type: 'app.bsky.feed.postgate' 16 + /** Reference (AT-URI) to the post record. */ 17 + post: string 18 + createdAt: string 19 + /** 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. */ 20 + embeddingRules?: ($Typed<DisableRule> | { $type: string })[] 21 + /** List of AT-URIs embedding this post that the author has detached from. */ 22 + detachedEmbeddingUris?: string[] 23 + [k: string]: unknown 24 + } 25 + 26 + const hashRecord = 'main' 27 + 28 + export function isRecord<V>(v: V) { 29 + return is$typed(v, id, hashRecord) 30 + } 31 + 32 + export function validateRecord<V>(v: V) { 33 + return validate<Record & V>(v, id, hashRecord, true) 34 + } 35 + 36 + /** Disables embedding of this post. */ 37 + export interface DisableRule { 38 + $type?: 'app.bsky.feed.postgate#disableRule' 39 + } 40 + 41 + const hashDisableRule = 'disableRule' 42 + 43 + export function isDisableRule<V>(v: V) { 44 + return is$typed(v, id, hashDisableRule) 45 + } 46 + 47 + export function validateDisableRule<V>(v: V) { 48 + return validate<DisableRule & V>(v, id, hashDisableRule) 49 + }
+101
packages/lexicon/src/types/app/bsky/feed/threadgate.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { BlobRef, ValidationResult } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util' 9 + 10 + const is$typed = _is$typed, 11 + validate = _validate 12 + const id = 'app.bsky.feed.threadgate' 13 + 14 + export interface Record { 15 + $type: 'app.bsky.feed.threadgate' 16 + /** Reference (AT-URI) to the post record. */ 17 + post: string 18 + /** 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. */ 19 + allow?: ( 20 + | $Typed<MentionRule> 21 + | $Typed<FollowerRule> 22 + | $Typed<FollowingRule> 23 + | $Typed<ListRule> 24 + | { $type: string } 25 + )[] 26 + createdAt: string 27 + /** List of hidden reply URIs. */ 28 + hiddenReplies?: string[] 29 + [k: string]: unknown 30 + } 31 + 32 + const hashRecord = 'main' 33 + 34 + export function isRecord<V>(v: V) { 35 + return is$typed(v, id, hashRecord) 36 + } 37 + 38 + export function validateRecord<V>(v: V) { 39 + return validate<Record & V>(v, id, hashRecord, true) 40 + } 41 + 42 + /** Allow replies from actors on a list. */ 43 + export interface ListRule { 44 + $type?: 'app.bsky.feed.threadgate#listRule' 45 + list: string 46 + } 47 + 48 + const hashListRule = 'listRule' 49 + 50 + export function isListRule<V>(v: V) { 51 + return is$typed(v, id, hashListRule) 52 + } 53 + 54 + export function validateListRule<V>(v: V) { 55 + return validate<ListRule & V>(v, id, hashListRule) 56 + } 57 + 58 + /** Allow replies from actors mentioned in your post. */ 59 + export interface MentionRule { 60 + $type?: 'app.bsky.feed.threadgate#mentionRule' 61 + } 62 + 63 + const hashMentionRule = 'mentionRule' 64 + 65 + export function isMentionRule<V>(v: V) { 66 + return is$typed(v, id, hashMentionRule) 67 + } 68 + 69 + export function validateMentionRule<V>(v: V) { 70 + return validate<MentionRule & V>(v, id, hashMentionRule) 71 + } 72 + 73 + /** Allow replies from actors who follow you. */ 74 + export interface FollowerRule { 75 + $type?: 'app.bsky.feed.threadgate#followerRule' 76 + } 77 + 78 + const hashFollowerRule = 'followerRule' 79 + 80 + export function isFollowerRule<V>(v: V) { 81 + return is$typed(v, id, hashFollowerRule) 82 + } 83 + 84 + export function validateFollowerRule<V>(v: V) { 85 + return validate<FollowerRule & V>(v, id, hashFollowerRule) 86 + } 87 + 88 + /** Allow replies from actors you follow. */ 89 + export interface FollowingRule { 90 + $type?: 'app.bsky.feed.threadgate#followingRule' 91 + } 92 + 93 + const hashFollowingRule = 'followingRule' 94 + 95 + export function isFollowingRule<V>(v: V) { 96 + return is$typed(v, id, hashFollowingRule) 97 + } 98 + 99 + export function validateFollowingRule<V>(v: V) { 100 + return validate<FollowingRule & V>(v, id, hashFollowingRule) 101 + }
+196
packages/lexicon/src/types/app/bsky/graph/defs.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { BlobRef, ValidationResult } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util' 9 + import type * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs.js' 10 + import type * as AppBskyActorDefs from '../actor/defs.js' 11 + import type * as AppBskyFeedDefs from '../feed/defs.js' 12 + import type * as AppBskyRichtextFacet from '../richtext/facet.js' 13 + 14 + const is$typed = _is$typed, 15 + validate = _validate 16 + const id = 'app.bsky.graph.defs' 17 + /** A list of actors to apply an aggregate moderation action (mute/block) on. */ 18 + export const MODLIST = `${id}#modlist` 19 + 20 + export interface ListView { 21 + $type?: 'app.bsky.graph.defs#listView' 22 + cid: string 23 + uri: string 24 + name: string 25 + avatar?: string 26 + labels?: ComAtprotoLabelDefs.Label[] 27 + viewer?: ListViewerState 28 + creator: AppBskyActorDefs.ProfileView 29 + purpose: ListPurpose 30 + indexedAt: string 31 + description?: string 32 + listItemCount?: number 33 + descriptionFacets?: AppBskyRichtextFacet.Main[] 34 + } 35 + 36 + const hashListView = 'listView' 37 + 38 + export function isListView<V>(v: V) { 39 + return is$typed(v, id, hashListView) 40 + } 41 + 42 + export function validateListView<V>(v: V) { 43 + return validate<ListView & V>(v, id, hashListView) 44 + } 45 + 46 + /** A list of actors used for curation purposes such as list feeds or interaction gating. */ 47 + export const CURATELIST = `${id}#curatelist` 48 + 49 + export type ListPurpose = 50 + | 'app.bsky.graph.defs#modlist' 51 + | 'app.bsky.graph.defs#curatelist' 52 + | 'app.bsky.graph.defs#referencelist' 53 + | (string & {}) 54 + 55 + export interface ListItemView { 56 + $type?: 'app.bsky.graph.defs#listItemView' 57 + uri: string 58 + subject: AppBskyActorDefs.ProfileView 59 + } 60 + 61 + const hashListItemView = 'listItemView' 62 + 63 + export function isListItemView<V>(v: V) { 64 + return is$typed(v, id, hashListItemView) 65 + } 66 + 67 + export function validateListItemView<V>(v: V) { 68 + return validate<ListItemView & V>(v, id, hashListItemView) 69 + } 70 + 71 + /** lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object) */ 72 + export interface Relationship { 73 + $type?: 'app.bsky.graph.defs#relationship' 74 + did: string 75 + /** if the actor follows this DID, this is the AT-URI of the follow record */ 76 + following?: string 77 + /** if the actor is followed by this DID, contains the AT-URI of the follow record */ 78 + followedBy?: string 79 + } 80 + 81 + const hashRelationship = 'relationship' 82 + 83 + export function isRelationship<V>(v: V) { 84 + return is$typed(v, id, hashRelationship) 85 + } 86 + 87 + export function validateRelationship<V>(v: V) { 88 + return validate<Relationship & V>(v, id, hashRelationship) 89 + } 90 + 91 + export interface ListViewBasic { 92 + $type?: 'app.bsky.graph.defs#listViewBasic' 93 + cid: string 94 + uri: string 95 + name: string 96 + avatar?: string 97 + labels?: ComAtprotoLabelDefs.Label[] 98 + viewer?: ListViewerState 99 + purpose: ListPurpose 100 + indexedAt?: string 101 + listItemCount?: number 102 + } 103 + 104 + const hashListViewBasic = 'listViewBasic' 105 + 106 + export function isListViewBasic<V>(v: V) { 107 + return is$typed(v, id, hashListViewBasic) 108 + } 109 + 110 + export function validateListViewBasic<V>(v: V) { 111 + return validate<ListViewBasic & V>(v, id, hashListViewBasic) 112 + } 113 + 114 + /** indicates that a handle or DID could not be resolved */ 115 + export interface NotFoundActor { 116 + $type?: 'app.bsky.graph.defs#notFoundActor' 117 + actor: string 118 + notFound: true 119 + } 120 + 121 + const hashNotFoundActor = 'notFoundActor' 122 + 123 + export function isNotFoundActor<V>(v: V) { 124 + return is$typed(v, id, hashNotFoundActor) 125 + } 126 + 127 + export function validateNotFoundActor<V>(v: V) { 128 + return validate<NotFoundActor & V>(v, id, hashNotFoundActor) 129 + } 130 + 131 + /** A list of actors used for only for reference purposes such as within a starter pack. */ 132 + export const REFERENCELIST = `${id}#referencelist` 133 + 134 + export interface ListViewerState { 135 + $type?: 'app.bsky.graph.defs#listViewerState' 136 + muted?: boolean 137 + blocked?: string 138 + } 139 + 140 + const hashListViewerState = 'listViewerState' 141 + 142 + export function isListViewerState<V>(v: V) { 143 + return is$typed(v, id, hashListViewerState) 144 + } 145 + 146 + export function validateListViewerState<V>(v: V) { 147 + return validate<ListViewerState & V>(v, id, hashListViewerState) 148 + } 149 + 150 + export interface StarterPackView { 151 + $type?: 'app.bsky.graph.defs#starterPackView' 152 + cid: string 153 + uri: string 154 + list?: ListViewBasic 155 + feeds?: AppBskyFeedDefs.GeneratorView[] 156 + labels?: ComAtprotoLabelDefs.Label[] 157 + record: { [_ in string]: unknown } 158 + creator: AppBskyActorDefs.ProfileViewBasic 159 + indexedAt: string 160 + joinedWeekCount?: number 161 + listItemsSample?: ListItemView[] 162 + joinedAllTimeCount?: number 163 + } 164 + 165 + const hashStarterPackView = 'starterPackView' 166 + 167 + export function isStarterPackView<V>(v: V) { 168 + return is$typed(v, id, hashStarterPackView) 169 + } 170 + 171 + export function validateStarterPackView<V>(v: V) { 172 + return validate<StarterPackView & V>(v, id, hashStarterPackView) 173 + } 174 + 175 + export interface StarterPackViewBasic { 176 + $type?: 'app.bsky.graph.defs#starterPackViewBasic' 177 + cid: string 178 + uri: string 179 + labels?: ComAtprotoLabelDefs.Label[] 180 + record: { [_ in string]: unknown } 181 + creator: AppBskyActorDefs.ProfileViewBasic 182 + indexedAt: string 183 + listItemCount?: number 184 + joinedWeekCount?: number 185 + joinedAllTimeCount?: number 186 + } 187 + 188 + const hashStarterPackViewBasic = 'starterPackViewBasic' 189 + 190 + export function isStarterPackViewBasic<V>(v: V) { 191 + return is$typed(v, id, hashStarterPackViewBasic) 192 + } 193 + 194 + export function validateStarterPackViewBasic<V>(v: V) { 195 + return validate<StarterPackViewBasic & V>(v, id, hashStarterPackViewBasic) 196 + }
+90
packages/lexicon/src/types/app/bsky/labeler/defs.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { BlobRef, ValidationResult } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util' 9 + import type * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs.js' 10 + import type * as AppBskyActorDefs from '../actor/defs.js' 11 + 12 + const is$typed = _is$typed, 13 + validate = _validate 14 + const id = 'app.bsky.labeler.defs' 15 + 16 + export interface LabelerView { 17 + $type?: 'app.bsky.labeler.defs#labelerView' 18 + cid: string 19 + uri: string 20 + labels?: ComAtprotoLabelDefs.Label[] 21 + viewer?: LabelerViewerState 22 + creator: AppBskyActorDefs.ProfileView 23 + indexedAt: string 24 + likeCount?: number 25 + } 26 + 27 + const hashLabelerView = 'labelerView' 28 + 29 + export function isLabelerView<V>(v: V) { 30 + return is$typed(v, id, hashLabelerView) 31 + } 32 + 33 + export function validateLabelerView<V>(v: V) { 34 + return validate<LabelerView & V>(v, id, hashLabelerView) 35 + } 36 + 37 + export interface LabelerPolicies { 38 + $type?: 'app.bsky.labeler.defs#labelerPolicies' 39 + /** The label values which this labeler publishes. May include global or custom labels. */ 40 + labelValues: ComAtprotoLabelDefs.LabelValue[] 41 + /** Label values created by this labeler and scoped exclusively to it. Labels defined here will override global label definitions for this labeler. */ 42 + labelValueDefinitions?: ComAtprotoLabelDefs.LabelValueDefinition[] 43 + } 44 + 45 + const hashLabelerPolicies = 'labelerPolicies' 46 + 47 + export function isLabelerPolicies<V>(v: V) { 48 + return is$typed(v, id, hashLabelerPolicies) 49 + } 50 + 51 + export function validateLabelerPolicies<V>(v: V) { 52 + return validate<LabelerPolicies & V>(v, id, hashLabelerPolicies) 53 + } 54 + 55 + export interface LabelerViewerState { 56 + $type?: 'app.bsky.labeler.defs#labelerViewerState' 57 + like?: string 58 + } 59 + 60 + const hashLabelerViewerState = 'labelerViewerState' 61 + 62 + export function isLabelerViewerState<V>(v: V) { 63 + return is$typed(v, id, hashLabelerViewerState) 64 + } 65 + 66 + export function validateLabelerViewerState<V>(v: V) { 67 + return validate<LabelerViewerState & V>(v, id, hashLabelerViewerState) 68 + } 69 + 70 + export interface LabelerViewDetailed { 71 + $type?: 'app.bsky.labeler.defs#labelerViewDetailed' 72 + cid: string 73 + uri: string 74 + labels?: ComAtprotoLabelDefs.Label[] 75 + viewer?: LabelerViewerState 76 + creator: AppBskyActorDefs.ProfileView 77 + policies: LabelerPolicies 78 + indexedAt: string 79 + likeCount?: number 80 + } 81 + 82 + const hashLabelerViewDetailed = 'labelerViewDetailed' 83 + 84 + export function isLabelerViewDetailed<V>(v: V) { 85 + return is$typed(v, id, hashLabelerViewDetailed) 86 + } 87 + 88 + export function validateLabelerViewDetailed<V>(v: V) { 89 + return validate<LabelerViewDetailed & V>(v, id, hashLabelerViewDetailed) 90 + }
+94
packages/lexicon/src/types/app/bsky/richtext/facet.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { BlobRef, ValidationResult } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util' 9 + 10 + const is$typed = _is$typed, 11 + validate = _validate 12 + const id = 'app.bsky.richtext.facet' 13 + 14 + /** 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'). */ 15 + export interface Tag { 16 + $type?: 'app.bsky.richtext.facet#tag' 17 + tag: string 18 + } 19 + 20 + const hashTag = 'tag' 21 + 22 + export function isTag<V>(v: V) { 23 + return is$typed(v, id, hashTag) 24 + } 25 + 26 + export function validateTag<V>(v: V) { 27 + return validate<Tag & V>(v, id, hashTag) 28 + } 29 + 30 + /** Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL. */ 31 + export interface Link { 32 + $type?: 'app.bsky.richtext.facet#link' 33 + uri: string 34 + } 35 + 36 + const hashLink = 'link' 37 + 38 + export function isLink<V>(v: V) { 39 + return is$typed(v, id, hashLink) 40 + } 41 + 42 + export function validateLink<V>(v: V) { 43 + return validate<Link & V>(v, id, hashLink) 44 + } 45 + 46 + /** Annotation of a sub-string within rich text. */ 47 + export interface Main { 48 + $type?: 'app.bsky.richtext.facet' 49 + index: ByteSlice 50 + features: ($Typed<Mention> | $Typed<Link> | $Typed<Tag> | { $type: string })[] 51 + } 52 + 53 + const hashMain = 'main' 54 + 55 + export function isMain<V>(v: V) { 56 + return is$typed(v, id, hashMain) 57 + } 58 + 59 + export function validateMain<V>(v: V) { 60 + return validate<Main & V>(v, id, hashMain) 61 + } 62 + 63 + /** Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID. */ 64 + export interface Mention { 65 + $type?: 'app.bsky.richtext.facet#mention' 66 + did: string 67 + } 68 + 69 + const hashMention = 'mention' 70 + 71 + export function isMention<V>(v: V) { 72 + return is$typed(v, id, hashMention) 73 + } 74 + 75 + export function validateMention<V>(v: V) { 76 + return validate<Mention & V>(v, id, hashMention) 77 + } 78 + 79 + /** 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. */ 80 + export interface ByteSlice { 81 + $type?: 'app.bsky.richtext.facet#byteSlice' 82 + byteEnd: number 83 + byteStart: number 84 + } 85 + 86 + const hashByteSlice = 'byteSlice' 87 + 88 + export function isByteSlice<V>(v: V) { 89 + return is$typed(v, id, hashByteSlice) 90 + } 91 + 92 + export function validateByteSlice<V>(v: V) { 93 + return validate<ByteSlice & V>(v, id, hashByteSlice) 94 + }
+47 -47
packages/lexicon/src/types/com/atproto/label/defs.ts
··· 14 /** Metadata tag on an atproto resource (eg, repo or record). */ 15 export interface Label { 16 $type?: 'com.atproto.label.defs#label' 17 - /** The AT Protocol version of the label object. */ 18 - ver?: number 19 - /** DID of the actor who created this label. */ 20 - src: string 21 - /** AT URI of the record, repository (account), or other resource that this label applies to. */ 22 - uri: string 23 /** Optionally, CID specifying the specific version of 'uri' resource this label applies to. */ 24 cid?: string 25 - /** The short string name of the value or type of this label. */ 26 - val: string 27 - /** If true, this is a negation label, overwriting a previous label. */ 28 - neg?: boolean 29 /** Timestamp when this label was created. */ 30 cts: string 31 /** Timestamp at which this label expires (no longer applies). */ 32 exp?: string 33 /** Signature of dag-cbor encoded label. */ 34 sig?: Uint8Array 35 } 36 37 const hashLabel = 'label' ··· 44 return validate<Label & V>(v, id, hashLabel) 45 } 46 47 - /** Metadata tags on an atproto record, published by the author within the record. */ 48 - export interface SelfLabels { 49 - $type?: 'com.atproto.label.defs#selfLabels' 50 - values: SelfLabel[] 51 - } 52 - 53 - const hashSelfLabels = 'selfLabels' 54 - 55 - export function isSelfLabels<V>(v: V) { 56 - return is$typed(v, id, hashSelfLabels) 57 - } 58 - 59 - export function validateSelfLabels<V>(v: V) { 60 - return validate<SelfLabels & V>(v, id, hashSelfLabels) 61 - } 62 - 63 /** Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel. */ 64 export interface SelfLabel { 65 $type?: 'com.atproto.label.defs#selfLabel' ··· 77 return validate<SelfLabel & V>(v, id, hashSelfLabel) 78 } 79 80 /** Declares a label value and its expected interpretations and behaviors. */ 81 export interface LabelValueDefinition { 82 $type?: 'com.atproto.label.defs#labelValueDefinition' 83 - /** The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+). */ 84 - identifier: string 85 - /** How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing. */ 86 - severity: 'inform' | 'alert' | 'none' | (string & {}) 87 /** 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. */ 88 blurs: 'content' | 'media' | 'none' | (string & {}) 89 - /** The default setting for this label. */ 90 - defaultSetting: 'ignore' | 'warn' | 'hide' | (string & {}) 91 /** Does the user need to have adult content enabled in order to configure this label? */ 92 adultOnly?: boolean 93 - locales: LabelValueDefinitionStrings[] 94 } 95 96 const hashLabelValueDefinition = 'labelValueDefinition' ··· 127 hashLabelValueDefinitionStrings, 128 ) 129 } 130 - 131 - export type LabelValue = 132 - | '!hide' 133 - | '!no-promote' 134 - | '!warn' 135 - | '!no-unauthenticated' 136 - | 'dmca-violation' 137 - | 'doxxing' 138 - | 'porn' 139 - | 'sexual' 140 - | 'nudity' 141 - | 'nsfl' 142 - | 'gore' 143 - | (string & {})
··· 14 /** Metadata tag on an atproto resource (eg, repo or record). */ 15 export interface Label { 16 $type?: 'com.atproto.label.defs#label' 17 /** Optionally, CID specifying the specific version of 'uri' resource this label applies to. */ 18 cid?: string 19 /** Timestamp when this label was created. */ 20 cts: string 21 /** Timestamp at which this label expires (no longer applies). */ 22 exp?: string 23 + /** If true, this is a negation label, overwriting a previous label. */ 24 + neg?: boolean 25 /** Signature of dag-cbor encoded label. */ 26 sig?: Uint8Array 27 + /** DID of the actor who created this label. */ 28 + src: string 29 + /** AT URI of the record, repository (account), or other resource that this label applies to. */ 30 + uri: string 31 + /** The short string name of the value or type of this label. */ 32 + val: string 33 + /** The AT Protocol version of the label object. */ 34 + ver?: number 35 } 36 37 const hashLabel = 'label' ··· 44 return validate<Label & V>(v, id, hashLabel) 45 } 46 47 /** Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel. */ 48 export interface SelfLabel { 49 $type?: 'com.atproto.label.defs#selfLabel' ··· 61 return validate<SelfLabel & V>(v, id, hashSelfLabel) 62 } 63 64 + export type LabelValue = 65 + | '!hide' 66 + | '!no-promote' 67 + | '!warn' 68 + | '!no-unauthenticated' 69 + | 'dmca-violation' 70 + | 'doxxing' 71 + | 'porn' 72 + | 'sexual' 73 + | 'nudity' 74 + | 'nsfl' 75 + | 'gore' 76 + | (string & {}) 77 + 78 + /** Metadata tags on an atproto record, published by the author within the record. */ 79 + export interface SelfLabels { 80 + $type?: 'com.atproto.label.defs#selfLabels' 81 + values: SelfLabel[] 82 + } 83 + 84 + const hashSelfLabels = 'selfLabels' 85 + 86 + export function isSelfLabels<V>(v: V) { 87 + return is$typed(v, id, hashSelfLabels) 88 + } 89 + 90 + export function validateSelfLabels<V>(v: V) { 91 + return validate<SelfLabels & V>(v, id, hashSelfLabels) 92 + } 93 + 94 /** Declares a label value and its expected interpretations and behaviors. */ 95 export interface LabelValueDefinition { 96 $type?: 'com.atproto.label.defs#labelValueDefinition' 97 /** 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. */ 98 blurs: 'content' | 'media' | 'none' | (string & {}) 99 + locales: LabelValueDefinitionStrings[] 100 + /** How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing. */ 101 + severity: 'inform' | 'alert' | 'none' | (string & {}) 102 /** Does the user need to have adult content enabled in order to configure this label? */ 103 adultOnly?: boolean 104 + /** The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+). */ 105 + identifier: string 106 + /** The default setting for this label. */ 107 + defaultSetting: 'ignore' | 'warn' | 'hide' | (string & {}) 108 } 109 110 const hashLabelValueDefinition = 'labelValueDefinition' ··· 141 hashLabelValueDefinitionStrings, 142 ) 143 }
+36 -36
packages/lexicon/src/types/com/atproto/repo/applyWrites.ts
··· 18 export interface InputSchema { 19 /** The handle or DID of the repo (aka, current account). */ 20 repo: string 21 /** Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons. */ 22 validate?: boolean 23 - writes: ($Typed<Create> | $Typed<Update> | $Typed<Delete>)[] 24 /** If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations. */ 25 swapCommit?: string 26 } ··· 64 /** Operation which creates a new record. */ 65 export interface Create { 66 $type?: 'com.atproto.repo.applyWrites#create' 67 - collection: string 68 /** NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility. */ 69 rkey?: string 70 value: { [_ in string]: unknown } 71 } 72 73 const hashCreate = 'create' ··· 80 return validate<Create & V>(v, id, hashCreate) 81 } 82 83 /** Operation which updates an existing record. */ 84 export interface Update { 85 $type?: 'com.atproto.repo.applyWrites#update' 86 - collection: string 87 rkey: string 88 value: { [_ in string]: unknown } 89 } 90 91 const hashUpdate = 'update' ··· 98 return validate<Update & V>(v, id, hashUpdate) 99 } 100 101 - /** Operation which deletes an existing record. */ 102 - export interface Delete { 103 - $type?: 'com.atproto.repo.applyWrites#delete' 104 - collection: string 105 - rkey: string 106 - } 107 - 108 - const hashDelete = 'delete' 109 - 110 - export function isDelete<V>(v: V) { 111 - return is$typed(v, id, hashDelete) 112 - } 113 - 114 - export function validateDelete<V>(v: V) { 115 - return validate<Delete & V>(v, id, hashDelete) 116 - } 117 - 118 export interface CreateResult { 119 $type?: 'com.atproto.repo.applyWrites#createResult' 120 uri: string 121 - cid: string 122 validationStatus?: 'valid' | 'unknown' | (string & {}) 123 } 124 ··· 132 return validate<CreateResult & V>(v, id, hashCreateResult) 133 } 134 135 export interface UpdateResult { 136 $type?: 'com.atproto.repo.applyWrites#updateResult' 137 - uri: string 138 cid: string 139 validationStatus?: 'valid' | 'unknown' | (string & {}) 140 } 141 ··· 148 export function validateUpdateResult<V>(v: V) { 149 return validate<UpdateResult & V>(v, id, hashUpdateResult) 150 } 151 - 152 - export interface DeleteResult { 153 - $type?: 'com.atproto.repo.applyWrites#deleteResult' 154 - } 155 - 156 - const hashDeleteResult = 'deleteResult' 157 - 158 - export function isDeleteResult<V>(v: V) { 159 - return is$typed(v, id, hashDeleteResult) 160 - } 161 - 162 - export function validateDeleteResult<V>(v: V) { 163 - return validate<DeleteResult & V>(v, id, hashDeleteResult) 164 - }
··· 18 export interface InputSchema { 19 /** The handle or DID of the repo (aka, current account). */ 20 repo: string 21 + writes: ($Typed<Create> | $Typed<Update> | $Typed<Delete>)[] 22 /** Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons. */ 23 validate?: boolean 24 /** If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations. */ 25 swapCommit?: string 26 } ··· 64 /** Operation which creates a new record. */ 65 export interface Create { 66 $type?: 'com.atproto.repo.applyWrites#create' 67 /** NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility. */ 68 rkey?: string 69 value: { [_ in string]: unknown } 70 + collection: string 71 } 72 73 const hashCreate = 'create' ··· 80 return validate<Create & V>(v, id, hashCreate) 81 } 82 83 + /** Operation which deletes an existing record. */ 84 + export interface Delete { 85 + $type?: 'com.atproto.repo.applyWrites#delete' 86 + rkey: string 87 + collection: string 88 + } 89 + 90 + const hashDelete = 'delete' 91 + 92 + export function isDelete<V>(v: V) { 93 + return is$typed(v, id, hashDelete) 94 + } 95 + 96 + export function validateDelete<V>(v: V) { 97 + return validate<Delete & V>(v, id, hashDelete) 98 + } 99 + 100 /** Operation which updates an existing record. */ 101 export interface Update { 102 $type?: 'com.atproto.repo.applyWrites#update' 103 rkey: string 104 value: { [_ in string]: unknown } 105 + collection: string 106 } 107 108 const hashUpdate = 'update' ··· 115 return validate<Update & V>(v, id, hashUpdate) 116 } 117 118 export interface CreateResult { 119 $type?: 'com.atproto.repo.applyWrites#createResult' 120 + cid: string 121 uri: string 122 validationStatus?: 'valid' | 'unknown' | (string & {}) 123 } 124 ··· 132 return validate<CreateResult & V>(v, id, hashCreateResult) 133 } 134 135 + export interface DeleteResult { 136 + $type?: 'com.atproto.repo.applyWrites#deleteResult' 137 + } 138 + 139 + const hashDeleteResult = 'deleteResult' 140 + 141 + export function isDeleteResult<V>(v: V) { 142 + return is$typed(v, id, hashDeleteResult) 143 + } 144 + 145 + export function validateDeleteResult<V>(v: V) { 146 + return validate<DeleteResult & V>(v, id, hashDeleteResult) 147 + } 148 + 149 export interface UpdateResult { 150 $type?: 'com.atproto.repo.applyWrites#updateResult' 151 cid: string 152 + uri: string 153 validationStatus?: 'valid' | 'unknown' | (string & {}) 154 } 155 ··· 162 export function validateUpdateResult<V>(v: V) { 163 return validate<UpdateResult & V>(v, id, hashUpdateResult) 164 }
+5 -5
packages/lexicon/src/types/com/atproto/repo/createRecord.ts
··· 18 export interface InputSchema { 19 /** The handle or DID of the repo (aka, current account). */ 20 repo: string 21 - /** The NSID of the record collection. */ 22 - collection: string 23 /** The Record Key. */ 24 rkey?: string 25 - /** Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons. */ 26 - validate?: boolean 27 /** The record itself. Must contain a $type field. */ 28 record: { [_ in string]: unknown } 29 /** Compare and swap with the previous commit by CID. */ 30 swapCommit?: string 31 } 32 33 export interface OutputSchema { 34 - uri: string 35 cid: string 36 commit?: ComAtprotoRepoDefs.CommitMeta 37 validationStatus?: 'valid' | 'unknown' | (string & {}) 38 }
··· 18 export interface InputSchema { 19 /** The handle or DID of the repo (aka, current account). */ 20 repo: string 21 /** The Record Key. */ 22 rkey?: string 23 /** The record itself. Must contain a $type field. */ 24 record: { [_ in string]: unknown } 25 + /** Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons. */ 26 + validate?: boolean 27 + /** The NSID of the record collection. */ 28 + collection: string 29 /** Compare and swap with the previous commit by CID. */ 30 swapCommit?: string 31 } 32 33 export interface OutputSchema { 34 cid: string 35 + uri: string 36 commit?: ComAtprotoRepoDefs.CommitMeta 37 validationStatus?: 'valid' | 'unknown' | (string & {}) 38 }
+4 -4
packages/lexicon/src/types/com/atproto/repo/deleteRecord.ts
··· 18 export interface InputSchema { 19 /** The handle or DID of the repo (aka, current account). */ 20 repo: string 21 - /** The NSID of the record collection. */ 22 - collection: string 23 /** The Record Key. */ 24 rkey: string 25 - /** Compare and swap with the previous record by CID. */ 26 - swapRecord?: string 27 /** Compare and swap with the previous commit by CID. */ 28 swapCommit?: string 29 } 30 31 export interface OutputSchema {
··· 18 export interface InputSchema { 19 /** The handle or DID of the repo (aka, current account). */ 20 repo: string 21 /** The Record Key. */ 22 rkey: string 23 + /** The NSID of the record collection. */ 24 + collection: string 25 /** Compare and swap with the previous commit by CID. */ 26 swapCommit?: string 27 + /** Compare and swap with the previous record by CID. */ 28 + swapRecord?: string 29 } 30 31 export interface OutputSchema {
+1 -1
packages/lexicon/src/types/com/atproto/repo/describeRepo.ts
··· 20 export type InputSchema = undefined 21 22 export interface OutputSchema { 23 - handle: string 24 did: string 25 /** The complete DID document for this account. */ 26 didDoc: { [_ in string]: unknown } 27 /** List of all the collections (NSIDs) for which this repo contains at least one record. */ 28 collections: string[] 29 /** Indicates if handle is currently valid (resolves bi-directionally) */
··· 20 export type InputSchema = undefined 21 22 export interface OutputSchema { 23 did: string 24 /** The complete DID document for this account. */ 25 didDoc: { [_ in string]: unknown } 26 + handle: string 27 /** List of all the collections (NSIDs) for which this repo contains at least one record. */ 28 collections: string[] 29 /** Indicates if handle is currently valid (resolves bi-directionally) */
+5 -5
packages/lexicon/src/types/com/atproto/repo/getRecord.ts
··· 13 const id = 'com.atproto.repo.getRecord' 14 15 export interface QueryParams { 16 /** The handle or DID of the repo. */ 17 repo: string 18 - /** The NSID of the record collection. */ 19 - collection: string 20 /** The Record Key. */ 21 rkey: string 22 - /** The CID of the version of the record. If not specified, then return the most recent version. */ 23 - cid?: string 24 } 25 26 export type InputSchema = undefined 27 28 export interface OutputSchema { 29 - uri: string 30 cid?: string 31 value: { [_ in string]: unknown } 32 } 33
··· 13 const id = 'com.atproto.repo.getRecord' 14 15 export interface QueryParams { 16 + /** The CID of the version of the record. If not specified, then return the most recent version. */ 17 + cid?: string 18 /** The handle or DID of the repo. */ 19 repo: string 20 /** The Record Key. */ 21 rkey: string 22 + /** The NSID of the record collection. */ 23 + collection: string 24 } 25 26 export type InputSchema = undefined 27 28 export interface OutputSchema { 29 cid?: string 30 + uri: string 31 value: { [_ in string]: unknown } 32 } 33
+1 -1
packages/lexicon/src/types/com/atproto/repo/listMissingBlobs.ts
··· 20 export type InputSchema = undefined 21 22 export interface OutputSchema { 23 - cursor?: string 24 blobs: RecordBlob[] 25 } 26 27 export interface CallOptions {
··· 20 export type InputSchema = undefined 21 22 export interface OutputSchema { 23 blobs: RecordBlob[] 24 + cursor?: string 25 } 26 27 export interface CallOptions {
+3 -7
packages/lexicon/src/types/com/atproto/repo/listRecords.ts
··· 15 export interface QueryParams { 16 /** The handle or DID of the repo. */ 17 repo: string 18 - /** The NSID of the record type. */ 19 - collection: string 20 /** The number of records to return. */ 21 limit?: number 22 cursor?: string 23 - /** DEPRECATED: The lowest sort-ordered rkey to start from (exclusive) */ 24 - rkeyStart?: string 25 - /** DEPRECATED: The highest sort-ordered rkey to stop at (exclusive) */ 26 - rkeyEnd?: string 27 /** Flag to reverse the order of the returned records. */ 28 reverse?: boolean 29 } 30 31 export type InputSchema = undefined ··· 52 53 export interface Record { 54 $type?: 'com.atproto.repo.listRecords#record' 55 - uri: string 56 cid: string 57 value: { [_ in string]: unknown } 58 } 59
··· 15 export interface QueryParams { 16 /** The handle or DID of the repo. */ 17 repo: string 18 /** The number of records to return. */ 19 limit?: number 20 cursor?: string 21 /** Flag to reverse the order of the returned records. */ 22 reverse?: boolean 23 + /** The NSID of the record type. */ 24 + collection: string 25 } 26 27 export type InputSchema = undefined ··· 48 49 export interface Record { 50 $type?: 'com.atproto.repo.listRecords#record' 51 cid: string 52 + uri: string 53 value: { [_ in string]: unknown } 54 } 55
+7 -7
packages/lexicon/src/types/com/atproto/repo/putRecord.ts
··· 18 export interface InputSchema { 19 /** The handle or DID of the repo (aka, current account). */ 20 repo: string 21 - /** The NSID of the record collection. */ 22 - collection: string 23 /** The Record Key. */ 24 rkey: string 25 - /** Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons. */ 26 - validate?: boolean 27 /** The record to write. */ 28 record: { [_ in string]: unknown } 29 - /** Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation */ 30 - swapRecord?: string | null 31 /** Compare and swap with the previous commit by CID. */ 32 swapCommit?: string 33 } 34 35 export interface OutputSchema { 36 - uri: string 37 cid: string 38 commit?: ComAtprotoRepoDefs.CommitMeta 39 validationStatus?: 'valid' | 'unknown' | (string & {}) 40 }
··· 18 export interface InputSchema { 19 /** The handle or DID of the repo (aka, current account). */ 20 repo: string 21 /** The Record Key. */ 22 rkey: string 23 /** The record to write. */ 24 record: { [_ in string]: unknown } 25 + /** Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons. */ 26 + validate?: boolean 27 + /** The NSID of the record collection. */ 28 + collection: string 29 /** Compare and swap with the previous commit by CID. */ 30 swapCommit?: string 31 + /** Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation */ 32 + swapRecord?: string | null 33 } 34 35 export interface OutputSchema { 36 cid: string 37 + uri: string 38 commit?: ComAtprotoRepoDefs.CommitMeta 39 validationStatus?: 'valid' | 'unknown' | (string & {}) 40 }
+1 -1
packages/lexicon/src/types/com/atproto/repo/strongRef.ts
··· 13 14 export interface Main { 15 $type?: 'com.atproto.repo.strongRef' 16 - uri: string 17 cid: string 18 } 19 20 const hashMain = 'main'
··· 13 14 export interface Main { 15 $type?: 'com.atproto.repo.strongRef' 16 cid: string 17 + uri: string 18 } 19 20 const hashMain = 'main'
+82
pnpm-lock.yaml
··· 7 importers: 8 9 .: 10 devDependencies: 11 '@atproto/lex-cli': 12 specifier: ^0.6.1 ··· 735 736 '@jridgewell/trace-mapping@0.3.9': 737 resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 738 739 '@noble/curves@1.8.1': 740 resolution: {integrity: sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==} ··· 2473 source-map@0.8.0-beta.0: 2474 resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 2475 engines: {node: '>= 8'} 2476 2477 split2@4.2.0: 2478 resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} ··· 3411 dependencies: 3412 '@jridgewell/resolve-uri': 3.1.2 3413 '@jridgewell/sourcemap-codec': 1.5.0 3414 3415 '@noble/curves@1.8.1': 3416 dependencies:
··· 7 importers: 8 9 .: 10 + dependencies: 11 + '@lpm/cli': 12 + specifier: jsr:0.3.0-rc.1 13 + version: '@jsr/lpm__cli@0.3.0-rc.1' 14 devDependencies: 15 '@atproto/lex-cli': 16 specifier: ^0.6.1 ··· 739 740 '@jridgewell/trace-mapping@0.3.9': 741 resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 742 + 743 + '@jsr/cliffy__command@1.0.0-rc.7': 744 + resolution: {integrity: sha512-cLmigvj0IJxMoj0FI/gAanoJNyHYW/SeaDdJUCTmu/10l4og4lrHUwbpkKISnnj2pimFQb4zVJ2hnlFrYEjjQw==, tarball: https://npm.jsr.io/~/11/@jsr/cliffy__command/1.0.0-rc.7.tgz} 745 + 746 + '@jsr/cliffy__flags@1.0.0-rc.7': 747 + resolution: {integrity: sha512-D0EsYP7QrzZBiap/qri//AixzFqBKPxzui99Z/Yz77DxcNthd6kafhOVr9xIBuORICzeydjNY2hVk5J7fV0iRQ==, tarball: https://npm.jsr.io/~/11/@jsr/cliffy__flags/1.0.0-rc.7.tgz} 748 + 749 + '@jsr/cliffy__internal@1.0.0-rc.7': 750 + resolution: {integrity: sha512-ncrAaxh4UUeV7RDvkhyGQuxU5JtSZVz38Db97mms+iNIwogM4qn9P8kNR1V6avMo+TjGMD5Z1DMkJGO9o6aHyw==, tarball: https://npm.jsr.io/~/11/@jsr/cliffy__internal/1.0.0-rc.7.tgz} 751 + 752 + '@jsr/cliffy__table@1.0.0-rc.7': 753 + resolution: {integrity: sha512-EWM/Jfrit8W1qxo+0c/bRqaod8jxMotOiY08Nlx2/FVMK52hJoAtzC0RhpdyXzxVuBpqIdv6UeDDbTAIRiYGug==, tarball: https://npm.jsr.io/~/11/@jsr/cliffy__table/1.0.0-rc.7.tgz} 754 + 755 + '@jsr/lpm__cli@0.3.0-rc.1': 756 + resolution: {integrity: sha512-KDrXMXAtcBkx6OneTUTbL9bfLxrNRnUvi6j7hJLrhby7dLjip3BCYFc6NQOgbYQELnT//a2pc+xeRY5b+l5KoA==, tarball: https://npm.jsr.io/~/11/@jsr/lpm__cli/0.3.0-rc.1.tgz} 757 + 758 + '@jsr/lpm__core@0.3.1-rc.1': 759 + resolution: {integrity: sha512-VHuP2IhoBQIeptRYhj2EQwcv2NDwqry8ZeKEla+SSMyKLCa0cnqdorkQgvQa86K9e6s5Znk7aEDeyAdNczTUZQ==, tarball: https://npm.jsr.io/~/11/@jsr/lpm__core/0.3.1-rc.1.tgz} 760 + 761 + '@jsr/std__fmt@1.0.8': 762 + resolution: {integrity: sha512-miZHzj9OgjuajrcMKzpqNVwFb9O71UHZzV/FHVq0E0Uwmv/1JqXgmXAoBNPrn+MP0fHT3mMgaZ6XvQO7dam67Q==, tarball: https://npm.jsr.io/~/11/@jsr/std__fmt/1.0.8.tgz} 763 + 764 + '@jsr/std__regexp@1.0.1': 765 + resolution: {integrity: sha512-AnGeP//DHpPvhCWjI5dR4o013JhCQioD8yMF8drD7PWb0X4kvmO35hbZi+NZhfSolz4Ts2cpPzJY+DUpi2XE9A==, tarball: https://npm.jsr.io/~/11/@jsr/std__regexp/1.0.1.tgz} 766 + 767 + '@jsr/std__text@1.0.16': 768 + resolution: {integrity: sha512-UawOIn+Vu0BBusfOpToMXHISa/z8vDUKxXntQGVM5w6e9W1XkFzylnbc0cWWa9f0dESlxDyjvReHzPNM86hYlA==, tarball: https://npm.jsr.io/~/11/@jsr/std__text/1.0.16.tgz} 769 + 770 + '@needle-di/core@0.11.2': 771 + resolution: {integrity: sha512-QwvlSTfpobIGGEmO/iMjMcL9lPf53cSV8mQVTzMGO4IkcyOQEK3nn7d6fkUOaaefwyiO4HGLEMl5VDaslnUuUg==} 772 773 '@noble/curves@1.8.1': 774 resolution: {integrity: sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==} ··· 2507 source-map@0.8.0-beta.0: 2508 resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 2509 engines: {node: '>= 8'} 2510 + deprecated: The work that was done in this beta branch won't be included in future versions 2511 2512 split2@4.2.0: 2513 resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} ··· 3446 dependencies: 3447 '@jridgewell/resolve-uri': 3.1.2 3448 '@jridgewell/sourcemap-codec': 1.5.0 3449 + 3450 + '@jsr/cliffy__command@1.0.0-rc.7': 3451 + dependencies: 3452 + '@jsr/cliffy__flags': 1.0.0-rc.7 3453 + '@jsr/cliffy__internal': 1.0.0-rc.7 3454 + '@jsr/cliffy__table': 1.0.0-rc.7 3455 + '@jsr/std__fmt': 1.0.8 3456 + '@jsr/std__text': 1.0.16 3457 + 3458 + '@jsr/cliffy__flags@1.0.0-rc.7': 3459 + dependencies: 3460 + '@jsr/std__text': 1.0.16 3461 + 3462 + '@jsr/cliffy__internal@1.0.0-rc.7': 3463 + dependencies: 3464 + '@jsr/std__fmt': 1.0.8 3465 + 3466 + '@jsr/cliffy__table@1.0.0-rc.7': 3467 + dependencies: 3468 + '@jsr/std__fmt': 1.0.8 3469 + 3470 + '@jsr/lpm__cli@0.3.0-rc.1': 3471 + dependencies: 3472 + '@atproto/syntax': 0.3.3 3473 + '@jsr/cliffy__command': 1.0.0-rc.7 3474 + '@jsr/lpm__core': 0.3.1-rc.1 3475 + '@jsr/std__fmt': 1.0.8 3476 + '@needle-di/core': 0.11.2 3477 + zod: 3.24.2 3478 + 3479 + '@jsr/lpm__core@0.3.1-rc.1': 3480 + dependencies: 3481 + '@atproto/api': 0.14.7 3482 + '@atproto/identity': 0.4.6 3483 + '@atproto/lexicon': 0.4.7 3484 + '@atproto/syntax': 0.3.3 3485 + '@needle-di/core': 0.11.2 3486 + 3487 + '@jsr/std__fmt@1.0.8': {} 3488 + 3489 + '@jsr/std__regexp@1.0.1': {} 3490 + 3491 + '@jsr/std__text@1.0.16': 3492 + dependencies: 3493 + '@jsr/std__regexp': 1.0.1 3494 + 3495 + '@needle-di/core@0.11.2': {} 3496 3497 '@noble/curves@1.8.1': 3498 dependencies: