grain.social is a photo sharing platform built on atproto.

fix: notifications service codegen command, use --lexicon-dir arg in cli

+2130 -4089
+258
notifications/__generated__/index.ts
··· 11 import { schemas } from './lexicons.ts' 12 import * as SocialGrainNotificationUpdateSeen from './types/social/grain/notification/updateSeen.ts' 13 import * as SocialGrainNotificationGetNotifications from './types/social/grain/notification/getNotifications.ts' 14 import * as SocialGrainGalleryGetGalleryThread from './types/social/grain/gallery/getGalleryThread.ts' 15 import * as SocialGrainGalleryGetActorGalleries from './types/social/grain/gallery/getActorGalleries.ts' 16 import * as SocialGrainGalleryGetGallery from './types/social/grain/gallery/getGallery.ts' 17 import * as SocialGrainGraphGetFollowers from './types/social/grain/graph/getFollowers.ts' 18 import * as SocialGrainGraphGetFollows from './types/social/grain/graph/getFollows.ts' 19 import * as SocialGrainFeedGetTimeline from './types/social/grain/feed/getTimeline.ts' 20 import * as SocialGrainActorGetProfile from './types/social/grain/actor/getProfile.ts' 21 import * as SocialGrainActorSearchActors from './types/social/grain/actor/searchActors.ts' 22 import * as SocialGrainActorGetActorFavs from './types/social/grain/actor/getActorFavs.ts' 23 import * as SocialGrainPhotoGetActorPhotos from './types/social/grain/photo/getActorPhotos.ts' 24 25 export const APP_BSKY_GRAPH = { ··· 192 export class SocialGrainNS { 193 _server: Server 194 notification: SocialGrainNotificationNS 195 gallery: SocialGrainGalleryNS 196 graph: SocialGrainGraphNS 197 labeler: SocialGrainLabelerNS 198 feed: SocialGrainFeedNS 199 actor: SocialGrainActorNS ··· 202 constructor(server: Server) { 203 this._server = server 204 this.notification = new SocialGrainNotificationNS(server) 205 this.gallery = new SocialGrainGalleryNS(server) 206 this.graph = new SocialGrainGraphNS(server) 207 this.labeler = new SocialGrainLabelerNS(server) 208 this.feed = new SocialGrainFeedNS(server) 209 this.actor = new SocialGrainActorNS(server) ··· 241 } 242 } 243 244 export class SocialGrainGalleryNS { 245 _server: Server 246 ··· 248 this._server = server 249 } 250 251 getGalleryThread<AV extends AuthVerifier>( 252 cfg: ConfigOf< 253 AV, ··· 289 this._server = server 290 } 291 292 getFollowers<AV extends AuthVerifier>( 293 cfg: ConfigOf< 294 AV, ··· 312 } 313 } 314 315 export class SocialGrainLabelerNS { 316 _server: Server 317 ··· 368 return this._server.xrpc.method(nsid, cfg) 369 } 370 371 getActorFavs<AV extends AuthVerifier>( 372 cfg: ConfigOf< 373 AV, ··· 378 const nsid = 'social.grain.actor.getActorFavs' // @ts-ignore 379 return this._server.xrpc.method(nsid, cfg) 380 } 381 } 382 383 export class SocialGrainPhotoNS { ··· 385 386 constructor(server: Server) { 387 this._server = server 388 } 389 390 getActorPhotos<AV extends AuthVerifier>(
··· 11 import { schemas } from './lexicons.ts' 12 import * as SocialGrainNotificationUpdateSeen from './types/social/grain/notification/updateSeen.ts' 13 import * as SocialGrainNotificationGetNotifications from './types/social/grain/notification/getNotifications.ts' 14 + import * as SocialGrainCommentDeleteComment from './types/social/grain/comment/deleteComment.ts' 15 + import * as SocialGrainCommentCreateComment from './types/social/grain/comment/createComment.ts' 16 + import * as SocialGrainGalleryDeleteGallery from './types/social/grain/gallery/deleteGallery.ts' 17 + import * as SocialGrainGalleryCreateItem from './types/social/grain/gallery/createItem.ts' 18 + import * as SocialGrainGalleryCreateGallery from './types/social/grain/gallery/createGallery.ts' 19 + import * as SocialGrainGalleryDeleteItem from './types/social/grain/gallery/deleteItem.ts' 20 + import * as SocialGrainGalleryUpdateGallery from './types/social/grain/gallery/updateGallery.ts' 21 + import * as SocialGrainGalleryApplySort from './types/social/grain/gallery/applySort.ts' 22 import * as SocialGrainGalleryGetGalleryThread from './types/social/grain/gallery/getGalleryThread.ts' 23 import * as SocialGrainGalleryGetActorGalleries from './types/social/grain/gallery/getActorGalleries.ts' 24 import * as SocialGrainGalleryGetGallery from './types/social/grain/gallery/getGallery.ts' 25 + import * as SocialGrainGraphDeleteFollow from './types/social/grain/graph/deleteFollow.ts' 26 + import * as SocialGrainGraphCreateFollow from './types/social/grain/graph/createFollow.ts' 27 import * as SocialGrainGraphGetFollowers from './types/social/grain/graph/getFollowers.ts' 28 import * as SocialGrainGraphGetFollows from './types/social/grain/graph/getFollows.ts' 29 + import * as SocialGrainDarkroomGetGalleryComposite from './types/social/grain/darkroom/getGalleryComposite.ts' 30 + import * as SocialGrainFavoriteDeleteFavorite from './types/social/grain/favorite/deleteFavorite.ts' 31 + import * as SocialGrainFavoriteCreateFavorite from './types/social/grain/favorite/createFavorite.ts' 32 import * as SocialGrainFeedGetTimeline from './types/social/grain/feed/getTimeline.ts' 33 import * as SocialGrainActorGetProfile from './types/social/grain/actor/getProfile.ts' 34 import * as SocialGrainActorSearchActors from './types/social/grain/actor/searchActors.ts' 35 + import * as SocialGrainActorUpdateAvatar from './types/social/grain/actor/updateAvatar.ts' 36 import * as SocialGrainActorGetActorFavs from './types/social/grain/actor/getActorFavs.ts' 37 + import * as SocialGrainActorUpdateProfile from './types/social/grain/actor/updateProfile.ts' 38 + import * as SocialGrainPhotoDeletePhoto from './types/social/grain/photo/deletePhoto.ts' 39 + import * as SocialGrainPhotoUploadPhoto from './types/social/grain/photo/uploadPhoto.ts' 40 + import * as SocialGrainPhotoCreateExif from './types/social/grain/photo/createExif.ts' 41 + import * as SocialGrainPhotoApplyAlts from './types/social/grain/photo/applyAlts.ts' 42 import * as SocialGrainPhotoGetActorPhotos from './types/social/grain/photo/getActorPhotos.ts' 43 44 export const APP_BSKY_GRAPH = { ··· 211 export class SocialGrainNS { 212 _server: Server 213 notification: SocialGrainNotificationNS 214 + comment: SocialGrainCommentNS 215 gallery: SocialGrainGalleryNS 216 graph: SocialGrainGraphNS 217 + darkroom: SocialGrainDarkroomNS 218 + favorite: SocialGrainFavoriteNS 219 labeler: SocialGrainLabelerNS 220 feed: SocialGrainFeedNS 221 actor: SocialGrainActorNS ··· 224 constructor(server: Server) { 225 this._server = server 226 this.notification = new SocialGrainNotificationNS(server) 227 + this.comment = new SocialGrainCommentNS(server) 228 this.gallery = new SocialGrainGalleryNS(server) 229 this.graph = new SocialGrainGraphNS(server) 230 + this.darkroom = new SocialGrainDarkroomNS(server) 231 + this.favorite = new SocialGrainFavoriteNS(server) 232 this.labeler = new SocialGrainLabelerNS(server) 233 this.feed = new SocialGrainFeedNS(server) 234 this.actor = new SocialGrainActorNS(server) ··· 266 } 267 } 268 269 + export class SocialGrainCommentNS { 270 + _server: Server 271 + 272 + constructor(server: Server) { 273 + this._server = server 274 + } 275 + 276 + deleteComment<AV extends AuthVerifier>( 277 + cfg: ConfigOf< 278 + AV, 279 + SocialGrainCommentDeleteComment.Handler<ExtractAuth<AV>>, 280 + SocialGrainCommentDeleteComment.HandlerReqCtx<ExtractAuth<AV>> 281 + >, 282 + ) { 283 + const nsid = 'social.grain.comment.deleteComment' // @ts-ignore 284 + return this._server.xrpc.method(nsid, cfg) 285 + } 286 + 287 + createComment<AV extends AuthVerifier>( 288 + cfg: ConfigOf< 289 + AV, 290 + SocialGrainCommentCreateComment.Handler<ExtractAuth<AV>>, 291 + SocialGrainCommentCreateComment.HandlerReqCtx<ExtractAuth<AV>> 292 + >, 293 + ) { 294 + const nsid = 'social.grain.comment.createComment' // @ts-ignore 295 + return this._server.xrpc.method(nsid, cfg) 296 + } 297 + } 298 + 299 export class SocialGrainGalleryNS { 300 _server: Server 301 ··· 303 this._server = server 304 } 305 306 + deleteGallery<AV extends AuthVerifier>( 307 + cfg: ConfigOf< 308 + AV, 309 + SocialGrainGalleryDeleteGallery.Handler<ExtractAuth<AV>>, 310 + SocialGrainGalleryDeleteGallery.HandlerReqCtx<ExtractAuth<AV>> 311 + >, 312 + ) { 313 + const nsid = 'social.grain.gallery.deleteGallery' // @ts-ignore 314 + return this._server.xrpc.method(nsid, cfg) 315 + } 316 + 317 + createItem<AV extends AuthVerifier>( 318 + cfg: ConfigOf< 319 + AV, 320 + SocialGrainGalleryCreateItem.Handler<ExtractAuth<AV>>, 321 + SocialGrainGalleryCreateItem.HandlerReqCtx<ExtractAuth<AV>> 322 + >, 323 + ) { 324 + const nsid = 'social.grain.gallery.createItem' // @ts-ignore 325 + return this._server.xrpc.method(nsid, cfg) 326 + } 327 + 328 + createGallery<AV extends AuthVerifier>( 329 + cfg: ConfigOf< 330 + AV, 331 + SocialGrainGalleryCreateGallery.Handler<ExtractAuth<AV>>, 332 + SocialGrainGalleryCreateGallery.HandlerReqCtx<ExtractAuth<AV>> 333 + >, 334 + ) { 335 + const nsid = 'social.grain.gallery.createGallery' // @ts-ignore 336 + return this._server.xrpc.method(nsid, cfg) 337 + } 338 + 339 + deleteItem<AV extends AuthVerifier>( 340 + cfg: ConfigOf< 341 + AV, 342 + SocialGrainGalleryDeleteItem.Handler<ExtractAuth<AV>>, 343 + SocialGrainGalleryDeleteItem.HandlerReqCtx<ExtractAuth<AV>> 344 + >, 345 + ) { 346 + const nsid = 'social.grain.gallery.deleteItem' // @ts-ignore 347 + return this._server.xrpc.method(nsid, cfg) 348 + } 349 + 350 + updateGallery<AV extends AuthVerifier>( 351 + cfg: ConfigOf< 352 + AV, 353 + SocialGrainGalleryUpdateGallery.Handler<ExtractAuth<AV>>, 354 + SocialGrainGalleryUpdateGallery.HandlerReqCtx<ExtractAuth<AV>> 355 + >, 356 + ) { 357 + const nsid = 'social.grain.gallery.updateGallery' // @ts-ignore 358 + return this._server.xrpc.method(nsid, cfg) 359 + } 360 + 361 + applySort<AV extends AuthVerifier>( 362 + cfg: ConfigOf< 363 + AV, 364 + SocialGrainGalleryApplySort.Handler<ExtractAuth<AV>>, 365 + SocialGrainGalleryApplySort.HandlerReqCtx<ExtractAuth<AV>> 366 + >, 367 + ) { 368 + const nsid = 'social.grain.gallery.applySort' // @ts-ignore 369 + return this._server.xrpc.method(nsid, cfg) 370 + } 371 + 372 getGalleryThread<AV extends AuthVerifier>( 373 cfg: ConfigOf< 374 AV, ··· 410 this._server = server 411 } 412 413 + deleteFollow<AV extends AuthVerifier>( 414 + cfg: ConfigOf< 415 + AV, 416 + SocialGrainGraphDeleteFollow.Handler<ExtractAuth<AV>>, 417 + SocialGrainGraphDeleteFollow.HandlerReqCtx<ExtractAuth<AV>> 418 + >, 419 + ) { 420 + const nsid = 'social.grain.graph.deleteFollow' // @ts-ignore 421 + return this._server.xrpc.method(nsid, cfg) 422 + } 423 + 424 + createFollow<AV extends AuthVerifier>( 425 + cfg: ConfigOf< 426 + AV, 427 + SocialGrainGraphCreateFollow.Handler<ExtractAuth<AV>>, 428 + SocialGrainGraphCreateFollow.HandlerReqCtx<ExtractAuth<AV>> 429 + >, 430 + ) { 431 + const nsid = 'social.grain.graph.createFollow' // @ts-ignore 432 + return this._server.xrpc.method(nsid, cfg) 433 + } 434 + 435 getFollowers<AV extends AuthVerifier>( 436 cfg: ConfigOf< 437 AV, ··· 455 } 456 } 457 458 + export class SocialGrainDarkroomNS { 459 + _server: Server 460 + 461 + constructor(server: Server) { 462 + this._server = server 463 + } 464 + 465 + getGalleryComposite<AV extends AuthVerifier>( 466 + cfg: ConfigOf< 467 + AV, 468 + SocialGrainDarkroomGetGalleryComposite.Handler<ExtractAuth<AV>>, 469 + SocialGrainDarkroomGetGalleryComposite.HandlerReqCtx<ExtractAuth<AV>> 470 + >, 471 + ) { 472 + const nsid = 'social.grain.darkroom.getGalleryComposite' // @ts-ignore 473 + return this._server.xrpc.method(nsid, cfg) 474 + } 475 + } 476 + 477 + export class SocialGrainFavoriteNS { 478 + _server: Server 479 + 480 + constructor(server: Server) { 481 + this._server = server 482 + } 483 + 484 + deleteFavorite<AV extends AuthVerifier>( 485 + cfg: ConfigOf< 486 + AV, 487 + SocialGrainFavoriteDeleteFavorite.Handler<ExtractAuth<AV>>, 488 + SocialGrainFavoriteDeleteFavorite.HandlerReqCtx<ExtractAuth<AV>> 489 + >, 490 + ) { 491 + const nsid = 'social.grain.favorite.deleteFavorite' // @ts-ignore 492 + return this._server.xrpc.method(nsid, cfg) 493 + } 494 + 495 + createFavorite<AV extends AuthVerifier>( 496 + cfg: ConfigOf< 497 + AV, 498 + SocialGrainFavoriteCreateFavorite.Handler<ExtractAuth<AV>>, 499 + SocialGrainFavoriteCreateFavorite.HandlerReqCtx<ExtractAuth<AV>> 500 + >, 501 + ) { 502 + const nsid = 'social.grain.favorite.createFavorite' // @ts-ignore 503 + return this._server.xrpc.method(nsid, cfg) 504 + } 505 + } 506 + 507 export class SocialGrainLabelerNS { 508 _server: Server 509 ··· 560 return this._server.xrpc.method(nsid, cfg) 561 } 562 563 + updateAvatar<AV extends AuthVerifier>( 564 + cfg: ConfigOf< 565 + AV, 566 + SocialGrainActorUpdateAvatar.Handler<ExtractAuth<AV>>, 567 + SocialGrainActorUpdateAvatar.HandlerReqCtx<ExtractAuth<AV>> 568 + >, 569 + ) { 570 + const nsid = 'social.grain.actor.updateAvatar' // @ts-ignore 571 + return this._server.xrpc.method(nsid, cfg) 572 + } 573 + 574 getActorFavs<AV extends AuthVerifier>( 575 cfg: ConfigOf< 576 AV, ··· 581 const nsid = 'social.grain.actor.getActorFavs' // @ts-ignore 582 return this._server.xrpc.method(nsid, cfg) 583 } 584 + 585 + updateProfile<AV extends AuthVerifier>( 586 + cfg: ConfigOf< 587 + AV, 588 + SocialGrainActorUpdateProfile.Handler<ExtractAuth<AV>>, 589 + SocialGrainActorUpdateProfile.HandlerReqCtx<ExtractAuth<AV>> 590 + >, 591 + ) { 592 + const nsid = 'social.grain.actor.updateProfile' // @ts-ignore 593 + return this._server.xrpc.method(nsid, cfg) 594 + } 595 } 596 597 export class SocialGrainPhotoNS { ··· 599 600 constructor(server: Server) { 601 this._server = server 602 + } 603 + 604 + deletePhoto<AV extends AuthVerifier>( 605 + cfg: ConfigOf< 606 + AV, 607 + SocialGrainPhotoDeletePhoto.Handler<ExtractAuth<AV>>, 608 + SocialGrainPhotoDeletePhoto.HandlerReqCtx<ExtractAuth<AV>> 609 + >, 610 + ) { 611 + const nsid = 'social.grain.photo.deletePhoto' // @ts-ignore 612 + return this._server.xrpc.method(nsid, cfg) 613 + } 614 + 615 + uploadPhoto<AV extends AuthVerifier>( 616 + cfg: ConfigOf< 617 + AV, 618 + SocialGrainPhotoUploadPhoto.Handler<ExtractAuth<AV>>, 619 + SocialGrainPhotoUploadPhoto.HandlerReqCtx<ExtractAuth<AV>> 620 + >, 621 + ) { 622 + const nsid = 'social.grain.photo.uploadPhoto' // @ts-ignore 623 + return this._server.xrpc.method(nsid, cfg) 624 + } 625 + 626 + createExif<AV extends AuthVerifier>( 627 + cfg: ConfigOf< 628 + AV, 629 + SocialGrainPhotoCreateExif.Handler<ExtractAuth<AV>>, 630 + SocialGrainPhotoCreateExif.HandlerReqCtx<ExtractAuth<AV>> 631 + >, 632 + ) { 633 + const nsid = 'social.grain.photo.createExif' // @ts-ignore 634 + return this._server.xrpc.method(nsid, cfg) 635 + } 636 + 637 + applyAlts<AV extends AuthVerifier>( 638 + cfg: ConfigOf< 639 + AV, 640 + SocialGrainPhotoApplyAlts.Handler<ExtractAuth<AV>>, 641 + SocialGrainPhotoApplyAlts.HandlerReqCtx<ExtractAuth<AV>> 642 + >, 643 + ) { 644 + const nsid = 'social.grain.photo.applyAlts' // @ts-ignore 645 + return this._server.xrpc.method(nsid, cfg) 646 } 647 648 getActorPhotos<AV extends AuthVerifier>(
+831 -28
notifications/__generated__/lexicons.ts
··· 2666 }, 2667 }, 2668 }, 2669 SocialGrainComment: { 2670 lexicon: 1, 2671 id: 'social.grain.comment', ··· 2712 }, 2713 }, 2714 }, 2715 SocialGrainGalleryItem: { 2716 lexicon: 1, 2717 id: 'social.grain.gallery.item', ··· 2738 position: { 2739 type: 'integer', 2740 default: 0, 2741 }, 2742 }, 2743 }, ··· 2837 }, 2838 }, 2839 }, 2840 SocialGrainGallery: { 2841 lexicon: 1, 2842 id: 'social.grain.gallery', ··· 2884 }, 2885 }, 2886 }, 2887 SocialGrainGalleryGetGalleryThread: { 2888 lexicon: 1, 2889 id: 'social.grain.gallery.getGalleryThread', ··· 3006 }, 3007 }, 3008 }, 3009 SocialGrainGraphFollow: { 3010 lexicon: 1, 3011 id: 'social.grain.graph.follow', ··· 3024 createdAt: { 3025 type: 'string', 3026 format: 'datetime', 3027 }, 3028 }, 3029 }, ··· 3136 }, 3137 }, 3138 }, 3139 SocialGrainLabelerDefs: { 3140 lexicon: 1, 3141 id: 'social.grain.labeler.defs', ··· 3384 }, 3385 }, 3386 }, 3387 - SocialGrainFavorite: { 3388 - lexicon: 1, 3389 - id: 'social.grain.favorite', 3390 - defs: { 3391 - main: { 3392 - type: 'record', 3393 - key: 'tid', 3394 - record: { 3395 - type: 'object', 3396 - required: ['createdAt', 'subject'], 3397 - properties: { 3398 - createdAt: { 3399 - type: 'string', 3400 - format: 'datetime', 3401 - }, 3402 - subject: { 3403 - type: 'string', 3404 - format: 'at-uri', 3405 - }, 3406 - }, 3407 - }, 3408 - }, 3409 - }, 3410 - }, 3411 SocialGrainActorDefs: { 3412 lexicon: 1, 3413 id: 'social.grain.actor.defs', ··· 3618 }, 3619 }, 3620 }, 3621 SocialGrainActorGetActorFavs: { 3622 lexicon: 1, 3623 id: 'social.grain.actor.getActorFavs', ··· 3705 }, 3706 }, 3707 }, 3708 SocialGrainPhotoDefs: { 3709 lexicon: 1, 3710 id: 'social.grain.photo.defs', 3711 defs: { 3712 photoView: { 3713 type: 'object', 3714 - required: ['uri', 'cid', 'thumb', 'fullsize', 'alt'], 3715 properties: { 3716 uri: { 3717 type: 'string', ··· 3755 }, 3756 exifView: { 3757 type: 'object', 3758 - required: ['photo', 'createdAt'], 3759 properties: { 3760 uri: { 3761 type: 'string', ··· 3768 photo: { 3769 type: 'string', 3770 format: 'at-uri', 3771 }, 3772 createdAt: { 3773 type: 'string', ··· 3826 }, 3827 }, 3828 }, 3829 SocialGrainPhotoExif: { 3830 lexicon: 1, 3831 id: 'social.grain.photo.exif', ··· 3883 }, 3884 }, 3885 }, 3886 SocialGrainPhotoGetActorPhotos: { 3887 lexicon: 1, 3888 id: 'social.grain.photo.getActorPhotos', ··· 3940 key: 'tid', 3941 record: { 3942 type: 'object', 3943 - required: ['photo', 'alt'], 3944 properties: { 3945 photo: { 3946 type: 'blob', ··· 4273 SocialGrainNotificationGetNotifications: 4274 'social.grain.notification.getNotifications', 4275 SocialGrainCommentDefs: 'social.grain.comment.defs', 4276 SocialGrainComment: 'social.grain.comment', 4277 SocialGrainGalleryItem: 'social.grain.gallery.item', 4278 SocialGrainGalleryDefs: 'social.grain.gallery.defs', 4279 SocialGrainGallery: 'social.grain.gallery', 4280 SocialGrainGalleryGetGalleryThread: 'social.grain.gallery.getGalleryThread', 4281 SocialGrainGalleryGetActorGalleries: 'social.grain.gallery.getActorGalleries', 4282 SocialGrainGalleryGetGallery: 'social.grain.gallery.getGallery', 4283 SocialGrainGraphFollow: 'social.grain.graph.follow', 4284 SocialGrainGraphGetFollowers: 'social.grain.graph.getFollowers', 4285 SocialGrainGraphGetFollows: 'social.grain.graph.getFollows', 4286 SocialGrainLabelerDefs: 'social.grain.labeler.defs', 4287 SocialGrainLabelerService: 'social.grain.labeler.service', 4288 SocialGrainFeedGetTimeline: 'social.grain.feed.getTimeline', 4289 - SocialGrainFavorite: 'social.grain.favorite', 4290 SocialGrainActorDefs: 'social.grain.actor.defs', 4291 SocialGrainActorGetProfile: 'social.grain.actor.getProfile', 4292 SocialGrainActorSearchActors: 'social.grain.actor.searchActors', 4293 SocialGrainActorGetActorFavs: 'social.grain.actor.getActorFavs', 4294 SocialGrainActorProfile: 'social.grain.actor.profile', 4295 SocialGrainPhotoDefs: 'social.grain.photo.defs', 4296 SocialGrainPhotoExif: 'social.grain.photo.exif', 4297 SocialGrainPhotoGetActorPhotos: 'social.grain.photo.getActorPhotos', 4298 SocialGrainPhoto: 'social.grain.photo', 4299 ComAtprotoLabelDefs: 'com.atproto.label.defs',
··· 2666 }, 2667 }, 2668 }, 2669 + SocialGrainCommentDeleteComment: { 2670 + lexicon: 1, 2671 + id: 'social.grain.comment.deleteComment', 2672 + defs: { 2673 + main: { 2674 + type: 'procedure', 2675 + description: 'Delete a comment. Requires auth.', 2676 + input: { 2677 + encoding: 'application/json', 2678 + schema: { 2679 + type: 'object', 2680 + required: ['uri'], 2681 + properties: { 2682 + uri: { 2683 + type: 'string', 2684 + format: 'at-uri', 2685 + description: 'AT URI of the comment to delete', 2686 + }, 2687 + }, 2688 + }, 2689 + }, 2690 + output: { 2691 + encoding: 'application/json', 2692 + schema: { 2693 + type: 'object', 2694 + properties: { 2695 + success: { 2696 + type: 'boolean', 2697 + description: 'True if the comment was deleted', 2698 + }, 2699 + }, 2700 + }, 2701 + }, 2702 + }, 2703 + }, 2704 + }, 2705 + SocialGrainCommentCreateComment: { 2706 + lexicon: 1, 2707 + id: 'social.grain.comment.createComment', 2708 + defs: { 2709 + main: { 2710 + type: 'procedure', 2711 + description: 'Create a comment. Requires auth.', 2712 + input: { 2713 + encoding: 'application/json', 2714 + schema: { 2715 + type: 'object', 2716 + required: ['text', 'subject'], 2717 + properties: { 2718 + text: { 2719 + type: 'string', 2720 + maxLength: 3000, 2721 + maxGraphemes: 300, 2722 + }, 2723 + subject: { 2724 + type: 'string', 2725 + format: 'at-uri', 2726 + }, 2727 + focus: { 2728 + type: 'string', 2729 + format: 'at-uri', 2730 + }, 2731 + replyTo: { 2732 + type: 'string', 2733 + format: 'at-uri', 2734 + }, 2735 + }, 2736 + }, 2737 + }, 2738 + output: { 2739 + encoding: 'application/json', 2740 + schema: { 2741 + type: 'object', 2742 + properties: { 2743 + commentUri: { 2744 + type: 'string', 2745 + format: 'at-uri', 2746 + description: 'AT URI of the created comment', 2747 + }, 2748 + }, 2749 + }, 2750 + }, 2751 + }, 2752 + }, 2753 + }, 2754 SocialGrainComment: { 2755 lexicon: 1, 2756 id: 'social.grain.comment', ··· 2797 }, 2798 }, 2799 }, 2800 + SocialGrainGalleryDeleteGallery: { 2801 + lexicon: 1, 2802 + id: 'social.grain.gallery.deleteGallery', 2803 + defs: { 2804 + main: { 2805 + type: 'procedure', 2806 + description: 2807 + 'Delete a gallery. Does not delete the items in the gallery, just the gallery itself.', 2808 + input: { 2809 + encoding: 'application/json', 2810 + schema: { 2811 + type: 'object', 2812 + required: ['uri'], 2813 + properties: { 2814 + uri: { 2815 + type: 'string', 2816 + format: 'at-uri', 2817 + description: 'Unique identifier of the gallery to delete', 2818 + }, 2819 + cascade: { 2820 + type: 'boolean', 2821 + default: true, 2822 + description: 2823 + 'If true, will also delete any associated items in the gallery.', 2824 + }, 2825 + }, 2826 + }, 2827 + }, 2828 + output: { 2829 + encoding: 'application/json', 2830 + schema: { 2831 + type: 'object', 2832 + properties: { 2833 + success: { 2834 + type: 'boolean', 2835 + description: 'True if the gallery was deleted', 2836 + }, 2837 + }, 2838 + }, 2839 + }, 2840 + }, 2841 + }, 2842 + }, 2843 SocialGrainGalleryItem: { 2844 lexicon: 1, 2845 id: 'social.grain.gallery.item', ··· 2866 position: { 2867 type: 'integer', 2868 default: 0, 2869 + }, 2870 + }, 2871 + }, 2872 + }, 2873 + }, 2874 + }, 2875 + SocialGrainGalleryCreateItem: { 2876 + lexicon: 1, 2877 + id: 'social.grain.gallery.createItem', 2878 + defs: { 2879 + main: { 2880 + type: 'procedure', 2881 + description: 'Create a new gallery item', 2882 + input: { 2883 + encoding: 'application/json', 2884 + schema: { 2885 + type: 'object', 2886 + required: ['galleryUri', 'photoUri', 'position'], 2887 + properties: { 2888 + galleryUri: { 2889 + type: 'string', 2890 + format: 'at-uri', 2891 + description: 'AT URI of the gallery to create the item in', 2892 + }, 2893 + photoUri: { 2894 + type: 'string', 2895 + format: 'at-uri', 2896 + description: 'AT URI of the photo to be added as an item', 2897 + }, 2898 + position: { 2899 + type: 'integer', 2900 + description: 2901 + 'Position of the item in the gallery, used for ordering', 2902 + }, 2903 + }, 2904 + }, 2905 + }, 2906 + output: { 2907 + encoding: 'application/json', 2908 + schema: { 2909 + type: 'object', 2910 + properties: { 2911 + itemUri: { 2912 + type: 'string', 2913 + format: 'at-uri', 2914 + description: 'AT URI of the created gallery item', 2915 + }, 2916 + }, 2917 + }, 2918 + }, 2919 + }, 2920 + }, 2921 + }, 2922 + SocialGrainGalleryCreateGallery: { 2923 + lexicon: 1, 2924 + id: 'social.grain.gallery.createGallery', 2925 + defs: { 2926 + main: { 2927 + type: 'procedure', 2928 + description: 'Create a new gallery', 2929 + input: { 2930 + encoding: 'application/json', 2931 + schema: { 2932 + type: 'object', 2933 + required: ['title'], 2934 + properties: { 2935 + title: { 2936 + type: 'string', 2937 + maxLength: 100, 2938 + }, 2939 + description: { 2940 + type: 'string', 2941 + maxLength: 1000, 2942 + }, 2943 + }, 2944 + }, 2945 + }, 2946 + output: { 2947 + encoding: 'application/json', 2948 + schema: { 2949 + type: 'object', 2950 + properties: { 2951 + galleryUri: { 2952 + type: 'string', 2953 + format: 'at-uri', 2954 + description: 'AT URI of the created gallery', 2955 + }, 2956 }, 2957 }, 2958 }, ··· 3052 }, 3053 }, 3054 }, 3055 + SocialGrainGalleryDeleteItem: { 3056 + lexicon: 1, 3057 + id: 'social.grain.gallery.deleteItem', 3058 + defs: { 3059 + main: { 3060 + type: 'procedure', 3061 + description: 'Delete a gallery item', 3062 + input: { 3063 + encoding: 'application/json', 3064 + schema: { 3065 + type: 'object', 3066 + required: ['uri'], 3067 + properties: { 3068 + uri: { 3069 + type: 'string', 3070 + format: 'at-uri', 3071 + description: 'AT URI of the gallery to create the item in', 3072 + }, 3073 + }, 3074 + }, 3075 + }, 3076 + output: { 3077 + encoding: 'application/json', 3078 + schema: { 3079 + type: 'object', 3080 + properties: { 3081 + success: { 3082 + type: 'boolean', 3083 + description: 'True if the gallery item was deleted', 3084 + }, 3085 + }, 3086 + }, 3087 + }, 3088 + }, 3089 + }, 3090 + }, 3091 SocialGrainGallery: { 3092 lexicon: 1, 3093 id: 'social.grain.gallery', ··· 3135 }, 3136 }, 3137 }, 3138 + SocialGrainGalleryUpdateGallery: { 3139 + lexicon: 1, 3140 + id: 'social.grain.gallery.updateGallery', 3141 + defs: { 3142 + main: { 3143 + type: 'procedure', 3144 + description: 'Create a new gallery', 3145 + input: { 3146 + encoding: 'application/json', 3147 + schema: { 3148 + type: 'object', 3149 + required: ['galleryUri', 'title'], 3150 + properties: { 3151 + galleryUri: { 3152 + type: 'string', 3153 + format: 'at-uri', 3154 + description: 'The AT-URI of the gallery to update', 3155 + }, 3156 + title: { 3157 + type: 'string', 3158 + }, 3159 + description: { 3160 + type: 'string', 3161 + }, 3162 + }, 3163 + }, 3164 + }, 3165 + output: { 3166 + encoding: 'application/json', 3167 + schema: { 3168 + type: 'object', 3169 + properties: { 3170 + success: { 3171 + type: 'boolean', 3172 + description: 'True if the gallery was updated', 3173 + }, 3174 + }, 3175 + }, 3176 + }, 3177 + }, 3178 + }, 3179 + }, 3180 + SocialGrainGalleryApplySort: { 3181 + lexicon: 1, 3182 + id: 'social.grain.gallery.applySort', 3183 + defs: { 3184 + main: { 3185 + type: 'procedure', 3186 + description: 'Apply sorting to photos in a gallery. Requires auth.', 3187 + input: { 3188 + encoding: 'application/json', 3189 + schema: { 3190 + type: 'object', 3191 + required: ['writes'], 3192 + properties: { 3193 + writes: { 3194 + type: 'array', 3195 + items: { 3196 + type: 'ref', 3197 + ref: 'lex:social.grain.gallery.applySort#update', 3198 + }, 3199 + }, 3200 + }, 3201 + }, 3202 + }, 3203 + output: { 3204 + encoding: 'application/json', 3205 + schema: { 3206 + type: 'object', 3207 + properties: { 3208 + success: { 3209 + type: 'boolean', 3210 + description: 'True if the writes were successfully applied', 3211 + }, 3212 + }, 3213 + }, 3214 + }, 3215 + }, 3216 + update: { 3217 + type: 'object', 3218 + required: ['itemUri', 'position'], 3219 + properties: { 3220 + itemUri: { 3221 + type: 'string', 3222 + format: 'at-uri', 3223 + description: 'AT URI of the item to update', 3224 + }, 3225 + position: { 3226 + type: 'integer', 3227 + description: 3228 + 'The position of the item in the gallery, used for ordering', 3229 + }, 3230 + }, 3231 + }, 3232 + }, 3233 + }, 3234 SocialGrainGalleryGetGalleryThread: { 3235 lexicon: 1, 3236 id: 'social.grain.gallery.getGalleryThread', ··· 3353 }, 3354 }, 3355 }, 3356 + SocialGrainGraphDeleteFollow: { 3357 + lexicon: 1, 3358 + id: 'social.grain.graph.deleteFollow', 3359 + defs: { 3360 + main: { 3361 + type: 'procedure', 3362 + description: 'Delete a follow relationship. Requires auth.', 3363 + input: { 3364 + encoding: 'application/json', 3365 + schema: { 3366 + type: 'object', 3367 + required: ['uri'], 3368 + properties: { 3369 + uri: { 3370 + type: 'string', 3371 + format: 'at-uri', 3372 + description: 'AT URI of the follow record to delete', 3373 + }, 3374 + }, 3375 + }, 3376 + }, 3377 + output: { 3378 + encoding: 'application/json', 3379 + schema: { 3380 + type: 'object', 3381 + properties: { 3382 + success: { 3383 + type: 'boolean', 3384 + description: 'True if the follow was deleted', 3385 + }, 3386 + }, 3387 + }, 3388 + }, 3389 + }, 3390 + }, 3391 + }, 3392 SocialGrainGraphFollow: { 3393 lexicon: 1, 3394 id: 'social.grain.graph.follow', ··· 3407 createdAt: { 3408 type: 'string', 3409 format: 'datetime', 3410 + }, 3411 + }, 3412 + }, 3413 + }, 3414 + }, 3415 + }, 3416 + SocialGrainGraphCreateFollow: { 3417 + lexicon: 1, 3418 + id: 'social.grain.graph.createFollow', 3419 + defs: { 3420 + main: { 3421 + type: 'procedure', 3422 + description: 'Create a follow relationship between actors.', 3423 + input: { 3424 + encoding: 'application/json', 3425 + schema: { 3426 + type: 'object', 3427 + required: ['subject'], 3428 + properties: { 3429 + subject: { 3430 + type: 'string', 3431 + format: 'at-identifier', 3432 + description: 'DID of the actor to follow.', 3433 + }, 3434 + }, 3435 + }, 3436 + }, 3437 + output: { 3438 + encoding: 'application/json', 3439 + schema: { 3440 + type: 'object', 3441 + properties: { 3442 + followUri: { 3443 + type: 'string', 3444 + format: 'at-uri', 3445 + description: 'AT URI of the created follow record.', 3446 + }, 3447 }, 3448 }, 3449 }, ··· 3556 }, 3557 }, 3558 }, 3559 + SocialGrainDarkroomGetGalleryComposite: { 3560 + lexicon: 1, 3561 + id: 'social.grain.darkroom.getGalleryComposite', 3562 + defs: { 3563 + main: { 3564 + type: 'query', 3565 + description: 3566 + 'Returns a composite image for a specified gallery AT-URI.', 3567 + parameters: { 3568 + type: 'params', 3569 + required: ['uri'], 3570 + properties: { 3571 + uri: { 3572 + type: 'string', 3573 + description: 3574 + 'The AT-URI of the gallery to return a composite for.', 3575 + format: 'at-uri', 3576 + }, 3577 + }, 3578 + }, 3579 + output: { 3580 + encoding: '*/*', 3581 + }, 3582 + }, 3583 + }, 3584 + }, 3585 + SocialGrainFavoriteDeleteFavorite: { 3586 + lexicon: 1, 3587 + id: 'social.grain.favorite.deleteFavorite', 3588 + defs: { 3589 + main: { 3590 + type: 'procedure', 3591 + description: 'Delete a favorite item by its ID.', 3592 + input: { 3593 + encoding: 'application/json', 3594 + schema: { 3595 + type: 'object', 3596 + required: ['uri'], 3597 + properties: { 3598 + uri: { 3599 + type: 'string', 3600 + format: 'at-uri', 3601 + description: 'The AT URI of the favorite to delete.', 3602 + }, 3603 + }, 3604 + }, 3605 + }, 3606 + output: { 3607 + encoding: 'application/json', 3608 + schema: { 3609 + type: 'object', 3610 + required: ['success'], 3611 + properties: { 3612 + success: { 3613 + type: 'boolean', 3614 + description: 3615 + 'Indicates if the favorite was successfully deleted.', 3616 + }, 3617 + }, 3618 + }, 3619 + }, 3620 + }, 3621 + }, 3622 + }, 3623 + SocialGrainFavoriteCreateFavorite: { 3624 + lexicon: 1, 3625 + id: 'social.grain.favorite.createFavorite', 3626 + defs: { 3627 + main: { 3628 + description: 'Create a favorite for a given subject.', 3629 + type: 'procedure', 3630 + input: { 3631 + encoding: 'application/json', 3632 + schema: { 3633 + type: 'object', 3634 + required: ['subject'], 3635 + properties: { 3636 + subject: { 3637 + type: 'string', 3638 + format: 'at-uri', 3639 + description: 'URI of the subject to favorite.', 3640 + }, 3641 + }, 3642 + }, 3643 + }, 3644 + output: { 3645 + encoding: 'application/json', 3646 + schema: { 3647 + type: 'object', 3648 + required: ['favoriteUri'], 3649 + properties: { 3650 + favoriteUri: { 3651 + type: 'string', 3652 + format: 'at-uri', 3653 + description: 'AT URI for the created favorite.', 3654 + }, 3655 + }, 3656 + }, 3657 + }, 3658 + }, 3659 + }, 3660 + }, 3661 + SocialGrainFavorite: { 3662 + lexicon: 1, 3663 + id: 'social.grain.favorite', 3664 + defs: { 3665 + main: { 3666 + type: 'record', 3667 + key: 'tid', 3668 + record: { 3669 + type: 'object', 3670 + required: ['createdAt', 'subject'], 3671 + properties: { 3672 + createdAt: { 3673 + type: 'string', 3674 + format: 'datetime', 3675 + }, 3676 + subject: { 3677 + type: 'string', 3678 + format: 'at-uri', 3679 + }, 3680 + }, 3681 + }, 3682 + }, 3683 + }, 3684 + }, 3685 SocialGrainLabelerDefs: { 3686 lexicon: 1, 3687 id: 'social.grain.labeler.defs', ··· 3930 }, 3931 }, 3932 }, 3933 SocialGrainActorDefs: { 3934 lexicon: 1, 3935 id: 'social.grain.actor.defs', ··· 4140 }, 4141 }, 4142 }, 4143 + SocialGrainActorUpdateAvatar: { 4144 + lexicon: 1, 4145 + id: 'social.grain.actor.updateAvatar', 4146 + defs: { 4147 + main: { 4148 + type: 'procedure', 4149 + description: "Update an actor's avatar. Requires auth.", 4150 + input: { 4151 + encoding: '*/*', 4152 + }, 4153 + output: { 4154 + encoding: 'application/json', 4155 + schema: { 4156 + type: 'object', 4157 + properties: { 4158 + success: { 4159 + type: 'boolean', 4160 + description: 4161 + 'Indicates whether the avatar update was successful.', 4162 + }, 4163 + }, 4164 + }, 4165 + }, 4166 + }, 4167 + }, 4168 + }, 4169 SocialGrainActorGetActorFavs: { 4170 lexicon: 1, 4171 id: 'social.grain.actor.getActorFavs', ··· 4253 }, 4254 }, 4255 }, 4256 + SocialGrainActorUpdateProfile: { 4257 + lexicon: 1, 4258 + id: 'social.grain.actor.updateProfile', 4259 + defs: { 4260 + main: { 4261 + type: 'procedure', 4262 + description: "Update an actor's profile info. Requires auth.", 4263 + input: { 4264 + encoding: 'application/json', 4265 + schema: { 4266 + type: 'object', 4267 + properties: { 4268 + displayName: { 4269 + type: 'string', 4270 + maxGraphemes: 64, 4271 + maxLength: 640, 4272 + }, 4273 + description: { 4274 + type: 'string', 4275 + description: 'Free-form profile description text.', 4276 + maxGraphemes: 256, 4277 + maxLength: 2560, 4278 + }, 4279 + }, 4280 + }, 4281 + }, 4282 + output: { 4283 + encoding: 'application/json', 4284 + schema: { 4285 + type: 'object', 4286 + properties: { 4287 + success: { 4288 + type: 'boolean', 4289 + description: 4290 + 'Indicates whether the profile update was successful.', 4291 + }, 4292 + }, 4293 + }, 4294 + }, 4295 + }, 4296 + }, 4297 + }, 4298 SocialGrainPhotoDefs: { 4299 lexicon: 1, 4300 id: 'social.grain.photo.defs', 4301 defs: { 4302 photoView: { 4303 type: 'object', 4304 + required: ['uri', 'cid', 'thumb', 'fullsize', 'aspectRatio'], 4305 properties: { 4306 uri: { 4307 type: 'string', ··· 4345 }, 4346 exifView: { 4347 type: 'object', 4348 + required: ['uri', 'cid', 'photo', 'record', 'createdAt'], 4349 properties: { 4350 uri: { 4351 type: 'string', ··· 4358 photo: { 4359 type: 'string', 4360 format: 'at-uri', 4361 + }, 4362 + record: { 4363 + type: 'unknown', 4364 }, 4365 createdAt: { 4366 type: 'string', ··· 4419 }, 4420 }, 4421 }, 4422 + SocialGrainPhotoDeletePhoto: { 4423 + lexicon: 1, 4424 + id: 'social.grain.photo.deletePhoto', 4425 + defs: { 4426 + main: { 4427 + type: 'procedure', 4428 + description: 'Delete a photo by its unique at-uri.', 4429 + input: { 4430 + encoding: 'application/json', 4431 + schema: { 4432 + type: 'object', 4433 + required: ['uri'], 4434 + properties: { 4435 + uri: { 4436 + type: 'string', 4437 + format: 'at-uri', 4438 + description: 'AT URI of the photo to delete.', 4439 + }, 4440 + cascade: { 4441 + type: 'boolean', 4442 + default: true, 4443 + description: 4444 + 'If true, will also delete any associated EXIF data and gallery items.', 4445 + }, 4446 + }, 4447 + }, 4448 + }, 4449 + output: { 4450 + encoding: 'application/json', 4451 + schema: { 4452 + type: 'object', 4453 + required: ['success'], 4454 + properties: { 4455 + success: { 4456 + type: 'boolean', 4457 + description: 'Indicates if the photo was successfully deleted.', 4458 + }, 4459 + }, 4460 + }, 4461 + }, 4462 + }, 4463 + }, 4464 + }, 4465 + SocialGrainPhotoUploadPhoto: { 4466 + lexicon: 1, 4467 + id: 'social.grain.photo.uploadPhoto', 4468 + defs: { 4469 + main: { 4470 + type: 'procedure', 4471 + description: 'Upload a photo. Requires auth.', 4472 + input: { 4473 + encoding: '*/*', 4474 + }, 4475 + output: { 4476 + encoding: 'application/json', 4477 + schema: { 4478 + type: 'object', 4479 + properties: { 4480 + photoUri: { 4481 + type: 'string', 4482 + format: 'at-uri', 4483 + description: 'AT URI of the created photo', 4484 + }, 4485 + }, 4486 + }, 4487 + }, 4488 + }, 4489 + }, 4490 + }, 4491 + SocialGrainPhotoCreateExif: { 4492 + lexicon: 1, 4493 + id: 'social.grain.photo.createExif', 4494 + defs: { 4495 + main: { 4496 + type: 'procedure', 4497 + description: 'Create a new Exif record for a photo', 4498 + input: { 4499 + encoding: 'application/json', 4500 + schema: { 4501 + type: 'object', 4502 + required: ['photo'], 4503 + properties: { 4504 + photo: { 4505 + type: 'string', 4506 + format: 'at-uri', 4507 + }, 4508 + dateTimeOriginal: { 4509 + type: 'string', 4510 + format: 'datetime', 4511 + }, 4512 + exposureTime: { 4513 + type: 'integer', 4514 + }, 4515 + fNumber: { 4516 + type: 'integer', 4517 + }, 4518 + flash: { 4519 + type: 'string', 4520 + }, 4521 + focalLengthIn35mmFormat: { 4522 + type: 'integer', 4523 + }, 4524 + iSO: { 4525 + type: 'integer', 4526 + }, 4527 + lensMake: { 4528 + type: 'string', 4529 + }, 4530 + lensModel: { 4531 + type: 'string', 4532 + }, 4533 + make: { 4534 + type: 'string', 4535 + }, 4536 + model: { 4537 + type: 'string', 4538 + }, 4539 + }, 4540 + }, 4541 + }, 4542 + output: { 4543 + encoding: 'application/json', 4544 + schema: { 4545 + type: 'object', 4546 + properties: { 4547 + exifUri: { 4548 + type: 'string', 4549 + format: 'at-uri', 4550 + description: 'AT URI of the created gallery', 4551 + }, 4552 + }, 4553 + }, 4554 + }, 4555 + }, 4556 + }, 4557 + }, 4558 SocialGrainPhotoExif: { 4559 lexicon: 1, 4560 id: 'social.grain.photo.exif', ··· 4612 }, 4613 }, 4614 }, 4615 + SocialGrainPhotoApplyAlts: { 4616 + lexicon: 1, 4617 + id: 'social.grain.photo.applyAlts', 4618 + defs: { 4619 + main: { 4620 + type: 'procedure', 4621 + description: 'Apply alt texts to photos. Requires auth.', 4622 + input: { 4623 + encoding: 'application/json', 4624 + schema: { 4625 + type: 'object', 4626 + required: ['writes'], 4627 + properties: { 4628 + writes: { 4629 + type: 'array', 4630 + items: { 4631 + type: 'ref', 4632 + ref: 'lex:social.grain.photo.applyAlts#update', 4633 + }, 4634 + }, 4635 + }, 4636 + }, 4637 + }, 4638 + output: { 4639 + encoding: 'application/json', 4640 + schema: { 4641 + type: 'object', 4642 + properties: { 4643 + success: { 4644 + type: 'boolean', 4645 + description: 'True if the writes were successfully applied', 4646 + }, 4647 + }, 4648 + }, 4649 + }, 4650 + }, 4651 + update: { 4652 + type: 'object', 4653 + required: ['photoUri', 'alt'], 4654 + properties: { 4655 + photoUri: { 4656 + type: 'string', 4657 + format: 'at-uri', 4658 + description: 'AT URI of the item to update', 4659 + }, 4660 + alt: { 4661 + type: 'string', 4662 + maxLength: 1000, 4663 + description: 'The alt text to apply to the photo', 4664 + }, 4665 + }, 4666 + }, 4667 + }, 4668 + }, 4669 SocialGrainPhotoGetActorPhotos: { 4670 lexicon: 1, 4671 id: 'social.grain.photo.getActorPhotos', ··· 4723 key: 'tid', 4724 record: { 4725 type: 'object', 4726 + required: ['photo', 'aspectRatio', 'createdAt'], 4727 properties: { 4728 photo: { 4729 type: 'blob', ··· 5056 SocialGrainNotificationGetNotifications: 5057 'social.grain.notification.getNotifications', 5058 SocialGrainCommentDefs: 'social.grain.comment.defs', 5059 + SocialGrainCommentDeleteComment: 'social.grain.comment.deleteComment', 5060 + SocialGrainCommentCreateComment: 'social.grain.comment.createComment', 5061 SocialGrainComment: 'social.grain.comment', 5062 + SocialGrainGalleryDeleteGallery: 'social.grain.gallery.deleteGallery', 5063 SocialGrainGalleryItem: 'social.grain.gallery.item', 5064 + SocialGrainGalleryCreateItem: 'social.grain.gallery.createItem', 5065 + SocialGrainGalleryCreateGallery: 'social.grain.gallery.createGallery', 5066 SocialGrainGalleryDefs: 'social.grain.gallery.defs', 5067 + SocialGrainGalleryDeleteItem: 'social.grain.gallery.deleteItem', 5068 SocialGrainGallery: 'social.grain.gallery', 5069 + SocialGrainGalleryUpdateGallery: 'social.grain.gallery.updateGallery', 5070 + SocialGrainGalleryApplySort: 'social.grain.gallery.applySort', 5071 SocialGrainGalleryGetGalleryThread: 'social.grain.gallery.getGalleryThread', 5072 SocialGrainGalleryGetActorGalleries: 'social.grain.gallery.getActorGalleries', 5073 SocialGrainGalleryGetGallery: 'social.grain.gallery.getGallery', 5074 + SocialGrainGraphDeleteFollow: 'social.grain.graph.deleteFollow', 5075 SocialGrainGraphFollow: 'social.grain.graph.follow', 5076 + SocialGrainGraphCreateFollow: 'social.grain.graph.createFollow', 5077 SocialGrainGraphGetFollowers: 'social.grain.graph.getFollowers', 5078 SocialGrainGraphGetFollows: 'social.grain.graph.getFollows', 5079 + SocialGrainDarkroomGetGalleryComposite: 5080 + 'social.grain.darkroom.getGalleryComposite', 5081 + SocialGrainFavoriteDeleteFavorite: 'social.grain.favorite.deleteFavorite', 5082 + SocialGrainFavoriteCreateFavorite: 'social.grain.favorite.createFavorite', 5083 + SocialGrainFavorite: 'social.grain.favorite', 5084 SocialGrainLabelerDefs: 'social.grain.labeler.defs', 5085 SocialGrainLabelerService: 'social.grain.labeler.service', 5086 SocialGrainFeedGetTimeline: 'social.grain.feed.getTimeline', 5087 SocialGrainActorDefs: 'social.grain.actor.defs', 5088 SocialGrainActorGetProfile: 'social.grain.actor.getProfile', 5089 SocialGrainActorSearchActors: 'social.grain.actor.searchActors', 5090 + SocialGrainActorUpdateAvatar: 'social.grain.actor.updateAvatar', 5091 SocialGrainActorGetActorFavs: 'social.grain.actor.getActorFavs', 5092 SocialGrainActorProfile: 'social.grain.actor.profile', 5093 + SocialGrainActorUpdateProfile: 'social.grain.actor.updateProfile', 5094 SocialGrainPhotoDefs: 'social.grain.photo.defs', 5095 + SocialGrainPhotoDeletePhoto: 'social.grain.photo.deletePhoto', 5096 + SocialGrainPhotoUploadPhoto: 'social.grain.photo.uploadPhoto', 5097 + SocialGrainPhotoCreateExif: 'social.grain.photo.createExif', 5098 SocialGrainPhotoExif: 'social.grain.photo.exif', 5099 + SocialGrainPhotoApplyAlts: 'social.grain.photo.applyAlts', 5100 SocialGrainPhotoGetActorPhotos: 'social.grain.photo.getActorPhotos', 5101 SocialGrainPhoto: 'social.grain.photo', 5102 ComAtprotoLabelDefs: 'com.atproto.label.defs',
+50
notifications/__generated__/types/social/grain/actor/updateAvatar.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import stream from "node:stream"; 5 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 6 + import express from "npm:express"; 7 + import { validate as _validate } from "../../../../lexicons.ts"; 8 + import { is$typed as _is$typed } from "../../../../util.ts"; 9 + 10 + const is$typed = _is$typed, 11 + validate = _validate; 12 + const id = "social.grain.actor.updateAvatar"; 13 + 14 + export interface QueryParams {} 15 + 16 + export type InputSchema = string | Uint8Array | Blob; 17 + 18 + export interface OutputSchema { 19 + /** Indicates whether the avatar update was successful. */ 20 + success?: boolean; 21 + } 22 + 23 + export interface HandlerInput { 24 + encoding: "*/*"; 25 + body: stream.Readable; 26 + } 27 + 28 + export interface HandlerSuccess { 29 + encoding: "application/json"; 30 + body: OutputSchema; 31 + headers?: { [key: string]: string }; 32 + } 33 + 34 + export interface HandlerError { 35 + status: number; 36 + message?: string; 37 + } 38 + 39 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 40 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 41 + auth: HA; 42 + params: QueryParams; 43 + input: HandlerInput; 44 + req: express.Request; 45 + res: express.Response; 46 + resetRouteRateLimits: () => Promise<void>; 47 + }; 48 + export type Handler<HA extends HandlerAuth = never> = ( 49 + ctx: HandlerReqCtx<HA>, 50 + ) => Promise<HandlerOutput> | HandlerOutput;
+53
notifications/__generated__/types/social/grain/actor/updateProfile.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 5 + import express from "npm:express"; 6 + import { validate as _validate } from "../../../../lexicons.ts"; 7 + import { is$typed as _is$typed } from "../../../../util.ts"; 8 + 9 + const is$typed = _is$typed, 10 + validate = _validate; 11 + const id = "social.grain.actor.updateProfile"; 12 + 13 + export interface QueryParams {} 14 + 15 + export interface InputSchema { 16 + displayName?: string; 17 + /** Free-form profile description text. */ 18 + description?: string; 19 + } 20 + 21 + export interface OutputSchema { 22 + /** Indicates whether the profile update was successful. */ 23 + success?: boolean; 24 + } 25 + 26 + export interface HandlerInput { 27 + encoding: "application/json"; 28 + body: InputSchema; 29 + } 30 + 31 + export interface HandlerSuccess { 32 + encoding: "application/json"; 33 + body: OutputSchema; 34 + headers?: { [key: string]: string }; 35 + } 36 + 37 + export interface HandlerError { 38 + status: number; 39 + message?: string; 40 + } 41 + 42 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 43 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 44 + auth: HA; 45 + params: QueryParams; 46 + input: HandlerInput; 47 + req: express.Request; 48 + res: express.Response; 49 + resetRouteRateLimits: () => Promise<void>; 50 + }; 51 + export type Handler<HA extends HandlerAuth = never> = ( 52 + ctx: HandlerReqCtx<HA>, 53 + ) => Promise<HandlerOutput> | HandlerOutput;
+54
notifications/__generated__/types/social/grain/comment/createComment.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 5 + import express from "npm:express"; 6 + import { validate as _validate } from "../../../../lexicons.ts"; 7 + import { is$typed as _is$typed } from "../../../../util.ts"; 8 + 9 + const is$typed = _is$typed, 10 + validate = _validate; 11 + const id = "social.grain.comment.createComment"; 12 + 13 + export interface QueryParams {} 14 + 15 + export interface InputSchema { 16 + text: string; 17 + subject: string; 18 + focus?: string; 19 + replyTo?: string; 20 + } 21 + 22 + export interface OutputSchema { 23 + /** AT URI of the created comment */ 24 + commentUri?: string; 25 + } 26 + 27 + export interface HandlerInput { 28 + encoding: "application/json"; 29 + body: InputSchema; 30 + } 31 + 32 + export interface HandlerSuccess { 33 + encoding: "application/json"; 34 + body: OutputSchema; 35 + headers?: { [key: string]: string }; 36 + } 37 + 38 + export interface HandlerError { 39 + status: number; 40 + message?: string; 41 + } 42 + 43 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 44 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 45 + auth: HA; 46 + params: QueryParams; 47 + input: HandlerInput; 48 + req: express.Request; 49 + res: express.Response; 50 + resetRouteRateLimits: () => Promise<void>; 51 + }; 52 + export type Handler<HA extends HandlerAuth = never> = ( 53 + ctx: HandlerReqCtx<HA>, 54 + ) => Promise<HandlerOutput> | HandlerOutput;
+52
notifications/__generated__/types/social/grain/comment/deleteComment.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 5 + import express from "npm:express"; 6 + import { validate as _validate } from "../../../../lexicons.ts"; 7 + import { is$typed as _is$typed } from "../../../../util.ts"; 8 + 9 + const is$typed = _is$typed, 10 + validate = _validate; 11 + const id = "social.grain.comment.deleteComment"; 12 + 13 + export interface QueryParams {} 14 + 15 + export interface InputSchema { 16 + /** AT URI of the comment to delete */ 17 + uri: string; 18 + } 19 + 20 + export interface OutputSchema { 21 + /** True if the comment was deleted */ 22 + success?: boolean; 23 + } 24 + 25 + export interface HandlerInput { 26 + encoding: "application/json"; 27 + body: InputSchema; 28 + } 29 + 30 + export interface HandlerSuccess { 31 + encoding: "application/json"; 32 + body: OutputSchema; 33 + headers?: { [key: string]: string }; 34 + } 35 + 36 + export interface HandlerError { 37 + status: number; 38 + message?: string; 39 + } 40 + 41 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 42 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 43 + auth: HA; 44 + params: QueryParams; 45 + input: HandlerInput; 46 + req: express.Request; 47 + res: express.Response; 48 + resetRouteRateLimits: () => Promise<void>; 49 + }; 50 + export type Handler<HA extends HandlerAuth = never> = ( 51 + ctx: HandlerReqCtx<HA>, 52 + ) => Promise<HandlerOutput> | HandlerOutput;
+44
notifications/__generated__/types/social/grain/darkroom/getGalleryComposite.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import stream from "node:stream"; 5 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 6 + import express from "npm:express"; 7 + import { validate as _validate } from "../../../../lexicons.ts"; 8 + import { is$typed as _is$typed } from "../../../../util.ts"; 9 + 10 + const is$typed = _is$typed, 11 + validate = _validate; 12 + const id = "social.grain.darkroom.getGalleryComposite"; 13 + 14 + export interface QueryParams { 15 + /** The AT-URI of the gallery to return a composite for. */ 16 + uri: string; 17 + } 18 + 19 + export type InputSchema = undefined; 20 + export type HandlerInput = undefined; 21 + 22 + export interface HandlerSuccess { 23 + encoding: "*/*"; 24 + body: Uint8Array | stream.Readable; 25 + headers?: { [key: string]: string }; 26 + } 27 + 28 + export interface HandlerError { 29 + status: number; 30 + message?: string; 31 + } 32 + 33 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 34 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 35 + auth: HA; 36 + params: QueryParams; 37 + input: HandlerInput; 38 + req: express.Request; 39 + res: express.Response; 40 + resetRouteRateLimits: () => Promise<void>; 41 + }; 42 + export type Handler<HA extends HandlerAuth = never> = ( 43 + ctx: HandlerReqCtx<HA>, 44 + ) => Promise<HandlerOutput> | HandlerOutput;
+52
notifications/__generated__/types/social/grain/favorite/createFavorite.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 5 + import express from "npm:express"; 6 + import { validate as _validate } from "../../../../lexicons.ts"; 7 + import { is$typed as _is$typed } from "../../../../util.ts"; 8 + 9 + const is$typed = _is$typed, 10 + validate = _validate; 11 + const id = "social.grain.favorite.createFavorite"; 12 + 13 + export interface QueryParams {} 14 + 15 + export interface InputSchema { 16 + /** URI of the subject to favorite. */ 17 + subject: string; 18 + } 19 + 20 + export interface OutputSchema { 21 + /** AT URI for the created favorite. */ 22 + favoriteUri: string; 23 + } 24 + 25 + export interface HandlerInput { 26 + encoding: "application/json"; 27 + body: InputSchema; 28 + } 29 + 30 + export interface HandlerSuccess { 31 + encoding: "application/json"; 32 + body: OutputSchema; 33 + headers?: { [key: string]: string }; 34 + } 35 + 36 + export interface HandlerError { 37 + status: number; 38 + message?: string; 39 + } 40 + 41 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 42 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 43 + auth: HA; 44 + params: QueryParams; 45 + input: HandlerInput; 46 + req: express.Request; 47 + res: express.Response; 48 + resetRouteRateLimits: () => Promise<void>; 49 + }; 50 + export type Handler<HA extends HandlerAuth = never> = ( 51 + ctx: HandlerReqCtx<HA>, 52 + ) => Promise<HandlerOutput> | HandlerOutput;
+52
notifications/__generated__/types/social/grain/favorite/deleteFavorite.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 5 + import express from "npm:express"; 6 + import { validate as _validate } from "../../../../lexicons.ts"; 7 + import { is$typed as _is$typed } from "../../../../util.ts"; 8 + 9 + const is$typed = _is$typed, 10 + validate = _validate; 11 + const id = "social.grain.favorite.deleteFavorite"; 12 + 13 + export interface QueryParams {} 14 + 15 + export interface InputSchema { 16 + /** The AT URI of the favorite to delete. */ 17 + uri: string; 18 + } 19 + 20 + export interface OutputSchema { 21 + /** Indicates if the favorite was successfully deleted. */ 22 + success: boolean; 23 + } 24 + 25 + export interface HandlerInput { 26 + encoding: "application/json"; 27 + body: InputSchema; 28 + } 29 + 30 + export interface HandlerSuccess { 31 + encoding: "application/json"; 32 + body: OutputSchema; 33 + headers?: { [key: string]: string }; 34 + } 35 + 36 + export interface HandlerError { 37 + status: number; 38 + message?: string; 39 + } 40 + 41 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 42 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 43 + auth: HA; 44 + params: QueryParams; 45 + input: HandlerInput; 46 + req: express.Request; 47 + res: express.Response; 48 + resetRouteRateLimits: () => Promise<void>; 49 + }; 50 + export type Handler<HA extends HandlerAuth = never> = ( 51 + ctx: HandlerReqCtx<HA>, 52 + ) => Promise<HandlerOutput> | HandlerOutput;
+69
notifications/__generated__/types/social/grain/gallery/applySort.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 5 + import express from "npm:express"; 6 + import { validate as _validate } from "../../../../lexicons.ts"; 7 + import { is$typed as _is$typed } from "../../../../util.ts"; 8 + 9 + const is$typed = _is$typed, 10 + validate = _validate; 11 + const id = "social.grain.gallery.applySort"; 12 + 13 + export interface QueryParams {} 14 + 15 + export interface InputSchema { 16 + writes: Update[]; 17 + } 18 + 19 + export interface OutputSchema { 20 + /** True if the writes were successfully applied */ 21 + success?: boolean; 22 + } 23 + 24 + export interface HandlerInput { 25 + encoding: "application/json"; 26 + body: InputSchema; 27 + } 28 + 29 + export interface HandlerSuccess { 30 + encoding: "application/json"; 31 + body: OutputSchema; 32 + headers?: { [key: string]: string }; 33 + } 34 + 35 + export interface HandlerError { 36 + status: number; 37 + message?: string; 38 + } 39 + 40 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 41 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 42 + auth: HA; 43 + params: QueryParams; 44 + input: HandlerInput; 45 + req: express.Request; 46 + res: express.Response; 47 + resetRouteRateLimits: () => Promise<void>; 48 + }; 49 + export type Handler<HA extends HandlerAuth = never> = ( 50 + ctx: HandlerReqCtx<HA>, 51 + ) => Promise<HandlerOutput> | HandlerOutput; 52 + 53 + export interface Update { 54 + $type?: "social.grain.gallery.applySort#update"; 55 + /** AT URI of the item to update */ 56 + itemUri: string; 57 + /** The position of the item in the gallery, used for ordering */ 58 + position: number; 59 + } 60 + 61 + const hashUpdate = "update"; 62 + 63 + export function isUpdate<V>(v: V) { 64 + return is$typed(v, id, hashUpdate); 65 + } 66 + 67 + export function validateUpdate<V>(v: V) { 68 + return validate<Update & V>(v, id, hashUpdate); 69 + }
+52
notifications/__generated__/types/social/grain/gallery/createGallery.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 5 + import express from "npm:express"; 6 + import { validate as _validate } from "../../../../lexicons.ts"; 7 + import { is$typed as _is$typed } from "../../../../util.ts"; 8 + 9 + const is$typed = _is$typed, 10 + validate = _validate; 11 + const id = "social.grain.gallery.createGallery"; 12 + 13 + export interface QueryParams {} 14 + 15 + export interface InputSchema { 16 + title: string; 17 + description?: string; 18 + } 19 + 20 + export interface OutputSchema { 21 + /** AT URI of the created gallery */ 22 + galleryUri?: string; 23 + } 24 + 25 + export interface HandlerInput { 26 + encoding: "application/json"; 27 + body: InputSchema; 28 + } 29 + 30 + export interface HandlerSuccess { 31 + encoding: "application/json"; 32 + body: OutputSchema; 33 + headers?: { [key: string]: string }; 34 + } 35 + 36 + export interface HandlerError { 37 + status: number; 38 + message?: string; 39 + } 40 + 41 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 42 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 43 + auth: HA; 44 + params: QueryParams; 45 + input: HandlerInput; 46 + req: express.Request; 47 + res: express.Response; 48 + resetRouteRateLimits: () => Promise<void>; 49 + }; 50 + export type Handler<HA extends HandlerAuth = never> = ( 51 + ctx: HandlerReqCtx<HA>, 52 + ) => Promise<HandlerOutput> | HandlerOutput;
+56
notifications/__generated__/types/social/grain/gallery/createItem.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 5 + import express from "npm:express"; 6 + import { validate as _validate } from "../../../../lexicons.ts"; 7 + import { is$typed as _is$typed } from "../../../../util.ts"; 8 + 9 + const is$typed = _is$typed, 10 + validate = _validate; 11 + const id = "social.grain.gallery.createItem"; 12 + 13 + export interface QueryParams {} 14 + 15 + export interface InputSchema { 16 + /** AT URI of the gallery to create the item in */ 17 + galleryUri: string; 18 + /** AT URI of the photo to be added as an item */ 19 + photoUri: string; 20 + /** Position of the item in the gallery, used for ordering */ 21 + position: number; 22 + } 23 + 24 + export interface OutputSchema { 25 + /** AT URI of the created gallery item */ 26 + itemUri?: string; 27 + } 28 + 29 + export interface HandlerInput { 30 + encoding: "application/json"; 31 + body: InputSchema; 32 + } 33 + 34 + export interface HandlerSuccess { 35 + encoding: "application/json"; 36 + body: OutputSchema; 37 + headers?: { [key: string]: string }; 38 + } 39 + 40 + export interface HandlerError { 41 + status: number; 42 + message?: string; 43 + } 44 + 45 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 46 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 47 + auth: HA; 48 + params: QueryParams; 49 + input: HandlerInput; 50 + req: express.Request; 51 + res: express.Response; 52 + resetRouteRateLimits: () => Promise<void>; 53 + }; 54 + export type Handler<HA extends HandlerAuth = never> = ( 55 + ctx: HandlerReqCtx<HA>, 56 + ) => Promise<HandlerOutput> | HandlerOutput;
+54
notifications/__generated__/types/social/grain/gallery/deleteGallery.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 5 + import express from "npm:express"; 6 + import { validate as _validate } from "../../../../lexicons.ts"; 7 + import { is$typed as _is$typed } from "../../../../util.ts"; 8 + 9 + const is$typed = _is$typed, 10 + validate = _validate; 11 + const id = "social.grain.gallery.deleteGallery"; 12 + 13 + export interface QueryParams {} 14 + 15 + export interface InputSchema { 16 + /** Unique identifier of the gallery to delete */ 17 + uri: string; 18 + /** If true, will also delete any associated items in the gallery. */ 19 + cascade: boolean; 20 + } 21 + 22 + export interface OutputSchema { 23 + /** True if the gallery was deleted */ 24 + success?: boolean; 25 + } 26 + 27 + export interface HandlerInput { 28 + encoding: "application/json"; 29 + body: InputSchema; 30 + } 31 + 32 + export interface HandlerSuccess { 33 + encoding: "application/json"; 34 + body: OutputSchema; 35 + headers?: { [key: string]: string }; 36 + } 37 + 38 + export interface HandlerError { 39 + status: number; 40 + message?: string; 41 + } 42 + 43 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 44 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 45 + auth: HA; 46 + params: QueryParams; 47 + input: HandlerInput; 48 + req: express.Request; 49 + res: express.Response; 50 + resetRouteRateLimits: () => Promise<void>; 51 + }; 52 + export type Handler<HA extends HandlerAuth = never> = ( 53 + ctx: HandlerReqCtx<HA>, 54 + ) => Promise<HandlerOutput> | HandlerOutput;
+52
notifications/__generated__/types/social/grain/gallery/deleteItem.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 5 + import express from "npm:express"; 6 + import { validate as _validate } from "../../../../lexicons.ts"; 7 + import { is$typed as _is$typed } from "../../../../util.ts"; 8 + 9 + const is$typed = _is$typed, 10 + validate = _validate; 11 + const id = "social.grain.gallery.deleteItem"; 12 + 13 + export interface QueryParams {} 14 + 15 + export interface InputSchema { 16 + /** AT URI of the gallery to create the item in */ 17 + uri: string; 18 + } 19 + 20 + export interface OutputSchema { 21 + /** True if the gallery item was deleted */ 22 + success?: boolean; 23 + } 24 + 25 + export interface HandlerInput { 26 + encoding: "application/json"; 27 + body: InputSchema; 28 + } 29 + 30 + export interface HandlerSuccess { 31 + encoding: "application/json"; 32 + body: OutputSchema; 33 + headers?: { [key: string]: string }; 34 + } 35 + 36 + export interface HandlerError { 37 + status: number; 38 + message?: string; 39 + } 40 + 41 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 42 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 43 + auth: HA; 44 + params: QueryParams; 45 + input: HandlerInput; 46 + req: express.Request; 47 + res: express.Response; 48 + resetRouteRateLimits: () => Promise<void>; 49 + }; 50 + export type Handler<HA extends HandlerAuth = never> = ( 51 + ctx: HandlerReqCtx<HA>, 52 + ) => Promise<HandlerOutput> | HandlerOutput;
+54
notifications/__generated__/types/social/grain/gallery/updateGallery.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 5 + import express from "npm:express"; 6 + import { validate as _validate } from "../../../../lexicons.ts"; 7 + import { is$typed as _is$typed } from "../../../../util.ts"; 8 + 9 + const is$typed = _is$typed, 10 + validate = _validate; 11 + const id = "social.grain.gallery.updateGallery"; 12 + 13 + export interface QueryParams {} 14 + 15 + export interface InputSchema { 16 + /** The AT-URI of the gallery to update */ 17 + galleryUri: string; 18 + title: string; 19 + description?: string; 20 + } 21 + 22 + export interface OutputSchema { 23 + /** True if the gallery was updated */ 24 + success?: boolean; 25 + } 26 + 27 + export interface HandlerInput { 28 + encoding: "application/json"; 29 + body: InputSchema; 30 + } 31 + 32 + export interface HandlerSuccess { 33 + encoding: "application/json"; 34 + body: OutputSchema; 35 + headers?: { [key: string]: string }; 36 + } 37 + 38 + export interface HandlerError { 39 + status: number; 40 + message?: string; 41 + } 42 + 43 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 44 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 45 + auth: HA; 46 + params: QueryParams; 47 + input: HandlerInput; 48 + req: express.Request; 49 + res: express.Response; 50 + resetRouteRateLimits: () => Promise<void>; 51 + }; 52 + export type Handler<HA extends HandlerAuth = never> = ( 53 + ctx: HandlerReqCtx<HA>, 54 + ) => Promise<HandlerOutput> | HandlerOutput;
+52
notifications/__generated__/types/social/grain/graph/createFollow.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 5 + import express from "npm:express"; 6 + import { validate as _validate } from "../../../../lexicons.ts"; 7 + import { is$typed as _is$typed } from "../../../../util.ts"; 8 + 9 + const is$typed = _is$typed, 10 + validate = _validate; 11 + const id = "social.grain.graph.createFollow"; 12 + 13 + export interface QueryParams {} 14 + 15 + export interface InputSchema { 16 + /** DID of the actor to follow. */ 17 + subject: string; 18 + } 19 + 20 + export interface OutputSchema { 21 + /** AT URI of the created follow record. */ 22 + followUri?: string; 23 + } 24 + 25 + export interface HandlerInput { 26 + encoding: "application/json"; 27 + body: InputSchema; 28 + } 29 + 30 + export interface HandlerSuccess { 31 + encoding: "application/json"; 32 + body: OutputSchema; 33 + headers?: { [key: string]: string }; 34 + } 35 + 36 + export interface HandlerError { 37 + status: number; 38 + message?: string; 39 + } 40 + 41 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 42 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 43 + auth: HA; 44 + params: QueryParams; 45 + input: HandlerInput; 46 + req: express.Request; 47 + res: express.Response; 48 + resetRouteRateLimits: () => Promise<void>; 49 + }; 50 + export type Handler<HA extends HandlerAuth = never> = ( 51 + ctx: HandlerReqCtx<HA>, 52 + ) => Promise<HandlerOutput> | HandlerOutput;
+52
notifications/__generated__/types/social/grain/graph/deleteFollow.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 5 + import express from "npm:express"; 6 + import { validate as _validate } from "../../../../lexicons.ts"; 7 + import { is$typed as _is$typed } from "../../../../util.ts"; 8 + 9 + const is$typed = _is$typed, 10 + validate = _validate; 11 + const id = "social.grain.graph.deleteFollow"; 12 + 13 + export interface QueryParams {} 14 + 15 + export interface InputSchema { 16 + /** AT URI of the follow record to delete */ 17 + uri: string; 18 + } 19 + 20 + export interface OutputSchema { 21 + /** True if the follow was deleted */ 22 + success?: boolean; 23 + } 24 + 25 + export interface HandlerInput { 26 + encoding: "application/json"; 27 + body: InputSchema; 28 + } 29 + 30 + export interface HandlerSuccess { 31 + encoding: "application/json"; 32 + body: OutputSchema; 33 + headers?: { [key: string]: string }; 34 + } 35 + 36 + export interface HandlerError { 37 + status: number; 38 + message?: string; 39 + } 40 + 41 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 42 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 43 + auth: HA; 44 + params: QueryParams; 45 + input: HandlerInput; 46 + req: express.Request; 47 + res: express.Response; 48 + resetRouteRateLimits: () => Promise<void>; 49 + }; 50 + export type Handler<HA extends HandlerAuth = never> = ( 51 + ctx: HandlerReqCtx<HA>, 52 + ) => Promise<HandlerOutput> | HandlerOutput;
+3 -3
notifications/__generated__/types/social/grain/photo.ts
··· 15 $type: 'social.grain.photo' 16 photo: BlobRef 17 /** Alt text description of the image, for accessibility. */ 18 - alt: string 19 - aspectRatio?: SocialGrainDefs.AspectRatio 20 - createdAt?: string 21 [k: string]: unknown 22 } 23
··· 15 $type: 'social.grain.photo' 16 photo: BlobRef 17 /** Alt text description of the image, for accessibility. */ 18 + alt?: string 19 + aspectRatio: SocialGrainDefs.AspectRatio 20 + createdAt: string 21 [k: string]: unknown 22 } 23
+69
notifications/__generated__/types/social/grain/photo/applyAlts.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 5 + import express from "npm:express"; 6 + import { validate as _validate } from "../../../../lexicons.ts"; 7 + import { is$typed as _is$typed } from "../../../../util.ts"; 8 + 9 + const is$typed = _is$typed, 10 + validate = _validate; 11 + const id = "social.grain.photo.applyAlts"; 12 + 13 + export interface QueryParams {} 14 + 15 + export interface InputSchema { 16 + writes: Update[]; 17 + } 18 + 19 + export interface OutputSchema { 20 + /** True if the writes were successfully applied */ 21 + success?: boolean; 22 + } 23 + 24 + export interface HandlerInput { 25 + encoding: "application/json"; 26 + body: InputSchema; 27 + } 28 + 29 + export interface HandlerSuccess { 30 + encoding: "application/json"; 31 + body: OutputSchema; 32 + headers?: { [key: string]: string }; 33 + } 34 + 35 + export interface HandlerError { 36 + status: number; 37 + message?: string; 38 + } 39 + 40 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 41 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 42 + auth: HA; 43 + params: QueryParams; 44 + input: HandlerInput; 45 + req: express.Request; 46 + res: express.Response; 47 + resetRouteRateLimits: () => Promise<void>; 48 + }; 49 + export type Handler<HA extends HandlerAuth = never> = ( 50 + ctx: HandlerReqCtx<HA>, 51 + ) => Promise<HandlerOutput> | HandlerOutput; 52 + 53 + export interface Update { 54 + $type?: "social.grain.photo.applyAlts#update"; 55 + /** AT URI of the item to update */ 56 + photoUri: string; 57 + /** The alt text to apply to the photo */ 58 + alt: string; 59 + } 60 + 61 + const hashUpdate = "update"; 62 + 63 + export function isUpdate<V>(v: V) { 64 + return is$typed(v, id, hashUpdate); 65 + } 66 + 67 + export function validateUpdate<V>(v: V) { 68 + return validate<Update & V>(v, id, hashUpdate); 69 + }
+61
notifications/__generated__/types/social/grain/photo/createExif.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 5 + import express from "npm:express"; 6 + import { validate as _validate } from "../../../../lexicons.ts"; 7 + import { is$typed as _is$typed } from "../../../../util.ts"; 8 + 9 + const is$typed = _is$typed, 10 + validate = _validate; 11 + const id = "social.grain.photo.createExif"; 12 + 13 + export interface QueryParams {} 14 + 15 + export interface InputSchema { 16 + photo: string; 17 + dateTimeOriginal?: string; 18 + exposureTime?: number; 19 + fNumber?: number; 20 + flash?: string; 21 + focalLengthIn35mmFormat?: number; 22 + iSO?: number; 23 + lensMake?: string; 24 + lensModel?: string; 25 + make?: string; 26 + model?: string; 27 + } 28 + 29 + export interface OutputSchema { 30 + /** AT URI of the created gallery */ 31 + exifUri?: string; 32 + } 33 + 34 + export interface HandlerInput { 35 + encoding: "application/json"; 36 + body: InputSchema; 37 + } 38 + 39 + export interface HandlerSuccess { 40 + encoding: "application/json"; 41 + body: OutputSchema; 42 + headers?: { [key: string]: string }; 43 + } 44 + 45 + export interface HandlerError { 46 + status: number; 47 + message?: string; 48 + } 49 + 50 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 51 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 52 + auth: HA; 53 + params: QueryParams; 54 + input: HandlerInput; 55 + req: express.Request; 56 + res: express.Response; 57 + resetRouteRateLimits: () => Promise<void>; 58 + }; 59 + export type Handler<HA extends HandlerAuth = never> = ( 60 + ctx: HandlerReqCtx<HA>, 61 + ) => Promise<HandlerOutput> | HandlerOutput;
+5 -4
notifications/__generated__/types/social/grain/photo/defs.ts
··· 24 /** 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. */ 25 fullsize: string 26 /** Alt text description of the image, for accessibility. */ 27 - alt: string 28 - aspectRatio?: SocialGrainDefs.AspectRatio 29 exif?: ExifView 30 gallery?: GalleryState 31 } ··· 42 43 export interface ExifView { 44 $type?: 'social.grain.photo.defs#exifView' 45 - uri?: string 46 - cid?: string 47 photo: string 48 createdAt: string 49 dateTimeOriginal?: string 50 exposureTime?: string
··· 24 /** 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. */ 25 fullsize: string 26 /** Alt text description of the image, for accessibility. */ 27 + alt?: string 28 + aspectRatio: SocialGrainDefs.AspectRatio 29 exif?: ExifView 30 gallery?: GalleryState 31 } ··· 42 43 export interface ExifView { 44 $type?: 'social.grain.photo.defs#exifView' 45 + uri: string 46 + cid: string 47 photo: string 48 + record: { [_ in string]: unknown } 49 createdAt: string 50 dateTimeOriginal?: string 51 exposureTime?: string
+54
notifications/__generated__/types/social/grain/photo/deletePhoto.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 5 + import express from "npm:express"; 6 + import { validate as _validate } from "../../../../lexicons.ts"; 7 + import { is$typed as _is$typed } from "../../../../util.ts"; 8 + 9 + const is$typed = _is$typed, 10 + validate = _validate; 11 + const id = "social.grain.photo.deletePhoto"; 12 + 13 + export interface QueryParams {} 14 + 15 + export interface InputSchema { 16 + /** AT URI of the photo to delete. */ 17 + uri: string; 18 + /** If true, will also delete any associated EXIF data and gallery items. */ 19 + cascade: boolean; 20 + } 21 + 22 + export interface OutputSchema { 23 + /** Indicates if the photo was successfully deleted. */ 24 + success: boolean; 25 + } 26 + 27 + export interface HandlerInput { 28 + encoding: "application/json"; 29 + body: InputSchema; 30 + } 31 + 32 + export interface HandlerSuccess { 33 + encoding: "application/json"; 34 + body: OutputSchema; 35 + headers?: { [key: string]: string }; 36 + } 37 + 38 + export interface HandlerError { 39 + status: number; 40 + message?: string; 41 + } 42 + 43 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 44 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 45 + auth: HA; 46 + params: QueryParams; 47 + input: HandlerInput; 48 + req: express.Request; 49 + res: express.Response; 50 + resetRouteRateLimits: () => Promise<void>; 51 + }; 52 + export type Handler<HA extends HandlerAuth = never> = ( 53 + ctx: HandlerReqCtx<HA>, 54 + ) => Promise<HandlerOutput> | HandlerOutput;
+50
notifications/__generated__/types/social/grain/photo/uploadPhoto.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import stream from "node:stream"; 5 + import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server"; 6 + import express from "npm:express"; 7 + import { validate as _validate } from "../../../../lexicons.ts"; 8 + import { is$typed as _is$typed } from "../../../../util.ts"; 9 + 10 + const is$typed = _is$typed, 11 + validate = _validate; 12 + const id = "social.grain.photo.uploadPhoto"; 13 + 14 + export interface QueryParams {} 15 + 16 + export type InputSchema = string | Uint8Array | Blob; 17 + 18 + export interface OutputSchema { 19 + /** AT URI of the created photo */ 20 + photoUri?: string; 21 + } 22 + 23 + export interface HandlerInput { 24 + encoding: "*/*"; 25 + body: stream.Readable; 26 + } 27 + 28 + export interface HandlerSuccess { 29 + encoding: "application/json"; 30 + body: OutputSchema; 31 + headers?: { [key: string]: string }; 32 + } 33 + 34 + export interface HandlerError { 35 + status: number; 36 + message?: string; 37 + } 38 + 39 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough; 40 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 41 + auth: HA; 42 + params: QueryParams; 43 + input: HandlerInput; 44 + req: express.Request; 45 + res: express.Response; 46 + resetRouteRateLimits: () => Promise<void>; 47 + }; 48 + export type Handler<HA extends HandlerAuth = never> = ( 49 + ctx: HandlerReqCtx<HA>, 50 + ) => Promise<HandlerOutput> | HandlerOutput;
+1 -1
notifications/deno.json
··· 7 "start": "deno run -A ./main.ts", 8 "dev": "deno run \"dev:*\"", 9 "dev:server": "deno run -A --env-file --watch ./main.ts", 10 - "codegen": "deno run -A jsr:@bigmoves/bff-cli@0.3.0-beta.42 lexgen" 11 }, 12 "nodeModulesDir": "auto" 13 }
··· 7 "start": "deno run -A ./main.ts", 8 "dev": "deno run \"dev:*\"", 9 "dev:server": "deno run -A --env-file --watch ./main.ts", 10 + "codegen": "deno run -A jsr:@bigmoves/bff-cli@0.3.0-beta.57 lexgen --lexicon-dir=../lexicons" 11 }, 12 "nodeModulesDir": "auto" 13 }
-695
notifications/lexicons/app/bsky/actor/defs.json
··· 1 - { 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 - }
···
-64
notifications/lexicons/app/bsky/actor/profile.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "app.bsky.actor.profile", 4 - "defs": { 5 - "main": { 6 - "key": "literal:self", 7 - "type": "record", 8 - "record": { 9 - "type": "object", 10 - "properties": { 11 - "avatar": { 12 - "type": "blob", 13 - "accept": [ 14 - "image/png", 15 - "image/jpeg" 16 - ], 17 - "maxSize": 1000000, 18 - "description": "Small image to be displayed next to posts from account. AKA, 'profile picture'" 19 - }, 20 - "banner": { 21 - "type": "blob", 22 - "accept": [ 23 - "image/png", 24 - "image/jpeg" 25 - ], 26 - "maxSize": 1000000, 27 - "description": "Larger horizontal image to display behind profile view." 28 - }, 29 - "labels": { 30 - "refs": [ 31 - "com.atproto.label.defs#selfLabels" 32 - ], 33 - "type": "union", 34 - "description": "Self-label values, specific to the Bluesky application, on the overall account." 35 - }, 36 - "createdAt": { 37 - "type": "string", 38 - "format": "datetime" 39 - }, 40 - "pinnedPost": { 41 - "ref": "com.atproto.repo.strongRef", 42 - "type": "ref" 43 - }, 44 - "description": { 45 - "type": "string", 46 - "maxLength": 2560, 47 - "description": "Free-form profile description text.", 48 - "maxGraphemes": 256 49 - }, 50 - "displayName": { 51 - "type": "string", 52 - "maxLength": 640, 53 - "maxGraphemes": 64 54 - }, 55 - "joinedViaStarterPack": { 56 - "ref": "com.atproto.repo.strongRef", 57 - "type": "ref" 58 - } 59 - } 60 - }, 61 - "description": "A declaration of a Bluesky account profile." 62 - } 63 - } 64 - }
···
-24
notifications/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
notifications/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
notifications/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
notifications/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
notifications/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
notifications/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
notifications/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
notifications/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
notifications/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
notifications/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 - }
···
-28
notifications/lexicons/app/bsky/graph/follow.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "app.bsky.graph.follow", 4 - "defs": { 5 - "main": { 6 - "key": "tid", 7 - "type": "record", 8 - "record": { 9 - "type": "object", 10 - "required": [ 11 - "subject", 12 - "createdAt" 13 - ], 14 - "properties": { 15 - "subject": { 16 - "type": "string", 17 - "format": "did" 18 - }, 19 - "createdAt": { 20 - "type": "string", 21 - "format": "datetime" 22 - } 23 - } 24 - }, 25 - "description": "Record declaring a social 'follow' relationship of another account. Duplicate follows will be ignored by the AppView." 26 - } 27 - } 28 - }
···
-128
notifications/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
notifications/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 - }
···
-192
notifications/lexicons/com/atproto/label/defs.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "com.atproto.label.defs", 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", 22 - "description": "Timestamp when this label was created." 23 - }, 24 - "exp": { 25 - "type": "string", 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 - }
···
-55
notifications/lexicons/com/atproto/moderation/defs.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "com.atproto.moderation.defs", 4 - "defs": { 5 - "reasonRude": { 6 - "type": "token", 7 - "description": "Rude, harassing, explicit, or otherwise unwelcoming behavior" 8 - }, 9 - "reasonSpam": { 10 - "type": "token", 11 - "description": "Spam: frequent unwanted promotion, replies, mentions" 12 - }, 13 - "reasonType": { 14 - "type": "string", 15 - "knownValues": [ 16 - "com.atproto.moderation.defs#reasonSpam", 17 - "com.atproto.moderation.defs#reasonViolation", 18 - "com.atproto.moderation.defs#reasonMisleading", 19 - "com.atproto.moderation.defs#reasonSexual", 20 - "com.atproto.moderation.defs#reasonRude", 21 - "com.atproto.moderation.defs#reasonOther", 22 - "com.atproto.moderation.defs#reasonAppeal" 23 - ] 24 - }, 25 - "reasonOther": { 26 - "type": "token", 27 - "description": "Other: reports not falling under another report category" 28 - }, 29 - "subjectType": { 30 - "type": "string", 31 - "description": "Tag describing a type of subject that might be reported.", 32 - "knownValues": [ 33 - "account", 34 - "record", 35 - "chat" 36 - ] 37 - }, 38 - "reasonAppeal": { 39 - "type": "token", 40 - "description": "Appeal: appeal a previously taken moderation action" 41 - }, 42 - "reasonSexual": { 43 - "type": "token", 44 - "description": "Unwanted or mislabeled sexual content" 45 - }, 46 - "reasonViolation": { 47 - "type": "token", 48 - "description": "Direct violation of server rules, laws, terms of service" 49 - }, 50 - "reasonMisleading": { 51 - "type": "token", 52 - "description": "Misleading identity, affiliation, or content" 53 - } 54 - } 55 - }
···
-24
notifications/lexicons/com/atproto/repo/strongRef.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "com.atproto.repo.strongRef", 4 - "description": "A URI with a content-hash fingerprint.", 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 - }
···
-71
notifications/lexicons/sh/tangled/actor/profile.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "sh.tangled.actor.profile", 4 - "defs": { 5 - "main": { 6 - "type": "record", 7 - "description": "A declaration of a Tangled account profile.", 8 - "key": "literal:self", 9 - "record": { 10 - "type": "object", 11 - "required": [ 12 - "bluesky" 13 - ], 14 - "properties": { 15 - "description": { 16 - "type": "string", 17 - "description": "Free-form profile description text.", 18 - "maxGraphemes": 256, 19 - "maxLength": 2560 20 - }, 21 - "links": { 22 - "type": "array", 23 - "minLength": 0, 24 - "maxLength": 5, 25 - "items": { 26 - "type": "string", 27 - "description": "Any URI, intended for social profiles or websites, can be used to link DIDs/AT-URIs too." 28 - } 29 - }, 30 - "stats": { 31 - "type": "array", 32 - "minLength": 0, 33 - "maxLength": 2, 34 - "items": { 35 - "type": "string", 36 - "description": "Vanity stats.", 37 - "enum": [ 38 - "merged-pull-request-count", 39 - "closed-pull-request-count", 40 - "open-pull-request-count", 41 - "open-issue-count", 42 - "closed-issue-count", 43 - "repository-count" 44 - ] 45 - } 46 - }, 47 - "bluesky": { 48 - "type": "boolean", 49 - "description": "Include link to this account on Bluesky." 50 - }, 51 - "location": { 52 - "type": "string", 53 - "description": "Free-form location text.", 54 - "maxGraphemes": 40, 55 - "maxLength": 400 56 - }, 57 - "pinnedRepositories": { 58 - "type": "array", 59 - "description": "Any ATURI, it is up to appviews to validate these fields.", 60 - "minLength": 0, 61 - "maxLength": 6, 62 - "items": { 63 - "type": "string", 64 - "format": "at-uri" 65 - } 66 - } 67 - } 68 - } 69 - } 70 - } 71 - }
···
-27
notifications/lexicons/sh/tangled/graph/follow.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "sh.tangled.graph.follow", 4 - "defs": { 5 - "main": { 6 - "type": "record", 7 - "key": "tid", 8 - "record": { 9 - "type": "object", 10 - "required": [ 11 - "subject", 12 - "createdAt" 13 - ], 14 - "properties": { 15 - "subject": { 16 - "type": "string", 17 - "format": "did" 18 - }, 19 - "createdAt": { 20 - "type": "string", 21 - "format": "datetime" 22 - } 23 - } 24 - } 25 - } 26 - } 27 - }
···
-77
notifications/lexicons/social/grain/actor/defs.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.actor.defs", 4 - "defs": { 5 - "profileView": { 6 - "type": "object", 7 - "required": ["cid", "did", "handle"], 8 - "properties": { 9 - "cid": { "type": "string", "format": "cid" }, 10 - "did": { "type": "string", "format": "did" }, 11 - "handle": { "type": "string", "format": "handle" }, 12 - "displayName": { 13 - "type": "string", 14 - "maxGraphemes": 64, 15 - "maxLength": 640 16 - }, 17 - "description": { 18 - "type": "string", 19 - "maxLength": 2560, 20 - "maxGraphemes": 256 21 - }, 22 - "labels": { 23 - "type": "array", 24 - "items": { 25 - "ref": "com.atproto.label.defs#label", 26 - "type": "ref" 27 - } 28 - }, 29 - "avatar": { "type": "string", "format": "uri" }, 30 - "createdAt": { "type": "string", "format": "datetime" } 31 - } 32 - }, 33 - "profileViewDetailed": { 34 - "type": "object", 35 - "required": ["cid", "did", "handle"], 36 - "properties": { 37 - "cid": { "type": "string", "format": "cid" }, 38 - "did": { "type": "string", "format": "did" }, 39 - "handle": { "type": "string", "format": "handle" }, 40 - "displayName": { 41 - "type": "string", 42 - "maxGraphemes": 64, 43 - "maxLength": 640 44 - }, 45 - "description": { 46 - "type": "string", 47 - "maxGraphemes": 256, 48 - "maxLength": 2560 49 - }, 50 - "avatar": { "type": "string", "format": "uri" }, 51 - "cameras": { 52 - "type": "array", 53 - "items": { "type": "string" }, 54 - "description": "List of camera make and models used by this actor derived from EXIF data of photos linked to galleries." 55 - }, 56 - "followersCount": { "type": "integer" }, 57 - "followsCount": { "type": "integer" }, 58 - "galleryCount": { "type": "integer" }, 59 - "indexedAt": { "type": "string", "format": "datetime" }, 60 - "createdAt": { "type": "string", "format": "datetime" }, 61 - "viewer": { "type": "ref", "ref": "#viewerState" }, 62 - "labels": { 63 - "type": "array", 64 - "items": { "type": "ref", "ref": "com.atproto.label.defs#label" } 65 - } 66 - } 67 - }, 68 - "viewerState": { 69 - "type": "object", 70 - "description": "Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests.", 71 - "properties": { 72 - "following": { "type": "string", "format": "at-uri" }, 73 - "followedBy": { "type": "string", "format": "at-uri" } 74 - } 75 - } 76 - } 77 - }
···
-41
notifications/lexicons/social/grain/actor/getActorFavs.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.actor.getActorFavs", 4 - "defs": { 5 - "main": { 6 - "type": "query", 7 - "description": "Get a view of an actor's favorite galleries. Does not require auth.", 8 - "parameters": { 9 - "type": "params", 10 - "required": ["actor"], 11 - "properties": { 12 - "actor": { "type": "string", "format": "at-identifier" }, 13 - "limit": { 14 - "type": "integer", 15 - "minimum": 1, 16 - "maximum": 100, 17 - "default": 50 18 - }, 19 - "cursor": { "type": "string" } 20 - } 21 - }, 22 - "output": { 23 - "encoding": "application/json", 24 - "schema": { 25 - "type": "object", 26 - "required": ["items"], 27 - "properties": { 28 - "cursor": { "type": "string" }, 29 - "items": { 30 - "type": "array", 31 - "items": { 32 - "type": "ref", 33 - "ref": "social.grain.gallery.defs#galleryView" 34 - } 35 - } 36 - } 37 - } 38 - } 39 - } 40 - } 41 - }
···
-28
notifications/lexicons/social/grain/actor/getProfile.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.actor.getProfile", 4 - "defs": { 5 - "main": { 6 - "type": "query", 7 - "description": "Get detailed profile view of an actor. Does not require auth, but contains relevant metadata with auth.", 8 - "parameters": { 9 - "type": "params", 10 - "required": ["actor"], 11 - "properties": { 12 - "actor": { 13 - "type": "string", 14 - "format": "at-identifier", 15 - "description": "Handle or DID of account to fetch profile of." 16 - } 17 - } 18 - }, 19 - "output": { 20 - "encoding": "application/json", 21 - "schema": { 22 - "type": "ref", 23 - "ref": "social.grain.actor.defs#profileViewDetailed" 24 - } 25 - } 26 - } 27 - } 28 - }
···
-34
notifications/lexicons/social/grain/actor/profile.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.actor.profile", 4 - "defs": { 5 - "main": { 6 - "type": "record", 7 - "description": "A declaration of a basic account profile.", 8 - "key": "literal:self", 9 - "record": { 10 - "type": "object", 11 - "properties": { 12 - "displayName": { 13 - "type": "string", 14 - "maxGraphemes": 64, 15 - "maxLength": 640 16 - }, 17 - "description": { 18 - "type": "string", 19 - "description": "Free-form profile description text.", 20 - "maxGraphemes": 256, 21 - "maxLength": 2560 22 - }, 23 - "avatar": { 24 - "type": "blob", 25 - "description": "Small image to be displayed next to posts from account. AKA, 'profile picture'", 26 - "accept": ["image/png", "image/jpeg"], 27 - "maxSize": 1000000 28 - }, 29 - "createdAt": { "type": "string", "format": "datetime" } 30 - } 31 - } 32 - } 33 - } 34 - }
···
-43
notifications/lexicons/social/grain/actor/searchActors.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.actor.searchActors", 4 - "defs": { 5 - "main": { 6 - "type": "query", 7 - "description": "Find actors (profiles) matching search criteria. Does not require auth.", 8 - "parameters": { 9 - "type": "params", 10 - "properties": { 11 - "q": { 12 - "type": "string", 13 - "description": "Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended." 14 - }, 15 - "limit": { 16 - "type": "integer", 17 - "minimum": 1, 18 - "maximum": 100, 19 - "default": 25 20 - }, 21 - "cursor": { "type": "string" } 22 - } 23 - }, 24 - "output": { 25 - "encoding": "application/json", 26 - "schema": { 27 - "type": "object", 28 - "required": ["actors"], 29 - "properties": { 30 - "cursor": { "type": "string" }, 31 - "actors": { 32 - "type": "array", 33 - "items": { 34 - "type": "ref", 35 - "ref": "social.grain.actor.defs#profileView" 36 - } 37 - } 38 - } 39 - } 40 - } 41 - } 42 - } 43 - }
···
-42
notifications/lexicons/social/grain/comment/comment.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.comment", 4 - "defs": { 5 - "main": { 6 - "type": "record", 7 - "key": "tid", 8 - "record": { 9 - "type": "object", 10 - "required": ["text", "subject", "createdAt"], 11 - "properties": { 12 - "text": { 13 - "type": "string", 14 - "maxLength": 3000, 15 - "maxGraphemes": 300 16 - }, 17 - "facets": { 18 - "type": "array", 19 - "description": "Annotations of description text (mentions and URLs, hashtags, etc)", 20 - "items": { "type": "ref", "ref": "app.bsky.richtext.facet" } 21 - }, 22 - "subject": { 23 - "type": "string", 24 - "format": "at-uri" 25 - }, 26 - "focus": { 27 - "type": "string", 28 - "format": "at-uri" 29 - }, 30 - "replyTo": { 31 - "type": "string", 32 - "format": "at-uri" 33 - }, 34 - "createdAt": { 35 - "type": "string", 36 - "format": "datetime" 37 - } 38 - } 39 - } 40 - } 41 - } 42 - }
···
-52
notifications/lexicons/social/grain/comment/defs.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.comment.defs", 4 - "defs": { 5 - "commentView": { 6 - "type": "object", 7 - "required": ["uri", "cid", "author", "text", "createdAt"], 8 - "properties": { 9 - "uri": { "type": "string", "format": "at-uri" }, 10 - "cid": { "type": "string", "format": "cid" }, 11 - "author": { 12 - "type": "ref", 13 - "ref": "social.grain.actor.defs#profileView" 14 - }, 15 - "record": { "type": "unknown" }, 16 - "text": { 17 - "type": "string", 18 - "maxLength": 3000, 19 - "maxGraphemes": 300 20 - }, 21 - "facets": { 22 - "type": "array", 23 - "description": "Annotations of description text (mentions and URLs, hashtags, etc)", 24 - "items": { "type": "ref", "ref": "app.bsky.richtext.facet" } 25 - }, 26 - "subject": { 27 - "type": "union", 28 - "refs": [ 29 - "social.grain.gallery.defs#galleryView" 30 - ], 31 - "description": "The subject of the comment, which can be a gallery or a photo." 32 - }, 33 - "focus": { 34 - "type": "union", 35 - "refs": [ 36 - "social.grain.photo.defs#photoView" 37 - ], 38 - "description": "The photo that the comment is focused on, if applicable." 39 - }, 40 - "replyTo": { 41 - "type": "string", 42 - "format": "at-uri", 43 - "description": "The URI of the comment this comment is replying to, if applicable." 44 - }, 45 - "createdAt": { 46 - "type": "string", 47 - "format": "datetime" 48 - } 49 - } 50 - } 51 - } 52 - }
···
-15
notifications/lexicons/social/grain/defs.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.defs", 4 - "defs": { 5 - "aspectRatio": { 6 - "type": "object", 7 - "description": "width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit.", 8 - "required": ["width", "height"], 9 - "properties": { 10 - "width": { "type": "integer", "minimum": 1 }, 11 - "height": { "type": "integer", "minimum": 1 } 12 - } 13 - } 14 - } 15 - }
···
-24
notifications/lexicons/social/grain/favorite.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.favorite", 4 - "defs": { 5 - "main": { 6 - "type": "record", 7 - "key": "tid", 8 - "record": { 9 - "type": "object", 10 - "required": ["createdAt", "subject"], 11 - "properties": { 12 - "createdAt": { 13 - "type": "string", 14 - "format": "datetime" 15 - }, 16 - "subject": { 17 - "type": "string", 18 - "format": "at-uri" 19 - } 20 - } 21 - } 22 - } 23 - } 24 - }
···
-43
notifications/lexicons/social/grain/feed/getTimeline.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.feed.getTimeline", 4 - "defs": { 5 - "main": { 6 - "type": "query", 7 - "description": "Get a view of the requesting account's home timeline.", 8 - "parameters": { 9 - "type": "params", 10 - "properties": { 11 - "algorithm": { 12 - "type": "string", 13 - "description": "Variant 'algorithm' for timeline. Implementation-specific." 14 - }, 15 - "limit": { 16 - "type": "integer", 17 - "minimum": 1, 18 - "maximum": 100, 19 - "default": 50 20 - }, 21 - "cursor": { "type": "string" } 22 - } 23 - }, 24 - "output": { 25 - "encoding": "application/json", 26 - "schema": { 27 - "type": "object", 28 - "required": ["feed"], 29 - "properties": { 30 - "cursor": { "type": "string" }, 31 - "feed": { 32 - "type": "array", 33 - "items": { 34 - "type": "ref", 35 - "ref": "social.grain.gallery.defs#galleryView" 36 - } 37 - } 38 - } 39 - } 40 - } 41 - } 42 - } 43 - }
···
-56
notifications/lexicons/social/grain/gallery/defs.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.gallery.defs", 4 - "defs": { 5 - "galleryView": { 6 - "type": "object", 7 - "required": ["uri", "cid", "creator", "record", "indexedAt"], 8 - "properties": { 9 - "uri": { "type": "string", "format": "at-uri" }, 10 - "cid": { "type": "string", "format": "cid" }, 11 - "title": { "type": "string" }, 12 - "description": { "type": "string" }, 13 - "cameras": { 14 - "type": "array", 15 - "description": "List of camera make and models used in this gallery derived from EXIF data.", 16 - "items": { "type": "string" } 17 - }, 18 - "facets": { 19 - "type": "array", 20 - "description": "Annotations of description text (mentions, URLs, hashtags, etc)", 21 - "items": { "type": "ref", "ref": "app.bsky.richtext.facet" } 22 - }, 23 - "creator": { 24 - "type": "ref", 25 - "ref": "social.grain.actor.defs#profileView" 26 - }, 27 - "record": { "type": "unknown" }, 28 - "items": { 29 - "type": "array", 30 - "items": { 31 - "type": "union", 32 - "refs": [ 33 - "social.grain.photo.defs#photoView" 34 - ] 35 - } 36 - }, 37 - "favCount": { "type": "integer" }, 38 - "commentCount": { "type": "integer" }, 39 - "labels": { 40 - "type": "array", 41 - "items": { "type": "ref", "ref": "com.atproto.label.defs#label" } 42 - }, 43 - "createdAt": { "type": "string", "format": "datetime" }, 44 - "indexedAt": { "type": "string", "format": "datetime" }, 45 - "viewer": { "type": "ref", "ref": "#viewerState" } 46 - } 47 - }, 48 - "viewerState": { 49 - "type": "object", 50 - "description": "Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests.", 51 - "properties": { 52 - "fav": { "type": "string", "format": "at-uri" } 53 - } 54 - } 55 - } 56 - }
···
-30
notifications/lexicons/social/grain/gallery/gallery.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.gallery", 4 - "defs": { 5 - "main": { 6 - "type": "record", 7 - "key": "tid", 8 - "record": { 9 - "type": "object", 10 - "required": ["title", "createdAt"], 11 - "properties": { 12 - "title": { "type": "string", "maxLength": 100 }, 13 - "description": { "type": "string", "maxLength": 1000 }, 14 - "facets": { 15 - "type": "array", 16 - "description": "Annotations of description text (mentions, URLs, hashtags, etc)", 17 - "items": { "type": "ref", "ref": "app.bsky.richtext.facet" } 18 - }, 19 - "labels": { 20 - "type": "union", 21 - "description": "Self-label values for this post. Effectively content warnings.", 22 - "refs": ["com.atproto.label.defs#selfLabels"] 23 - }, 24 - "updatedAt": { "type": "string", "format": "datetime" }, 25 - "createdAt": { "type": "string", "format": "datetime" } 26 - } 27 - } 28 - } 29 - } 30 - }
···
-41
notifications/lexicons/social/grain/gallery/getActorGalleries.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.gallery.getActorGalleries", 4 - "defs": { 5 - "main": { 6 - "type": "query", 7 - "description": "Get a view of an actor's galleries. Does not require auth.", 8 - "parameters": { 9 - "type": "params", 10 - "required": ["actor"], 11 - "properties": { 12 - "actor": { "type": "string", "format": "at-identifier" }, 13 - "limit": { 14 - "type": "integer", 15 - "minimum": 1, 16 - "maximum": 100, 17 - "default": 50 18 - }, 19 - "cursor": { "type": "string" } 20 - } 21 - }, 22 - "output": { 23 - "encoding": "application/json", 24 - "schema": { 25 - "type": "object", 26 - "required": ["items"], 27 - "properties": { 28 - "cursor": { "type": "string" }, 29 - "items": { 30 - "type": "array", 31 - "items": { 32 - "type": "ref", 33 - "ref": "social.grain.gallery.defs#galleryView" 34 - } 35 - } 36 - } 37 - } 38 - } 39 - } 40 - } 41 - }
···
-28
notifications/lexicons/social/grain/gallery/getGallery.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.gallery.getGallery", 4 - "defs": { 5 - "main": { 6 - "type": "query", 7 - "description": "Gets a hydrated gallery view for a specified gallery AT-URI.", 8 - "parameters": { 9 - "type": "params", 10 - "required": ["uri"], 11 - "properties": { 12 - "uri": { 13 - "type": "string", 14 - "description": "The AT-URI of the gallery to return a hydrated view for.", 15 - "format": "at-uri" 16 - } 17 - } 18 - }, 19 - "output": { 20 - "encoding": "application/json", 21 - "schema": { 22 - "type": "ref", 23 - "ref": "social.grain.gallery.defs#galleryView" 24 - } 25 - } 26 - } 27 - } 28 - }
···
-41
notifications/lexicons/social/grain/gallery/getGalleryThread.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.gallery.getGalleryThread", 4 - "defs": { 5 - "main": { 6 - "type": "query", 7 - "description": "Gets a hydrated gallery view and its comments for a specified gallery AT-URI.", 8 - "parameters": { 9 - "type": "params", 10 - "required": ["uri"], 11 - "properties": { 12 - "uri": { 13 - "type": "string", 14 - "description": "The AT-URI of the gallery to return a hydrated view and comments for.", 15 - "format": "at-uri" 16 - } 17 - } 18 - }, 19 - "output": { 20 - "encoding": "application/json", 21 - "schema": { 22 - "type": "object", 23 - "required": ["gallery", "comments"], 24 - "properties": { 25 - "gallery": { 26 - "type": "ref", 27 - "ref": "social.grain.gallery.defs#galleryView" 28 - }, 29 - "comments": { 30 - "type": "array", 31 - "items": { 32 - "type": "ref", 33 - "ref": "social.grain.comment.defs#commentView" 34 - } 35 - } 36 - } 37 - } 38 - } 39 - } 40 - } 41 - }
···
-32
notifications/lexicons/social/grain/gallery/item.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.gallery.item", 4 - "defs": { 5 - "main": { 6 - "type": "record", 7 - "key": "tid", 8 - "record": { 9 - "type": "object", 10 - "required": ["createdAt", "gallery", "item"], 11 - "properties": { 12 - "createdAt": { 13 - "type": "string", 14 - "format": "datetime" 15 - }, 16 - "gallery": { 17 - "type": "string", 18 - "format": "at-uri" 19 - }, 20 - "item": { 21 - "type": "string", 22 - "format": "at-uri" 23 - }, 24 - "position": { 25 - "type": "integer", 26 - "default": 0 27 - } 28 - } 29 - } 30 - } 31 - } 32 - }
···
-27
notifications/lexicons/social/grain/graph/follow.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.graph.follow", 4 - "defs": { 5 - "main": { 6 - "key": "tid", 7 - "type": "record", 8 - "record": { 9 - "type": "object", 10 - "required": [ 11 - "subject", 12 - "createdAt" 13 - ], 14 - "properties": { 15 - "subject": { 16 - "type": "string", 17 - "format": "did" 18 - }, 19 - "createdAt": { 20 - "type": "string", 21 - "format": "datetime" 22 - } 23 - } 24 - } 25 - } 26 - } 27 - }
···
-45
notifications/lexicons/social/grain/graph/getFollowers.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.graph.getFollowers", 4 - "defs": { 5 - "main": { 6 - "type": "query", 7 - "description": "Enumerates accounts which follow a specified account (actor).", 8 - "parameters": { 9 - "type": "params", 10 - "required": ["actor"], 11 - "properties": { 12 - "actor": { "type": "string", "format": "at-identifier" }, 13 - "limit": { 14 - "type": "integer", 15 - "minimum": 1, 16 - "maximum": 100, 17 - "default": 50 18 - }, 19 - "cursor": { "type": "string" } 20 - } 21 - }, 22 - "output": { 23 - "encoding": "application/json", 24 - "schema": { 25 - "type": "object", 26 - "required": ["subject", "followers"], 27 - "properties": { 28 - "subject": { 29 - "type": "ref", 30 - "ref": "social.grain.actor.defs#profileView" 31 - }, 32 - "cursor": { "type": "string" }, 33 - "followers": { 34 - "type": "array", 35 - "items": { 36 - "type": "ref", 37 - "ref": "social.grain.actor.defs#profileView" 38 - } 39 - } 40 - } 41 - } 42 - } 43 - } 44 - } 45 - }
···
-45
notifications/lexicons/social/grain/graph/getFollows.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.graph.getFollows", 4 - "defs": { 5 - "main": { 6 - "type": "query", 7 - "description": "Enumerates accounts which a specified account (actor) follows.", 8 - "parameters": { 9 - "type": "params", 10 - "required": ["actor"], 11 - "properties": { 12 - "actor": { "type": "string", "format": "at-identifier" }, 13 - "limit": { 14 - "type": "integer", 15 - "minimum": 1, 16 - "maximum": 100, 17 - "default": 50 18 - }, 19 - "cursor": { "type": "string" } 20 - } 21 - }, 22 - "output": { 23 - "encoding": "application/json", 24 - "schema": { 25 - "type": "object", 26 - "required": ["subject", "follows"], 27 - "properties": { 28 - "subject": { 29 - "type": "ref", 30 - "ref": "social.grain.actor.defs#profileView" 31 - }, 32 - "cursor": { "type": "string" }, 33 - "follows": { 34 - "type": "array", 35 - "items": { 36 - "type": "ref", 37 - "ref": "social.grain.actor.defs#profileView" 38 - } 39 - } 40 - } 41 - } 42 - } 43 - } 44 - } 45 - }
···
-94
notifications/lexicons/social/grain/labelers/defs.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.labeler.defs", 4 - "defs": { 5 - "labelerView": { 6 - "type": "object", 7 - "required": ["uri", "cid", "creator", "indexedAt"], 8 - "properties": { 9 - "uri": { "type": "string", "format": "at-uri" }, 10 - "cid": { "type": "string", "format": "cid" }, 11 - "creator": { 12 - "type": "ref", 13 - "ref": "social.grain.actor.defs#profileView" 14 - }, 15 - "favoriteCount": { "type": "integer", "minimum": 0 }, 16 - "viewer": { "type": "ref", "ref": "#labelerViewerState" }, 17 - "indexedAt": { "type": "string", "format": "datetime" }, 18 - "labels": { 19 - "type": "array", 20 - "items": { "type": "ref", "ref": "com.atproto.label.defs#label" } 21 - } 22 - } 23 - }, 24 - "labelerViewDetailed": { 25 - "type": "object", 26 - "required": ["uri", "cid", "creator", "policies", "indexedAt"], 27 - "properties": { 28 - "uri": { "type": "string", "format": "at-uri" }, 29 - "cid": { "type": "string", "format": "cid" }, 30 - "creator": { "type": "ref", "ref": "app.bsky.actor.defs#profileView" }, 31 - "policies": { 32 - "type": "ref", 33 - "ref": "social.grain.actor.defs#labelerPolicies" 34 - }, 35 - "favoriteCount": { "type": "integer", "minimum": 0 }, 36 - "viewer": { "type": "ref", "ref": "#labelerViewerState" }, 37 - "indexedAt": { "type": "string", "format": "datetime" }, 38 - "labels": { 39 - "type": "array", 40 - "items": { "type": "ref", "ref": "com.atproto.label.defs#label" } 41 - }, 42 - "reasonTypes": { 43 - "description": "The set of report reason 'codes' which are in-scope for this service to review and action. These usually align to policy categories. If not defined (distinct from empty array), all reason types are allowed.", 44 - "type": "array", 45 - "items": { 46 - "type": "ref", 47 - "ref": "com.atproto.moderation.defs#reasonType" 48 - } 49 - }, 50 - "subjectTypes": { 51 - "description": "The set of subject types (account, record, etc) this service accepts reports on.", 52 - "type": "array", 53 - "items": { 54 - "type": "ref", 55 - "ref": "com.atproto.moderation.defs#subjectType" 56 - } 57 - }, 58 - "subjectCollections": { 59 - "type": "array", 60 - "description": "Set of record types (collection NSIDs) which can be reported to this service. If not defined (distinct from empty array), default is any record type.", 61 - "items": { "type": "string", "format": "nsid" } 62 - } 63 - } 64 - }, 65 - "labelerViewerState": { 66 - "type": "object", 67 - "properties": { 68 - "like": { "type": "string", "format": "at-uri" } 69 - } 70 - }, 71 - "labelerPolicies": { 72 - "type": "object", 73 - "required": ["labelValues"], 74 - "properties": { 75 - "labelValues": { 76 - "type": "array", 77 - "description": "The label values which this labeler publishes. May include global or custom labels.", 78 - "items": { 79 - "type": "ref", 80 - "ref": "com.atproto.label.defs#labelValue" 81 - } 82 - }, 83 - "labelValueDefinitions": { 84 - "type": "array", 85 - "description": "Label values created by this labeler and scoped exclusively to it. Labels defined here will override global label definitions for this labeler.", 86 - "items": { 87 - "type": "ref", 88 - "ref": "com.atproto.label.defs#labelValueDefinition" 89 - } 90 - } 91 - } 92 - } 93 - } 94 - }
···
-47
notifications/lexicons/social/grain/labelers/service.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.labeler.service", 4 - "defs": { 5 - "main": { 6 - "type": "record", 7 - "description": "A declaration of the existence of labeler service.", 8 - "key": "literal:self", 9 - "record": { 10 - "type": "object", 11 - "required": ["policies", "createdAt"], 12 - "properties": { 13 - "policies": { 14 - "type": "ref", 15 - "ref": "app.bsky.labeler.defs#labelerPolicies" 16 - }, 17 - "labels": { 18 - "type": "union", 19 - "refs": ["com.atproto.label.defs#selfLabels"] 20 - }, 21 - "createdAt": { "type": "string", "format": "datetime" }, 22 - "reasonTypes": { 23 - "description": "The set of report reason 'codes' which are in-scope for this service to review and action. These usually align to policy categories. If not defined (distinct from empty array), all reason types are allowed.", 24 - "type": "array", 25 - "items": { 26 - "type": "ref", 27 - "ref": "com.atproto.moderation.defs#reasonType" 28 - } 29 - }, 30 - "subjectTypes": { 31 - "description": "The set of subject types (account, record, etc) this service accepts reports on.", 32 - "type": "array", 33 - "items": { 34 - "type": "ref", 35 - "ref": "com.atproto.moderation.defs#subjectType" 36 - } 37 - }, 38 - "subjectCollections": { 39 - "type": "array", 40 - "description": "Set of record types (collection NSIDs) which can be reported to this service. If not defined (distinct from empty array), default is any record type.", 41 - "items": { "type": "string", "format": "nsid" } 42 - } 43 - } 44 - } 45 - } 46 - } 47 - }
···
-87
notifications/lexicons/social/grain/notification/defs.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.notification.defs", 4 - "defs": { 5 - "notificationView": { 6 - "type": "object", 7 - "required": [ 8 - "uri", 9 - "cid", 10 - "author", 11 - "reason", 12 - "record", 13 - "isRead", 14 - "indexedAt" 15 - ], 16 - "properties": { 17 - "uri": { "type": "string", "format": "at-uri" }, 18 - "cid": { "type": "string", "format": "cid" }, 19 - "author": { 20 - "type": "ref", 21 - "ref": "social.grain.actor.defs#profileView" 22 - }, 23 - "reasonSubject": { "type": "string", "format": "at-uri" }, 24 - "reason": { 25 - "type": "string", 26 - "description": "The reason why this notification was delivered - e.g. your gallery was favd, or you received a new follower.", 27 - "knownValues": [ 28 - "follow", 29 - "gallery-favorite", 30 - "gallery-comment", 31 - "reply", 32 - "gallery-mention", 33 - "gallery-comment-mention", 34 - "unknown" 35 - ] 36 - }, 37 - "record": { "type": "unknown" }, 38 - "isRead": { "type": "boolean" }, 39 - "indexedAt": { "type": "string", "format": "datetime" } 40 - } 41 - }, 42 - "notificationViewDetailed": { 43 - "type": "object", 44 - "required": [ 45 - "uri", 46 - "cid", 47 - "author", 48 - "reason", 49 - "record", 50 - "isRead", 51 - "indexedAt" 52 - ], 53 - "properties": { 54 - "uri": { "type": "string", "format": "at-uri" }, 55 - "cid": { "type": "string", "format": "cid" }, 56 - "author": { 57 - "type": "ref", 58 - "ref": "social.grain.actor.defs#profileView" 59 - }, 60 - "reason": { 61 - "type": "string", 62 - "description": "The reason why this notification was delivered - e.g. your gallery was favd, or you received a new follower.", 63 - "knownValues": [ 64 - "follow", 65 - "gallery-favorite", 66 - "gallery-comment", 67 - "reply", 68 - "gallery-mention", 69 - "gallery-comment-mention", 70 - "unknown" 71 - ] 72 - }, 73 - "reasonSubject": { 74 - "type": "union", 75 - "refs": [ 76 - "social.grain.actor.defs#profileView", 77 - "social.grain.comment.defs#commentView", 78 - "social.grain.gallery.defs#galleryView" 79 - ] 80 - }, 81 - "record": { "type": "unknown" }, 82 - "isRead": { "type": "boolean" }, 83 - "indexedAt": { "type": "string", "format": "datetime" } 84 - } 85 - } 86 - } 87 - }
···
-40
notifications/lexicons/social/grain/notification/getNotifications.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.notification.getNotifications", 4 - "defs": { 5 - "main": { 6 - "type": "query", 7 - "description": "Enumerate notifications for the requesting account. Requires auth.", 8 - "parameters": { 9 - "type": "params", 10 - "properties": { 11 - "limit": { 12 - "type": "integer", 13 - "minimum": 1, 14 - "maximum": 100, 15 - "default": 50 16 - }, 17 - "cursor": { "type": "string" } 18 - } 19 - }, 20 - "output": { 21 - "encoding": "application/json", 22 - "schema": { 23 - "type": "object", 24 - "required": ["notifications"], 25 - "properties": { 26 - "cursor": { "type": "string" }, 27 - "notifications": { 28 - "type": "array", 29 - "items": { 30 - "type": "ref", 31 - "ref": "social.grain.notification.defs#notificationViewDetailed" 32 - } 33 - }, 34 - "seenAt": { "type": "string", "format": "datetime" } 35 - } 36 - } 37 - } 38 - } 39 - } 40 - }
···
-20
notifications/lexicons/social/grain/notification/updateSeen.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.notification.updateSeen", 4 - "defs": { 5 - "main": { 6 - "type": "procedure", 7 - "description": "Notify server that the requesting account has seen notifications. Requires auth.", 8 - "input": { 9 - "encoding": "application/json", 10 - "schema": { 11 - "type": "object", 12 - "required": ["seenAt"], 13 - "properties": { 14 - "seenAt": { "type": "string", "format": "datetime" } 15 - } 16 - } 17 - } 18 - } 19 - } 20 - }
···
-68
notifications/lexicons/social/grain/photo/defs.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.photo.defs", 4 - "defs": { 5 - "photoView": { 6 - "type": "object", 7 - "required": ["uri", "cid", "thumb", "fullsize", "alt"], 8 - "properties": { 9 - "uri": { "type": "string", "format": "at-uri" }, 10 - "cid": { "type": "string", "format": "cid" }, 11 - "thumb": { 12 - "type": "string", 13 - "format": "uri", 14 - "description": "Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View." 15 - }, 16 - "fullsize": { 17 - "type": "string", 18 - "format": "uri", 19 - "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." 20 - }, 21 - "alt": { 22 - "type": "string", 23 - "description": "Alt text description of the image, for accessibility." 24 - }, 25 - "aspectRatio": { 26 - "type": "ref", 27 - "ref": "social.grain.defs#aspectRatio" 28 - }, 29 - "exif": { 30 - "type": "ref", 31 - "ref": "social.grain.photo.defs#exifView", 32 - "description": "EXIF metadata for the photo, if available." 33 - }, 34 - "gallery": { "type": "ref", "ref": "#galleryState" } 35 - } 36 - }, 37 - "exifView": { 38 - "type": "object", 39 - "required": ["photo", "createdAt"], 40 - "properties": { 41 - "uri": { "type": "string", "format": "at-uri" }, 42 - "cid": { "type": "string", "format": "cid" }, 43 - "photo": { "type": "string", "format": "at-uri" }, 44 - "createdAt": { "type": "string", "format": "datetime" }, 45 - "dateTimeOriginal": { "type": "string" }, 46 - "exposureTime": { "type": "string" }, 47 - "fNumber": { "type": "string" }, 48 - "flash": { "type": "string" }, 49 - "focalLengthIn35mmFormat": { "type": "string" }, 50 - "iSO": { "type": "integer" }, 51 - "lensMake": { "type": "string" }, 52 - "lensModel": { "type": "string" }, 53 - "make": { "type": "string" }, 54 - "model": { "type": "string" } 55 - } 56 - }, 57 - "galleryState": { 58 - "type": "object", 59 - "required": ["item", "itemCreatedAt", "itemPosition"], 60 - "description": "Metadata about the photo's relationship with the subject content. Only has meaningful content when photo is attached to a gallery.", 61 - "properties": { 62 - "item": { "type": "string", "format": "at-uri" }, 63 - "itemCreatedAt": { "type": "string", "format": "datetime" }, 64 - "itemPosition": { "type": "integer" } 65 - } 66 - } 67 - } 68 - }
···
-32
notifications/lexicons/social/grain/photo/exif.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.photo.exif", 4 - "defs": { 5 - "main": { 6 - "type": "record", 7 - "description": "Basic EXIF metadata for a photo. Integers are scaled by 1000000 to accommodate decimal values and potentially other tags in the future.", 8 - "key": "tid", 9 - "record": { 10 - "type": "object", 11 - "required": [ 12 - "photo", 13 - "createdAt" 14 - ], 15 - "properties": { 16 - "photo": { "type": "string", "format": "at-uri" }, 17 - "createdAt": { "type": "string", "format": "datetime" }, 18 - "dateTimeOriginal": { "type": "string", "format": "datetime" }, 19 - "exposureTime": { "type": "integer" }, 20 - "fNumber": { "type": "integer" }, 21 - "flash": { "type": "string" }, 22 - "focalLengthIn35mmFormat": { "type": "integer" }, 23 - "iSO": { "type": "integer" }, 24 - "lensMake": { "type": "string" }, 25 - "lensModel": { "type": "string" }, 26 - "make": { "type": "string" }, 27 - "model": { "type": "string" } 28 - } 29 - } 30 - } 31 - } 32 - }
···
-41
notifications/lexicons/social/grain/photo/getActorPhotos.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.photo.getActorPhotos", 4 - "defs": { 5 - "main": { 6 - "type": "query", 7 - "description": "Get a view of an actor's photos. Does not require auth.", 8 - "parameters": { 9 - "type": "params", 10 - "required": ["actor"], 11 - "properties": { 12 - "actor": { "type": "string", "format": "at-identifier" }, 13 - "limit": { 14 - "type": "integer", 15 - "minimum": 1, 16 - "maximum": 100, 17 - "default": 50 18 - }, 19 - "cursor": { "type": "string" } 20 - } 21 - }, 22 - "output": { 23 - "encoding": "application/json", 24 - "schema": { 25 - "type": "object", 26 - "required": ["items"], 27 - "properties": { 28 - "cursor": { "type": "string" }, 29 - "items": { 30 - "type": "array", 31 - "items": { 32 - "type": "ref", 33 - "ref": "social.grain.photo.defs#photoView" 34 - } 35 - } 36 - } 37 - } 38 - } 39 - } 40 - } 41 - }
···
-30
notifications/lexicons/social/grain/photo/photo.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "social.grain.photo", 4 - "defs": { 5 - "main": { 6 - "type": "record", 7 - "key": "tid", 8 - "record": { 9 - "type": "object", 10 - "required": ["photo", "alt"], 11 - "properties": { 12 - "photo": { 13 - "type": "blob", 14 - "accept": ["image/*"], 15 - "maxSize": 1000000 16 - }, 17 - "alt": { 18 - "type": "string", 19 - "description": "Alt text description of the image, for accessibility." 20 - }, 21 - "aspectRatio": { 22 - "type": "ref", 23 - "ref": "social.grain.defs#aspectRatio" 24 - }, 25 - "createdAt": { "type": "string", "format": "datetime" } 26 - } 27 - } 28 - } 29 - } 30 - }
···