lexrpc 2.2__tar.gz → 3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {lexrpc-2.2/lexrpc.egg-info → lexrpc-3.0}/PKG-INFO +38 -2
- {lexrpc-2.2 → lexrpc-3.0}/README.md +35 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/base.py +133 -44
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/client.py +9 -4
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/flask_server.py +34 -13
- lexrpc-3.0/lexrpc/lexicons/app/bsky/actor/contentVisibilityDeclaration.json +21 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/defs.json +16 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/ageassurance/defs.json +16 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/authCreatePosts.json +6 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/authFullApp.json +8 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/authViewAll.json +2 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/draft/createDraft.json +1 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/embed/video.json +4 -8
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/defs.json +23 -1
- lexrpc-3.0/lexrpc/lexicons/app/bsky/feed/searchPostsV2.json +225 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getFollowers.json +5 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getFollows.json +5 -1
- lexrpc-3.0/lexrpc/lexicons/app/bsky/graph/getMutes.json +39 -0
- lexrpc-3.0/lexrpc/lexicons/app/bsky/graph/muteActor.json +28 -0
- lexrpc-3.0/lexrpc/lexicons/app/bsky/graph/searchStarterPacksV2.json +52 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/defs.json +6 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/listNotifications.json +5 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/putPreferencesV2.json +2 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/defs.json +11 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getTrends.json +4 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getTrendsSkeleton.json +4 -0
- lexrpc-3.0/lexrpc/lexicons/app/bsky/video/abortUpload.json +55 -0
- lexrpc-3.0/lexrpc/lexicons/app/bsky/video/defs.json +49 -0
- lexrpc-3.0/lexrpc/lexicons/app/bsky/video/finishUpload.json +73 -0
- lexrpc-3.0/lexrpc/lexicons/app/bsky/video/getUploadStatus.json +75 -0
- lexrpc-3.0/lexrpc/lexicons/app/bsky/video/startUpload.json +94 -0
- lexrpc-3.0/lexrpc/lexicons/app/bsky/video/uploadPart.json +70 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/actor/declaration.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/actor/defs.json +2 -3
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/defs.json +66 -37
- lexrpc-3.0/lexrpc/lexicons/chat/bsky/convo/getUnreadCounts.json +37 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/listConvoRequests.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/lockConvo.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/sendMessage.json +5 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/sendMessageBatch.json +5 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/unlockConvo.json +6 -2
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/embed/joinLink.json +7 -3
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/addMembers.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/approveJoinRequest.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/createGroup.json +3 -2
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/createJoinLink.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/defs.json +27 -6
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/disableJoinLink.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/editGroup.json +3 -3
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/editJoinLink.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/enableJoinLink.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/getJoinLinkPreviews.json +7 -3
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/listJoinRequests.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/listMutualGroups.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/rejectJoinRequest.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/removeMembers.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/requestJoin.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/updateJoinRequestsRead.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/withdrawJoinRequest.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/moderation/defs.json +5 -5
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/moderation/getConvo.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/moderation/getConvoMembers.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/moderation/getConvos.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/moderation/subscribeModEvents.json +2 -1
- lexrpc-3.0/lexrpc/lexicons/chat/bsky/notification/defs.json +25 -0
- lexrpc-3.0/lexrpc/lexicons/chat/bsky/notification/getPreferences.json +23 -0
- lexrpc-3.0/lexrpc/lexicons/chat/bsky/notification/putPreferences.json +39 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/describeServer.json +4 -0
- lexrpc-3.0/lexrpc/lexicons/community/blacksky/assembly/conversation.json +38 -0
- lexrpc-3.0/lexrpc/lexicons/community/blacksky/assembly/statement.json +37 -0
- lexrpc-3.0/lexrpc/lexicons/community/blacksky/assembly/vote.json +32 -0
- lexrpc-3.0/lexrpc/lexicons/site/standard/document.json +115 -0
- lexrpc-3.0/lexrpc/lexicons/site/standard/graph/recommend.json +26 -0
- lexrpc-3.0/lexrpc/lexicons/site/standard/graph/subscription.json +26 -0
- lexrpc-3.0/lexrpc/lexicons/site/standard/publication.json +65 -0
- lexrpc-3.0/lexrpc/lexicons/site/standard/theme/basic.json +37 -0
- lexrpc-3.0/lexrpc/lexicons/site/standard/theme/color.json +53 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/actor/defs.json +387 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/actor/getPreferences.json +27 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/actor/getProfile.json +28 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/actor/getProfiles.json +37 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/actor/getSuggestions.json +43 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/actor/profile.json +53 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/actor/putPreferences.json +23 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/actor/searchActors.json +43 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/actor/searchActorsTypeahead.json +41 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/authCreatePosts.json +37 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/authDeleteContent.json +29 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/authFullApp.json +94 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/authManageFeedDeclarations.json +21 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/authManageLabelerService.json +21 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/authManageModeration.json +34 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/authManageNotifications.json +28 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/authManageProfile.json +21 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/authViewAll.json +64 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/embed/defs.json +83 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/embed/mention.json +39 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/embed/record.json +39 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/defs.json +326 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/describeFeedGenerator.json +39 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/generator.json +47 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getActorFeeds.json +41 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getActorLikes.json +42 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getActorReposts.json +42 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getAuthorFeed.json +53 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getCrosspostThread.json +93 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getFeed.json +42 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getFeedGenerator.json +42 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getFeedGenerators.json +36 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getFeedSkeleton.json +46 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getLikes.json +58 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getPostThread.json +93 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getPosts.json +35 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getRepostedBy.json +52 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getSuggestedFeeds.json +39 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getTimeline.json +43 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/like.json +20 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/post.json +69 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/reply.json +54 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/repost.json +20 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/searchPosts.json +58 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/sendInteractions.json +33 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/threadgate.json +56 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/block.json +23 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/defs.json +33 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/follow.json +19 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/getBlocks.json +39 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/getFollowers.json +45 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/getFollows.json +45 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/getKnownFollowers.json +45 -0
- {lexrpc-2.2/lexrpc/lexicons/app/bsky → lexrpc-3.0/lexrpc/lexicons/so/sprk}/graph/getMutes.json +2 -2
- lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/getRelationships.json +56 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/getSuggestedFollowsByActor.json +42 -0
- {lexrpc-2.2/lexrpc/lexicons/app/bsky → lexrpc-3.0/lexrpc/lexicons/so/sprk}/graph/muteActor.json +2 -2
- lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/muteThread.json +20 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/unmuteActor.json +20 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/unmuteThread.json +20 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/labeler/defs.json +91 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/labeler/getServices.json +43 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/labeler/service.json +47 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/media/defs.json +15 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/media/image.json +50 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/media/images.json +29 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/media/video.json +66 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/notification/getUnreadCount.json +27 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/notification/listNotifications.json +86 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/notification/putPreferences.json +20 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/notification/registerPush.json +26 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/notification/unregisterPush.json +26 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/notification/updateSeen.json +20 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/richtext/facet.json +51 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/sound/audio.json +46 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/sound/defs.json +37 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/sound/getActorAudios.json +41 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/sound/getAudioPosts.json +46 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/sound/getAudios.json +35 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/sound/getTrendingAudios.json +39 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/sound/searchAudios.json +44 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/story/defs.json +62 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/story/getStories.json +34 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/story/getTimeline.json +39 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/story/post.json +39 -0
- {lexrpc-2.2/lexrpc/lexicons/app/bsky → lexrpc-3.0/lexrpc/lexicons/so/sprk}/video/defs.json +23 -2
- lexrpc-3.0/lexrpc/lexicons/so/sprk/video/getJobStatus.json +32 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/video/getUploadLimits.json +24 -0
- lexrpc-3.0/lexrpc/lexicons/so/sprk/video/uploadVideo.json +26 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/actor/defs.json +89 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/actor/profile.json +34 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/comment/comment.json +42 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/comment/defs.json +61 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/defs.json +15 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/favorite/favorite.json +24 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/gallery/defs.json +130 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/gallery/gallery.json +32 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/gallery/item.json +32 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/graph/block.json +24 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/graph/follow.json +24 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/graph/muteActor.json +30 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/graph/unmuteActor.json +30 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/group/decline.json +29 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/group/defs.json +164 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/group/item.json +31 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/group/submission.json +31 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/photo/defs.json +68 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/photo/exif.json +29 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/photo/photo.json +30 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/privateGallery.json +13 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/story/defs.json +55 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/story/story.json +30 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/addSpaceMember.json +49 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/createGroup.json +38 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/createPoolComment.json +64 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/createPoolGallery.json +66 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/createPrivateGallery.json +93 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/deleteAccount.json +17 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/deleteGallery.json +27 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/deletePoolComment.json +25 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/deletePoolGallery.json +38 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getActorFavorites.json +33 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getActorProfile.json +25 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getBlocks.json +41 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getCameras.json +46 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getCommentThread.json +38 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getFollowers.json +52 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getFollowing.json +52 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getGallery.json +34 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getGalleryFavorites.json +49 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getGroup.json +27 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getGroupHost.json +21 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getGroupSubmissions.json +48 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getKnownFollowers.json +45 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getLocations.json +66 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getMutes.json +40 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getNotifications.json +66 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getPoolGallery.json +144 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getPrivateGallery.json +67 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getSitemap.json +59 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getSpaceMembers.json +46 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getSpaceSupport.json +45 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getStories.json +33 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getStory.json +25 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getStoryArchive.json +33 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getStoryAuthors.json +44 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getSuggestedFollows.json +45 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/joinGroup.json +40 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/leaveGroup.json +30 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/listGroups.json +47 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/listPoolFeed.json +117 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/listPoolGalleries.json +109 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/listPrivateGalleries.json +39 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/listSharedGalleries.json +41 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/markStoriesViewed.json +33 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/putPoolFavorite.json +40 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/searchActorsTypeahead.json +39 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/searchGalleries.json +33 -0
- lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/searchProfiles.json +47 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/queue/createQueue.json +12 -5
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/queue/defs.json +6 -5
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/queue/listQueues.json +1 -1
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/queue/updateQueue.json +13 -2
- lexrpc-3.0/lexrpc/lexicons/tools/ozone/report/closeReports.json +56 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/createActivity.json +7 -3
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/defs.json +10 -0
- lexrpc-3.0/lexrpc/lexicons/tools/ozone/report/queryActivities.json +66 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/queryReports.json +2 -2
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/server.py +19 -12
- {lexrpc-2.2 → lexrpc-3.0/lexrpc.egg-info}/PKG-INFO +38 -2
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc.egg-info/SOURCES.txt +176 -2
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc.egg-info/requires.txt +3 -0
- {lexrpc-2.2 → lexrpc-3.0}/pyproject.toml +4 -1
- lexrpc-2.2/lexrpc/lexicons/site/standard/authFull.json +0 -23
- lexrpc-2.2/lexrpc/lexicons/site/standard/authSocial.json +0 -21
- lexrpc-2.2/lexrpc/lexicons/site/standard/document.json +0 -125
- lexrpc-2.2/lexrpc/lexicons/site/standard/graph/recommend.json +0 -29
- lexrpc-2.2/lexrpc/lexicons/site/standard/graph/subscription.json +0 -28
- lexrpc-2.2/lexrpc/lexicons/site/standard/publication.json +0 -72
- lexrpc-2.2/lexrpc/lexicons/site/standard/theme/basic.json +0 -50
- lexrpc-2.2/lexrpc/lexicons/site/standard/theme/color.json +0 -62
- {lexrpc-2.2 → lexrpc-3.0}/LICENSE +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/MANIFEST.in +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/__init__.py +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/getPreferences.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/getProfile.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/getProfiles.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/getSuggestions.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/profile.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/putPreferences.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/searchActors.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/searchActorsTypeahead.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/status.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/ageassurance/begin.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/ageassurance/getConfig.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/ageassurance/getState.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/authDeleteContent.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/authManageFeedDeclarations.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/authManageLabelerService.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/authManageModeration.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/authManageNotifications.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/authManageProfile.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/bookmark/createBookmark.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/bookmark/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/bookmark/deleteBookmark.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/bookmark/getBookmarks.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/contact/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/contact/dismissMatch.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/contact/getMatches.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/contact/getSyncStatus.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/contact/importContacts.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/contact/removeData.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/contact/sendNotification.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/contact/startPhoneVerification.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/contact/verifyPhone.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/draft/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/draft/deleteDraft.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/draft/getDrafts.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/draft/updateDraft.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/embed/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/embed/external.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/embed/gallery.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/embed/getEmbedExternalView.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/embed/images.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/embed/record.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/embed/recordWithMedia.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/describeFeedGenerator.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/generator.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getActorFeeds.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getActorLikes.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getAuthorFeed.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getFeed.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getFeedGenerator.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getFeedGenerators.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getFeedSkeleton.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getLikes.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getListFeed.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getPostThread.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getPosts.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getQuotes.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getRepostedBy.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getSuggestedFeeds.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getTimeline.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/like.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/post.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/postgate.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/repost.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/searchPosts.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/sendInteractions.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/threadgate.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/block.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/follow.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getActorStarterPacks.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getBlocks.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getKnownFollowers.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getList.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getListBlocks.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getListMutes.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getLists.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getListsWithMembership.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getRelationships.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getStarterPack.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getStarterPacks.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getStarterPacksWithMembership.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getSuggestedFollowsByActor.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/list.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/listblock.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/listitem.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/muteActorList.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/muteThread.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/searchStarterPacks.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/starterpack.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/unmuteActor.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/unmuteActorList.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/unmuteThread.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/verification.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/labeler/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/labeler/getServices.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/labeler/service.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/declaration.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/getPreferences.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/getUnreadCount.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/listActivitySubscriptions.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/putActivitySubscription.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/putPreferences.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/registerPush.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/unregisterPush.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/updateSeen.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/richtext/facet.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getAgeAssuranceState.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getConfig.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getOnboardingSuggestedStarterPacksSkeleton.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getOnboardingSuggestedUsersSkeleton.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getPopularFeedGenerators.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getPostThreadOtherV2.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getPostThreadV2.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedFeeds.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedFeedsSkeleton.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedOnboardingUsers.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedStarterPacks.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedStarterPacksSkeleton.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedUsers.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscover.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscoverSkeleton.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedUsersForExplore.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedUsersForExploreSkeleton.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMore.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMoreSkeleton.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedUsersSkeleton.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestionsSkeleton.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getTaggedSuggestions.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getTrendingTopics.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/initAgeAssurance.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/searchActorsSkeleton.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/searchPostsSkeleton.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/searchStarterPacksSkeleton.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/video/getJobStatus.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/video/getUploadLimits.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/video/uploadVideo.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/actor/deleteAccount.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/actor/exportAccountData.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/actor/getStatus.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/authFullChatClient.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/acceptConvo.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/addReaction.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/deleteMessageForSelf.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/getConvo.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/getConvoAvailability.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/getConvoForMembers.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/getConvoMembers.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/getLog.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/getMessages.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/leaveConvo.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/listConvos.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/muteConvo.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/removeReaction.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/unmuteConvo.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/updateAllRead.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/updateRead.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/moderation/getActorMetadata.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/moderation/getMessageContext.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/moderation/updateActorAccess.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/deleteAccount.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/disableAccountInvites.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/disableInviteCodes.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/enableAccountInvites.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/getAccountInfo.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/getAccountInfos.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/getInviteCodes.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/getSubjectStatus.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/searchAccounts.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/sendEmail.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/updateAccountEmail.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/updateAccountHandle.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/updateAccountPassword.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/updateAccountSigningKey.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/updateSubjectStatus.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/getRecommendedDidCredentials.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/refreshIdentity.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/requestPlcOperationSignature.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/resolveDid.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/resolveHandle.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/resolveIdentity.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/signPlcOperation.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/submitPlcOperation.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/updateHandle.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/label/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/label/queryLabels.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/label/subscribeLabels.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/lexicon/resolveLexicon.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/lexicon/schema.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/moderation/createReport.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/moderation/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/applyWrites.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/createRecord.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/deleteRecord.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/describeRepo.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/getRecord.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/importRepo.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/listMissingBlobs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/listRecords.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/putRecord.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/strongRef.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/uploadBlob.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/activateAccount.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/checkAccountStatus.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/confirmEmail.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/createAccount.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/createAppPassword.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/createInviteCode.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/createInviteCodes.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/createSession.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/deactivateAccount.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/deleteAccount.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/deleteSession.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/getAccountInviteCodes.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/getServiceAuth.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/getSession.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/listAppPasswords.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/refreshSession.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/requestAccountDelete.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/requestEmailConfirmation.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/requestEmailUpdate.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/requestPasswordReset.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/reserveSigningKey.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/resetPassword.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/revokeAppPassword.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/updateEmail.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/getBlob.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/getBlocks.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/getCheckout.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/getHead.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/getHostStatus.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/getLatestCommit.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/getRecord.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/getRepo.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/getRepoStatus.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/listBlobs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/listHosts.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/listRepos.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/listReposByCollection.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/notifyOfUpdate.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/requestCrawl.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/subscribeRepos.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/temp/addReservedHandle.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/temp/checkHandleAvailability.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/temp/checkSignupQueue.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/temp/dereferenceScope.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/temp/fetchLabels.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/temp/requestPhoneVerification.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/temp/revokeAccountCredentials.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/germnetwork/declaration.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/bookmarks/authManageBookmarks.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/bookmarks/authViewBookmarks.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/bookmarks/bookmark.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/bookmarks/getActorBookmarks.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/calendar/event.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/calendar/rsvp.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/interaction/like.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/location/address.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/location/fsq.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/location/geo.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/location/hthree.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/payments/webMonetization.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/preference/ai.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/communication/createTemplate.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/communication/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/communication/deleteTemplate.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/communication/listTemplates.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/communication/updateTemplate.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/hosting/getAccountHistory.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/cancelScheduledActions.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/emitEvent.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/getAccountTimeline.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/getEvent.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/getRecord.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/getRecords.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/getRepo.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/getReporterStats.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/getRepos.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/getSubjects.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/listScheduledActions.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/queryEvents.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/queryStatuses.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/scheduleAction.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/searchRepos.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/queue/assignModerator.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/queue/deleteQueue.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/queue/getAssignments.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/queue/routeReports.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/queue/unassignModerator.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/assignModerator.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/getAssignments.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/getHistoricalStats.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/getLatestReport.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/getLiveStats.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/getReport.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/listActivities.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/reassignQueue.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/refreshStats.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/unassignModerator.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/safelink/addRule.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/safelink/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/safelink/queryEvents.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/safelink/queryRules.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/safelink/removeRule.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/safelink/updateRule.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/server/getConfig.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/set/addValues.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/set/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/set/deleteSet.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/set/deleteValues.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/set/getValues.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/set/querySets.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/set/upsertSet.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/setting/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/setting/listOptions.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/setting/removeOptions.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/setting/upsertOption.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/signature/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/signature/findCorrelation.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/signature/findRelatedAccounts.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/signature/searchAccounts.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/team/addMember.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/team/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/team/deleteMember.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/team/listMembers.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/team/updateMember.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/verification/defs.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/verification/grantVerifications.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/verification/listVerifications.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/verification/revokeVerifications.json +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc.egg-info/dependency_links.txt +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/lexrpc.egg-info/top_level.txt +0 -0
- {lexrpc-2.2 → lexrpc-3.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lexrpc
|
|
3
|
-
Version:
|
|
3
|
+
Version: 3.0
|
|
4
4
|
Summary: Python implementation of AT Protocol's XRPC + Lexicon
|
|
5
5
|
Author-email: Ryan Barrett <lexrpc@ryanb.org>
|
|
6
6
|
Project-URL: Homepage, https://github.com/snarfed/lexrpc
|
|
@@ -31,6 +31,8 @@ Requires-Dist: wsproto>=1.0; extra == "flask"
|
|
|
31
31
|
Provides-Extra: docs
|
|
32
32
|
Requires-Dist: sphinx>=7.0.0; extra == "docs"
|
|
33
33
|
Requires-Dist: sphinx-rtd-theme>=3.0.0; extra == "docs"
|
|
34
|
+
Provides-Extra: tests
|
|
35
|
+
Requires-Dist: hypothesis>=6.0; extra == "tests"
|
|
34
36
|
Dynamic: license-file
|
|
35
37
|
|
|
36
38
|
lexrpc [](https://circleci.com/gh/snarfed/lexrpc) [](https://coveralls.io/github/snarfed/lexrpc?branch=master)
|
|
@@ -183,6 +185,7 @@ Here's how to package, test, and ship a new release.
|
|
|
183
185
|
```sh
|
|
184
186
|
source .venv/bin/activate.csh
|
|
185
187
|
python -m unittest discover
|
|
188
|
+
python -m unittest lexrpc/tests/hypothesis/*.py
|
|
186
189
|
```
|
|
187
190
|
1. Bump the version number in `pyproject.toml` and `docs/conf.py`. `git grep` the old version number to make sure it only appears in the changelog. Change the current changelog entry in `README.md` for this new version from _unreleased_ to the current date.
|
|
188
191
|
1. Build the docs. If you added any new modules, add them to the appropriate file(s) in `docs/source/`. Then run `./docs/build.sh`. Check that the generated HTML looks fine by opening `docs/_build/html/index.html` and looking around.
|
|
@@ -219,7 +222,10 @@ Here's how to package, test, and ship a new release.
|
|
|
219
222
|
'main': {
|
|
220
223
|
'type': 'query',
|
|
221
224
|
'description': 'Ping the server',
|
|
222
|
-
'parameters': {
|
|
225
|
+
'parameters': {
|
|
226
|
+
'type': 'params',
|
|
227
|
+
'properties': {'message': {'type': 'string'}},
|
|
228
|
+
},
|
|
223
229
|
'output': {
|
|
224
230
|
'encoding': 'application/json',
|
|
225
231
|
'schema': {
|
|
@@ -254,6 +260,36 @@ Here's how to package, test, and ship a new release.
|
|
|
254
260
|
|
|
255
261
|
## Changelog
|
|
256
262
|
|
|
263
|
+
### 3.0 - 2026-10-18
|
|
264
|
+
|
|
265
|
+
_Breaking changes:_
|
|
266
|
+
|
|
267
|
+
* `flask_server`: [ATProto-decode JSON input](https://atproto.com/specs/data-model#relationship-with-dasl-and-ipld), so methods receive native `CID` and `bytes` values instead of `$link` and `$bytes` dicts. (Also encode methods' output the same way, as ATProto JSON, but that's backward compatible. Details below.)
|
|
268
|
+
|
|
269
|
+
_Non-breaking changes:_
|
|
270
|
+
|
|
271
|
+
* `Client`, `Server`: new `require_lexicons` kwarg, defaults to `True`. If `False`, records with missing or unknown lexicons are skipped during validation instead of raising `NotImplementedError`.
|
|
272
|
+
* Schema validation:
|
|
273
|
+
* `Base.validate`: new `ignore` kwarg, a sequence of property names to skip validating or truncating, anywhere in the record.
|
|
274
|
+
* Fix `ref` type validation to accept string values that match their `ref`, eg token refs inside arrays or unions.
|
|
275
|
+
* Fix `minimum`/`maximum` schema constraint of `0`.
|
|
276
|
+
* `truncate`: truncate string values inside arrays.
|
|
277
|
+
* Fix crash on values with unexpected types when `truncate` is on but `validate` is off, and on non-object `parameters` values.
|
|
278
|
+
* Fail on float values, which aren't in the [data model](https://atproto.com/specs/data-model)
|
|
279
|
+
* Support the new [`space` lexicon type](https://github.com/bluesky-social/proposals/tree/main/0016-permissioned-data#space-type-declarations) and [`space-ref` string format](https://github.com/bluesky-social/proposals/tree/main/0016-permissioned-data#addressing), and allow space `at://` URIs in the `at-uri` format.
|
|
280
|
+
* `Base.decode_params`: decode array values using their `items` type.
|
|
281
|
+
* `XrpcError`: new `status` and `headers` kwargs. `flask_server` uses them in the HTTP response.
|
|
282
|
+
* `Server.method`, `Server.register`: new `override` kwarg that allows replace an existing method.
|
|
283
|
+
* `flask_server`:
|
|
284
|
+
* `init_flask`: new `fallback` kwarg, a callable that handles methods the `Server` doesn't implement instead of returning `MethodNotImplemented`. Useful for [ATservice proxying](https://atproto.com/specs/xrpc#service-proxying).
|
|
285
|
+
* Serve `OPTIONS` CORS preflight requests for methods without lexicons, and for subscriptions.
|
|
286
|
+
* [ATProto-encode JSON output](https://atproto.com/specs/data-model#relationship-with-dasl-and-ipld), so methods can return native `CID` and `bytes` values, which are encoded as `$link` and `$bytes`.
|
|
287
|
+
* Bundle new lexicons:
|
|
288
|
+
* [Blacksky](https://blacksky.community/) (`community.blacksky.assembly`), from [blacksky-algorithms/assembly.blacksky.community@e95bd1f](https://github.com/blacksky-algorithms/assembly.blacksky.community/commit/e95bd1f4039e004115cd31f14d928ce5708fe83f).
|
|
289
|
+
* [Grain](https://grain.social/) (`social.grain`), from [grain.social/grain@319af78](https://tangled.org/grain.social/grain@319af78544239cdb0217d032e89c52dcd8595f0e).
|
|
290
|
+
* [Spark Social](https://sprk.so/) (`so.sprk`), from [sprksocial/server@3f4728d](https://github.com/sprksocial/server@3f4728db308b82ffa63a30cb28224af5beb406f6).
|
|
291
|
+
|
|
292
|
+
|
|
257
293
|
### 2.2 - 2026-06-29
|
|
258
294
|
|
|
259
295
|
* Schema validation:
|
|
@@ -148,6 +148,7 @@ Here's how to package, test, and ship a new release.
|
|
|
148
148
|
```sh
|
|
149
149
|
source .venv/bin/activate.csh
|
|
150
150
|
python -m unittest discover
|
|
151
|
+
python -m unittest lexrpc/tests/hypothesis/*.py
|
|
151
152
|
```
|
|
152
153
|
1. Bump the version number in `pyproject.toml` and `docs/conf.py`. `git grep` the old version number to make sure it only appears in the changelog. Change the current changelog entry in `README.md` for this new version from _unreleased_ to the current date.
|
|
153
154
|
1. Build the docs. If you added any new modules, add them to the appropriate file(s) in `docs/source/`. Then run `./docs/build.sh`. Check that the generated HTML looks fine by opening `docs/_build/html/index.html` and looking around.
|
|
@@ -184,7 +185,10 @@ Here's how to package, test, and ship a new release.
|
|
|
184
185
|
'main': {
|
|
185
186
|
'type': 'query',
|
|
186
187
|
'description': 'Ping the server',
|
|
187
|
-
'parameters': {
|
|
188
|
+
'parameters': {
|
|
189
|
+
'type': 'params',
|
|
190
|
+
'properties': {'message': {'type': 'string'}},
|
|
191
|
+
},
|
|
188
192
|
'output': {
|
|
189
193
|
'encoding': 'application/json',
|
|
190
194
|
'schema': {
|
|
@@ -219,6 +223,36 @@ Here's how to package, test, and ship a new release.
|
|
|
219
223
|
|
|
220
224
|
## Changelog
|
|
221
225
|
|
|
226
|
+
### 3.0 - 2026-10-18
|
|
227
|
+
|
|
228
|
+
_Breaking changes:_
|
|
229
|
+
|
|
230
|
+
* `flask_server`: [ATProto-decode JSON input](https://atproto.com/specs/data-model#relationship-with-dasl-and-ipld), so methods receive native `CID` and `bytes` values instead of `$link` and `$bytes` dicts. (Also encode methods' output the same way, as ATProto JSON, but that's backward compatible. Details below.)
|
|
231
|
+
|
|
232
|
+
_Non-breaking changes:_
|
|
233
|
+
|
|
234
|
+
* `Client`, `Server`: new `require_lexicons` kwarg, defaults to `True`. If `False`, records with missing or unknown lexicons are skipped during validation instead of raising `NotImplementedError`.
|
|
235
|
+
* Schema validation:
|
|
236
|
+
* `Base.validate`: new `ignore` kwarg, a sequence of property names to skip validating or truncating, anywhere in the record.
|
|
237
|
+
* Fix `ref` type validation to accept string values that match their `ref`, eg token refs inside arrays or unions.
|
|
238
|
+
* Fix `minimum`/`maximum` schema constraint of `0`.
|
|
239
|
+
* `truncate`: truncate string values inside arrays.
|
|
240
|
+
* Fix crash on values with unexpected types when `truncate` is on but `validate` is off, and on non-object `parameters` values.
|
|
241
|
+
* Fail on float values, which aren't in the [data model](https://atproto.com/specs/data-model)
|
|
242
|
+
* Support the new [`space` lexicon type](https://github.com/bluesky-social/proposals/tree/main/0016-permissioned-data#space-type-declarations) and [`space-ref` string format](https://github.com/bluesky-social/proposals/tree/main/0016-permissioned-data#addressing), and allow space `at://` URIs in the `at-uri` format.
|
|
243
|
+
* `Base.decode_params`: decode array values using their `items` type.
|
|
244
|
+
* `XrpcError`: new `status` and `headers` kwargs. `flask_server` uses them in the HTTP response.
|
|
245
|
+
* `Server.method`, `Server.register`: new `override` kwarg that allows replace an existing method.
|
|
246
|
+
* `flask_server`:
|
|
247
|
+
* `init_flask`: new `fallback` kwarg, a callable that handles methods the `Server` doesn't implement instead of returning `MethodNotImplemented`. Useful for [ATservice proxying](https://atproto.com/specs/xrpc#service-proxying).
|
|
248
|
+
* Serve `OPTIONS` CORS preflight requests for methods without lexicons, and for subscriptions.
|
|
249
|
+
* [ATProto-encode JSON output](https://atproto.com/specs/data-model#relationship-with-dasl-and-ipld), so methods can return native `CID` and `bytes` values, which are encoded as `$link` and `$bytes`.
|
|
250
|
+
* Bundle new lexicons:
|
|
251
|
+
* [Blacksky](https://blacksky.community/) (`community.blacksky.assembly`), from [blacksky-algorithms/assembly.blacksky.community@e95bd1f](https://github.com/blacksky-algorithms/assembly.blacksky.community/commit/e95bd1f4039e004115cd31f14d928ce5708fe83f).
|
|
252
|
+
* [Grain](https://grain.social/) (`social.grain`), from [grain.social/grain@319af78](https://tangled.org/grain.social/grain@319af78544239cdb0217d032e89c52dcd8595f0e).
|
|
253
|
+
* [Spark Social](https://sprk.so/) (`so.sprk`), from [sprksocial/server@3f4728d](https://github.com/sprksocial/server@3f4728db308b82ffa63a30cb28224af5beb406f6).
|
|
254
|
+
|
|
255
|
+
|
|
222
256
|
### 2.2 - 2026-06-29
|
|
223
257
|
|
|
224
258
|
* Schema validation:
|
|
@@ -23,13 +23,13 @@ LEXICON_TYPES = METHOD_TYPES | frozenset((
|
|
|
23
23
|
'permission-set',
|
|
24
24
|
'record',
|
|
25
25
|
'ref',
|
|
26
|
+
'space',
|
|
26
27
|
'token',
|
|
27
28
|
))
|
|
28
29
|
PARAMETER_TYPES = frozenset((
|
|
29
30
|
'array',
|
|
30
31
|
'boolean',
|
|
31
32
|
'integer',
|
|
32
|
-
'number',
|
|
33
33
|
'string',
|
|
34
34
|
))
|
|
35
35
|
# https://atproto.com/specs/lexicon#overview-of-types
|
|
@@ -90,11 +90,15 @@ TID_RE = re.compile(rf'[{BASE32_CHARS}]{{13}}')
|
|
|
90
90
|
CID_RE = re.compile(r'[A-Za-z0-9+]{8,}')
|
|
91
91
|
|
|
92
92
|
# https://www.w3.org/TR/did-core/#did-syntax
|
|
93
|
+
# https://atproto.com/specs/did
|
|
93
94
|
DID_RE = re.compile(r'did:[a-z]+:[A-Za-z0-9._%:-]{1,2048}(?<!:)')
|
|
94
95
|
|
|
96
|
+
# public at:// URI regexp. excludes space URIs; those have a separate regexp below.
|
|
95
97
|
# https://atproto.com/specs/at-uri-scheme
|
|
98
|
+
#
|
|
96
99
|
# NOTE: duplicated in granary.bluesky!
|
|
97
100
|
# also see arroba.util.parse_at_uri
|
|
101
|
+
#
|
|
98
102
|
# TODO: add query and fragment? they're currently unused in the protocol
|
|
99
103
|
# https://atproto.com/specs/at-uri-scheme#structure
|
|
100
104
|
_CHARS = 'a-zA-Z0-9-.'
|
|
@@ -105,6 +109,22 @@ AT_URI_RE = re.compile(rf"""
|
|
|
105
109
|
(?:/(?P<rkey>[{_CHARS}:~_]+))?)?
|
|
106
110
|
""", re.VERBOSE)
|
|
107
111
|
|
|
112
|
+
# https://github.com/bluesky-social/proposals/tree/main/0016-permissioned-data#addressing
|
|
113
|
+
SPACE_REF_RE = re.compile(rf"""
|
|
114
|
+
at://
|
|
115
|
+
(?P<authority>{DID_RE.pattern})
|
|
116
|
+
/space
|
|
117
|
+
/(?P<type>{NSID_RE.pattern})
|
|
118
|
+
/(?P<skey>{RKEY_RE.pattern})
|
|
119
|
+
""", re.VERBOSE)
|
|
120
|
+
|
|
121
|
+
SPACE_URI_RE = re.compile(rf"""
|
|
122
|
+
{SPACE_REF_RE.pattern}
|
|
123
|
+
(?:/(?P<author>{DID_RE.pattern})
|
|
124
|
+
/(?P<collection>{NSID_RE.pattern})
|
|
125
|
+
/(?P<rkey>{RKEY_RE.pattern}))?
|
|
126
|
+
""", re.VERBOSE)
|
|
127
|
+
|
|
108
128
|
# wrapper for datetime.now, lets us mock it out in tests
|
|
109
129
|
now = lambda tz=timezone.utc, **kwargs: datetime.now(tz=tz, **kwargs)
|
|
110
130
|
|
|
@@ -112,13 +132,18 @@ now = lambda tz=timezone.utc, **kwargs: datetime.now(tz=tz, **kwargs)
|
|
|
112
132
|
class XrpcError(ValueError):
|
|
113
133
|
"""A named error in an XRPC call.
|
|
114
134
|
|
|
115
|
-
|
|
116
|
-
|
|
135
|
+
Args:
|
|
136
|
+
name (str) error name eg ``RepoNotFound`` in ``com.atproto.sync.getRepo``
|
|
137
|
+
message (str): human-readable string error message
|
|
138
|
+
status (int): HTTP status code to respond with
|
|
139
|
+
headers (dict, str -> str): HTTP headers to include in the response.
|
|
117
140
|
"""
|
|
118
|
-
def __init__(self, message, name=None, **kwargs):
|
|
141
|
+
def __init__(self, message, name=None, status=None, headers=None, **kwargs):
|
|
119
142
|
super().__init__(message, **kwargs)
|
|
120
143
|
self.name = name
|
|
121
144
|
self.message = message
|
|
145
|
+
self.status = status
|
|
146
|
+
self.headers = headers or {}
|
|
122
147
|
|
|
123
148
|
|
|
124
149
|
def load_lexicons(traversable):
|
|
@@ -150,8 +175,10 @@ class Base():
|
|
|
150
175
|
defs = None # dict mapping id to lexicon def
|
|
151
176
|
_validate = None
|
|
152
177
|
_truncate = None
|
|
178
|
+
_require_lexicons = None
|
|
153
179
|
|
|
154
|
-
def __init__(self, lexicons=None, validate=True, truncate=False
|
|
180
|
+
def __init__(self, lexicons=None, validate=True, truncate=False,
|
|
181
|
+
require_lexicons=True):
|
|
155
182
|
"""Constructor.
|
|
156
183
|
|
|
157
184
|
Args:
|
|
@@ -161,13 +188,19 @@ class Base():
|
|
|
161
188
|
validate (bool): whether to validate schemas, parameters, and input
|
|
162
189
|
and output bodies
|
|
163
190
|
truncate (bool): whether to truncate string values that are longer
|
|
164
|
-
than their ``maxGraphemes``
|
|
191
|
+
than their ``maxGraphemes`` in their lexicon.
|
|
192
|
+
(TODO: support ``maxLength`` too. Deceptively difficult!)
|
|
193
|
+
require_lexicons (bool): whether to require that a lexicon exists for
|
|
194
|
+
every value we validate. If False, values with missing or unknown
|
|
195
|
+
lexicons are skipped instead of raising
|
|
196
|
+
:class:`NotImplementedError`.
|
|
165
197
|
|
|
166
198
|
Raises:
|
|
167
199
|
ValidationError: if any schema is invalid
|
|
168
200
|
"""
|
|
169
201
|
self._validate = validate
|
|
170
202
|
self._truncate = truncate
|
|
203
|
+
self._require_lexicons = require_lexicons
|
|
171
204
|
self.defs = {}
|
|
172
205
|
|
|
173
206
|
if lexicons is None:
|
|
@@ -208,8 +241,13 @@ class Base():
|
|
|
208
241
|
def _get_def(self, id):
|
|
209
242
|
"""Returns the given lexicon def.
|
|
210
243
|
|
|
244
|
+
Returns:
|
|
245
|
+
dict: the def, or None if it doesn't exist and this object was
|
|
246
|
+
initialized with ``require_lexicons=False``
|
|
247
|
+
|
|
211
248
|
Raises:
|
|
212
|
-
NotImplementedError: if no def exists for the given id
|
|
249
|
+
NotImplementedError: if no def exists for the given id and this object
|
|
250
|
+
was initialized with ``require_lexicons=True``
|
|
213
251
|
"""
|
|
214
252
|
# TODO: bring back once the Bluesky appview validates this too
|
|
215
253
|
# https://github.com/bluesky-social/atproto/discussions/1968#discussioncomment-11195092
|
|
@@ -218,12 +256,12 @@ class Base():
|
|
|
218
256
|
# raise ValidationError(f'#main suffix not allowed on $type: {id}')
|
|
219
257
|
|
|
220
258
|
lexicon = self.defs.get(id)
|
|
221
|
-
if not lexicon:
|
|
259
|
+
if not lexicon and self._require_lexicons:
|
|
222
260
|
fail(f'{id} not found')
|
|
223
261
|
|
|
224
262
|
return lexicon
|
|
225
263
|
|
|
226
|
-
def validate(self, nsid, type, obj):
|
|
264
|
+
def validate(self, nsid, type, obj, ignore=()):
|
|
227
265
|
"""If configured to do so, validates a ATProto value against its lexicon.
|
|
228
266
|
|
|
229
267
|
Returns ``None`` if the object validates, otherwise raises an exception.
|
|
@@ -234,6 +272,8 @@ class Base():
|
|
|
234
272
|
nsid (str): method NSID
|
|
235
273
|
type (str): ``input``, ``output``, ``parameters``, or ``record``
|
|
236
274
|
obj (dict): JSON object
|
|
275
|
+
ignore (sequence of str): property names to ignore and not validate or
|
|
276
|
+
truncate
|
|
237
277
|
|
|
238
278
|
Returns:
|
|
239
279
|
dict: obj, either unchanged, or possible a modified copy if
|
|
@@ -241,15 +281,21 @@ class Base():
|
|
|
241
281
|
|
|
242
282
|
Raises:
|
|
243
283
|
NotImplementedError: if no lexicon exists for the given NSID, or the
|
|
244
|
-
lexicon does not define a schema for the given type
|
|
284
|
+
lexicon does not define a schema for the given type, and this object
|
|
285
|
+
was initialized with ``require_lexicons=True``
|
|
245
286
|
ValidationError: if the object is invalid
|
|
287
|
+
|
|
246
288
|
"""
|
|
247
289
|
if not self._validate and not self._truncate:
|
|
248
290
|
return obj
|
|
249
291
|
|
|
250
292
|
assert type in ('input', 'output', 'message', 'parameters', 'record'), type
|
|
251
293
|
|
|
252
|
-
|
|
294
|
+
if not (defn := self._get_def(nsid)):
|
|
295
|
+
logger.debug(f'No lexicon for {nsid}, skipping validation')
|
|
296
|
+
return obj
|
|
297
|
+
|
|
298
|
+
base = defn.get(type, {})
|
|
253
299
|
encoding = base.get('encoding')
|
|
254
300
|
if encoding and encoding != 'application/json':
|
|
255
301
|
# binary or other non-JSON data, pass through
|
|
@@ -266,11 +312,12 @@ class Base():
|
|
|
266
312
|
# params at all, eg utm_* tracking params
|
|
267
313
|
|
|
268
314
|
self._validate_schema(name=type, val=obj, type_name=nsid, lexicon=nsid,
|
|
269
|
-
schema=schema)
|
|
315
|
+
schema=schema, ignore=ignore)
|
|
270
316
|
|
|
271
317
|
return obj
|
|
272
318
|
|
|
273
|
-
def _validate_schema(self, *, name, val, type_name, lexicon, schema
|
|
319
|
+
def _validate_schema(self, *, name, val, type_name, lexicon, schema,
|
|
320
|
+
ignore=()):
|
|
274
321
|
"""Validates an ATProto value against a lexicon schema.
|
|
275
322
|
|
|
276
323
|
Returns ``None`` if the value validates, otherwise raises an exception.
|
|
@@ -285,6 +332,8 @@ class Base():
|
|
|
285
332
|
eg ``app.bsky.feed.post`` or ``app.bsky.feed.post#replyRef``
|
|
286
333
|
schema (dict): schema to validate against if this is a compound
|
|
287
334
|
object and not a primitive
|
|
335
|
+
ignore (sequence of str): property names to ignore and not validate or
|
|
336
|
+
truncate
|
|
288
337
|
|
|
289
338
|
Raises:
|
|
290
339
|
ValidationError: if the value is invalid
|
|
@@ -292,12 +341,16 @@ class Base():
|
|
|
292
341
|
# logger.debug(f'@ {name} {type_name} {lexicon} {str(val)[:100]} {str(schema)[:100]}')
|
|
293
342
|
|
|
294
343
|
def get_schema(lex_name):
|
|
295
|
-
"""Returns (fully qualified lexicon name, lexicon) tuple.
|
|
344
|
+
"""Returns (fully qualified lexicon name, lexicon) tuple.
|
|
345
|
+
|
|
346
|
+
The lexicon is None if it's not found and ``require_lexicons`` is off.
|
|
347
|
+
"""
|
|
296
348
|
if lex_name.startswith('#'):
|
|
297
349
|
schema_name = lexicon.split('#')[0] + lex_name
|
|
298
350
|
else:
|
|
299
351
|
schema_name = lex_name
|
|
300
|
-
schema
|
|
352
|
+
if not (schema := self._get_def(schema_name)):
|
|
353
|
+
return schema_name, None
|
|
301
354
|
if schema.get('type') == 'record':
|
|
302
355
|
schema = schema.get('record')
|
|
303
356
|
if not schema:
|
|
@@ -326,6 +379,8 @@ class Base():
|
|
|
326
379
|
if type_ == 'unknown':
|
|
327
380
|
if isinstance(val, dict) and val.get('$type'):
|
|
328
381
|
lexicon, schema = get_schema(val['$type'])
|
|
382
|
+
if not schema:
|
|
383
|
+
return
|
|
329
384
|
# pass through and validate with this schema
|
|
330
385
|
else:
|
|
331
386
|
return
|
|
@@ -333,6 +388,9 @@ class Base():
|
|
|
333
388
|
if expected := FIELD_TYPES.get(type_):
|
|
334
389
|
if type(val) != expected:
|
|
335
390
|
fail(f'has unexpected type {type(val).__name__}')
|
|
391
|
+
# if we're only truncating, fail is a noop, but the checks
|
|
392
|
+
# below all assume this type, so stop here
|
|
393
|
+
return
|
|
336
394
|
|
|
337
395
|
if type_ in ('array', 'bytes', 'string'):
|
|
338
396
|
min_length = schema.get('minLength')
|
|
@@ -359,10 +417,10 @@ class Base():
|
|
|
359
417
|
if max_graphemes and length > max_graphemes:
|
|
360
418
|
fail(f'is longer than maxGraphemes {max_graphemes}')
|
|
361
419
|
|
|
362
|
-
if minimum := schema.get('minimum'):
|
|
420
|
+
if (minimum := schema.get('minimum')) is not None:
|
|
363
421
|
if val < minimum:
|
|
364
422
|
fail(f'is lower than minimum {minimum}')
|
|
365
|
-
if maximum := schema.get('maximum'):
|
|
423
|
+
if (maximum := schema.get('maximum')) is not None:
|
|
366
424
|
if val > maximum:
|
|
367
425
|
fail(f'is higher than maximum {maximum}')
|
|
368
426
|
|
|
@@ -374,11 +432,14 @@ class Base():
|
|
|
374
432
|
|
|
375
433
|
if type_ == 'ref':
|
|
376
434
|
ref = schema['ref']
|
|
377
|
-
if isinstance(val, str)
|
|
378
|
-
|
|
435
|
+
if isinstance(val, str):
|
|
436
|
+
if val != ref:
|
|
437
|
+
fail(f'is not {ref}')
|
|
379
438
|
elif not isinstance(val, dict):
|
|
380
439
|
fail('is not object')
|
|
381
440
|
lexicon, schema = get_schema(ref)
|
|
441
|
+
if not schema:
|
|
442
|
+
return
|
|
382
443
|
|
|
383
444
|
if type_ == 'union':
|
|
384
445
|
if isinstance(val, dict):
|
|
@@ -406,6 +467,9 @@ class Base():
|
|
|
406
467
|
logger.debug(f'Skipping unknown type {inner_type}')
|
|
407
468
|
return
|
|
408
469
|
|
|
470
|
+
if not schema:
|
|
471
|
+
return
|
|
472
|
+
|
|
409
473
|
# TODO: maybe bring back once we figure out why the AppView isn't
|
|
410
474
|
# currently enforcing these:
|
|
411
475
|
# https://github.com/snarfed/bridgy-fed/issues/1348#issuecomment-2381056468
|
|
@@ -419,19 +483,30 @@ class Base():
|
|
|
419
483
|
# self.validate_mime_type(val['mimeType'], schema.get('accept'), name=name)
|
|
420
484
|
|
|
421
485
|
if type_ == 'array':
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
486
|
+
items = schema['items']
|
|
487
|
+
for i, item in enumerate(val):
|
|
488
|
+
if (self._truncate and items['type'] == 'string'
|
|
489
|
+
and isinstance(item, str)
|
|
490
|
+
and (max_graphemes := items.get('maxGraphemes'))
|
|
491
|
+
and grapheme.length(item) > max_graphemes):
|
|
492
|
+
item = val[i] = grapheme.slice(item, end=max_graphemes - 1) + '…'
|
|
493
|
+
|
|
494
|
+
self._validate_schema(name=name, val=item,
|
|
495
|
+
type_name=items['type'],
|
|
496
|
+
lexicon=lexicon, schema=items, ignore=ignore)
|
|
426
497
|
|
|
427
498
|
props = schema.get('properties', {})
|
|
428
|
-
|
|
499
|
+
is_params = schema.get('type') == 'params'
|
|
500
|
+
if (props or is_params) and not isinstance(val, dict):
|
|
429
501
|
fail('should be object')
|
|
502
|
+
return
|
|
430
503
|
|
|
431
504
|
required = schema.get('required', [])
|
|
432
505
|
nullable = schema.get('nullable', [])
|
|
433
506
|
for prop_name, prop_schema in props.items():
|
|
434
|
-
if prop_name
|
|
507
|
+
if prop_name in ignore:
|
|
508
|
+
continue
|
|
509
|
+
elif prop_name not in val:
|
|
435
510
|
if prop_name in required:
|
|
436
511
|
fail(f'missing required property {prop_name}')
|
|
437
512
|
continue
|
|
@@ -445,6 +520,7 @@ class Base():
|
|
|
445
520
|
continue
|
|
446
521
|
|
|
447
522
|
elif (self._truncate and prop_type == 'string'
|
|
523
|
+
and isinstance(prop_val, str)
|
|
448
524
|
and (max_graphemes := prop_schema.get('maxGraphemes'))):
|
|
449
525
|
if grapheme.length(prop_val) > max_graphemes:
|
|
450
526
|
prop_val = val[prop_name] = grapheme.slice(
|
|
@@ -452,13 +528,16 @@ class Base():
|
|
|
452
528
|
|
|
453
529
|
elif prop_type == 'ref':
|
|
454
530
|
prop_lexicon, prop_schema = get_schema(prop_schema['ref'])
|
|
531
|
+
if not prop_schema:
|
|
532
|
+
continue
|
|
455
533
|
prop_type = prop_schema['type']
|
|
456
534
|
|
|
457
535
|
self._validate_schema(name=prop_name, val=prop_val, type_name=prop_type,
|
|
458
|
-
lexicon=prop_lexicon, schema=prop_schema
|
|
536
|
+
lexicon=prop_lexicon, schema=prop_schema,
|
|
537
|
+
ignore=ignore)
|
|
459
538
|
|
|
460
539
|
# unknown parameters aren't allowed
|
|
461
|
-
if
|
|
540
|
+
if is_params:
|
|
462
541
|
if unknown := val.keys() - props.keys():
|
|
463
542
|
fail(f'unknown parameters: {unknown}')
|
|
464
543
|
|
|
@@ -486,7 +565,7 @@ class Base():
|
|
|
486
565
|
|
|
487
566
|
elif format == 'at-uri':
|
|
488
567
|
check(len(val) < 8 * 1024)
|
|
489
|
-
check(AT_URI_RE.fullmatch(val))
|
|
568
|
+
check(AT_URI_RE.fullmatch(val) or SPACE_URI_RE.fullmatch(val))
|
|
490
569
|
check('/./' not in val
|
|
491
570
|
and '/../' not in val
|
|
492
571
|
and not val.endswith('/.')
|
|
@@ -532,6 +611,10 @@ class Base():
|
|
|
532
611
|
elif format == 'record-key':
|
|
533
612
|
check(val not in ('.', '..') and RKEY_RE.fullmatch(val))
|
|
534
613
|
|
|
614
|
+
elif format == 'space-ref':
|
|
615
|
+
match = SPACE_REF_RE.fullmatch(val)
|
|
616
|
+
check(match and match['skey'] not in ('.', '..'))
|
|
617
|
+
|
|
535
618
|
elif format == 'uri':
|
|
536
619
|
check(len(val) < 8 * 1024)
|
|
537
620
|
check(' ' not in val)
|
|
@@ -581,7 +664,7 @@ class Base():
|
|
|
581
664
|
Based on https://atproto.com/specs/xrpc#lexicon-http-endpoints
|
|
582
665
|
|
|
583
666
|
Args:
|
|
584
|
-
params (dict): maps str names to boolean,
|
|
667
|
+
params (dict): maps str names to boolean, integer, str, or list values
|
|
585
668
|
|
|
586
669
|
Returns:
|
|
587
670
|
bytes: URL-encoded query parameter string
|
|
@@ -603,43 +686,49 @@ class Base():
|
|
|
603
686
|
params (sequence of (str, str) tuple): name/value mappings
|
|
604
687
|
|
|
605
688
|
Returns:
|
|
606
|
-
dict: maps str names to decoded boolean,
|
|
689
|
+
dict: maps str names to decoded boolean, integer, str, and array values
|
|
607
690
|
|
|
608
691
|
Raises:
|
|
609
692
|
ValueError: if a parameter value can't be decoded
|
|
610
693
|
NotImplementedError: if no method lexicon is registered for the given NSID
|
|
611
694
|
"""
|
|
612
|
-
lexicon
|
|
613
|
-
|
|
695
|
+
if not (lexicon := self._get_def(method_nsid)):
|
|
696
|
+
fail(f'{method_nsid} not found')
|
|
614
697
|
|
|
615
|
-
|
|
616
|
-
for name, val in params:
|
|
617
|
-
type = params_schema.get(name, {}).get('type') or 'string'
|
|
618
|
-
assert type in PARAMETER_TYPES, type
|
|
698
|
+
params_schema = lexicon.get('parameters', {}).get('properties', {})
|
|
619
699
|
|
|
700
|
+
def decode(val, type, name):
|
|
620
701
|
if type == 'boolean':
|
|
621
702
|
if val == 'true':
|
|
622
|
-
|
|
703
|
+
return True
|
|
623
704
|
elif val == 'false':
|
|
624
|
-
|
|
705
|
+
return False
|
|
625
706
|
else:
|
|
626
707
|
raise ValueError(
|
|
627
708
|
f'Got {val!r} for boolean parameter {name}, expected true or false')
|
|
628
709
|
|
|
629
710
|
try:
|
|
630
|
-
if type
|
|
631
|
-
|
|
632
|
-
elif type in ('int', 'integer'):
|
|
633
|
-
decoded[name] = int(val)
|
|
711
|
+
if type in ('int', 'integer'):
|
|
712
|
+
return int(val)
|
|
634
713
|
except ValueError as e:
|
|
635
714
|
e.args = [f'{e.args[0]} for {type} parameter {name}']
|
|
636
715
|
raise e
|
|
637
716
|
|
|
638
717
|
if type == 'string':
|
|
639
|
-
|
|
718
|
+
return val
|
|
719
|
+
|
|
720
|
+
decoded = {}
|
|
721
|
+
for name, val in params:
|
|
722
|
+
schema = params_schema.get(name, {})
|
|
723
|
+
type = schema.get('type') or 'string'
|
|
724
|
+
assert type in PARAMETER_TYPES, type
|
|
640
725
|
|
|
641
726
|
if type == 'array':
|
|
642
|
-
|
|
727
|
+
item_type = schema.get('items', {}).get('type') or 'string'
|
|
728
|
+
assert item_type in PARAMETER_TYPES, item_type
|
|
729
|
+
decoded.setdefault(name, []).append(decode(val, item_type, name))
|
|
730
|
+
else:
|
|
731
|
+
decoded[name] = decode(val, type, name)
|
|
643
732
|
|
|
644
733
|
return decoded
|
|
645
734
|
|
|
@@ -77,7 +77,7 @@ class Client(Base):
|
|
|
77
77
|
|
|
78
78
|
def __init__(self, address=None, access_token=None, refresh_token=None,
|
|
79
79
|
session_callback=None, lexicons=None, validate=True, truncate=False,
|
|
80
|
-
requests_session=None, **requests_kwargs):
|
|
80
|
+
require_lexicons=True, requests_session=None, **requests_kwargs):
|
|
81
81
|
"""Constructor.
|
|
82
82
|
|
|
83
83
|
Args:
|
|
@@ -98,6 +98,10 @@ class Client(Base):
|
|
|
98
98
|
and output bodies
|
|
99
99
|
truncate (bool): whether to truncate string values that are longer
|
|
100
100
|
than their ``maxGraphemes`` or ``maxLength`` in their lexicon
|
|
101
|
+
require_lexicons (bool): whether to require that a lexicon exists for
|
|
102
|
+
every value we validate. If False, values with missing or unknown
|
|
103
|
+
lexicons are skipped instead of raising
|
|
104
|
+
:class:`NotImplementedError`.
|
|
101
105
|
requests_session (requests.Session): optional HTTP session to use for
|
|
102
106
|
requests. Defaults to a new :class:`requests.Session`.
|
|
103
107
|
requests_kwargs: passed to :func:`requests.Session.get` /
|
|
@@ -108,7 +112,8 @@ class Client(Base):
|
|
|
108
112
|
Raises:
|
|
109
113
|
ValidationError: if any lexicon schema is invalid
|
|
110
114
|
"""
|
|
111
|
-
super().__init__(lexicons=lexicons, validate=validate, truncate=truncate
|
|
115
|
+
super().__init__(lexicons=lexicons, validate=validate, truncate=truncate,
|
|
116
|
+
require_lexicons=require_lexicons)
|
|
112
117
|
|
|
113
118
|
assert not ((access_token or refresh_token) and requests_kwargs.get('auth'))
|
|
114
119
|
|
|
@@ -175,8 +180,8 @@ class Client(Base):
|
|
|
175
180
|
params = self.validate(nsid, 'parameters', params)
|
|
176
181
|
params_str = self.encode_params(params)
|
|
177
182
|
|
|
178
|
-
lexicon = self._get_def(nsid)
|
|
179
|
-
type = lexicon
|
|
183
|
+
lexicon = self._get_def(nsid) or {}
|
|
184
|
+
type = lexicon.get('type')
|
|
180
185
|
if type == 'subscription':
|
|
181
186
|
input = self.validate(nsid, 'input', input)
|
|
182
187
|
|