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.
Files changed (600) hide show
  1. {lexrpc-2.2/lexrpc.egg-info → lexrpc-3.0}/PKG-INFO +38 -2
  2. {lexrpc-2.2 → lexrpc-3.0}/README.md +35 -1
  3. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/base.py +133 -44
  4. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/client.py +9 -4
  5. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/flask_server.py +34 -13
  6. lexrpc-3.0/lexrpc/lexicons/app/bsky/actor/contentVisibilityDeclaration.json +21 -0
  7. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/defs.json +16 -1
  8. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/ageassurance/defs.json +16 -0
  9. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/authCreatePosts.json +6 -1
  10. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/authFullApp.json +8 -1
  11. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/authViewAll.json +2 -0
  12. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/draft/createDraft.json +1 -0
  13. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/embed/video.json +4 -8
  14. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/defs.json +23 -1
  15. lexrpc-3.0/lexrpc/lexicons/app/bsky/feed/searchPostsV2.json +225 -0
  16. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getFollowers.json +5 -1
  17. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getFollows.json +5 -1
  18. lexrpc-3.0/lexrpc/lexicons/app/bsky/graph/getMutes.json +39 -0
  19. lexrpc-3.0/lexrpc/lexicons/app/bsky/graph/muteActor.json +28 -0
  20. lexrpc-3.0/lexrpc/lexicons/app/bsky/graph/searchStarterPacksV2.json +52 -0
  21. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/defs.json +6 -1
  22. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/listNotifications.json +5 -0
  23. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/putPreferencesV2.json +2 -1
  24. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/defs.json +11 -1
  25. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getTrends.json +4 -0
  26. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getTrendsSkeleton.json +4 -0
  27. lexrpc-3.0/lexrpc/lexicons/app/bsky/video/abortUpload.json +55 -0
  28. lexrpc-3.0/lexrpc/lexicons/app/bsky/video/defs.json +49 -0
  29. lexrpc-3.0/lexrpc/lexicons/app/bsky/video/finishUpload.json +73 -0
  30. lexrpc-3.0/lexrpc/lexicons/app/bsky/video/getUploadStatus.json +75 -0
  31. lexrpc-3.0/lexrpc/lexicons/app/bsky/video/startUpload.json +94 -0
  32. lexrpc-3.0/lexrpc/lexicons/app/bsky/video/uploadPart.json +70 -0
  33. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/actor/declaration.json +1 -1
  34. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/actor/defs.json +2 -3
  35. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/defs.json +66 -37
  36. lexrpc-3.0/lexrpc/lexicons/chat/bsky/convo/getUnreadCounts.json +37 -0
  37. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/listConvoRequests.json +1 -1
  38. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/lockConvo.json +1 -1
  39. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/sendMessage.json +5 -1
  40. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/sendMessageBatch.json +5 -1
  41. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/unlockConvo.json +6 -2
  42. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/embed/joinLink.json +7 -3
  43. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/addMembers.json +1 -1
  44. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/approveJoinRequest.json +1 -1
  45. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/createGroup.json +3 -2
  46. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/createJoinLink.json +1 -1
  47. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/defs.json +27 -6
  48. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/disableJoinLink.json +1 -1
  49. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/editGroup.json +3 -3
  50. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/editJoinLink.json +1 -1
  51. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/enableJoinLink.json +1 -1
  52. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/getJoinLinkPreviews.json +7 -3
  53. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/listJoinRequests.json +1 -1
  54. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/listMutualGroups.json +1 -1
  55. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/rejectJoinRequest.json +1 -1
  56. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/removeMembers.json +1 -1
  57. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/requestJoin.json +1 -1
  58. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/updateJoinRequestsRead.json +1 -1
  59. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/group/withdrawJoinRequest.json +1 -1
  60. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/moderation/defs.json +5 -5
  61. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/moderation/getConvo.json +1 -1
  62. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/moderation/getConvoMembers.json +1 -1
  63. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/moderation/getConvos.json +1 -1
  64. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/moderation/subscribeModEvents.json +2 -1
  65. lexrpc-3.0/lexrpc/lexicons/chat/bsky/notification/defs.json +25 -0
  66. lexrpc-3.0/lexrpc/lexicons/chat/bsky/notification/getPreferences.json +23 -0
  67. lexrpc-3.0/lexrpc/lexicons/chat/bsky/notification/putPreferences.json +39 -0
  68. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/describeServer.json +4 -0
  69. lexrpc-3.0/lexrpc/lexicons/community/blacksky/assembly/conversation.json +38 -0
  70. lexrpc-3.0/lexrpc/lexicons/community/blacksky/assembly/statement.json +37 -0
  71. lexrpc-3.0/lexrpc/lexicons/community/blacksky/assembly/vote.json +32 -0
  72. lexrpc-3.0/lexrpc/lexicons/site/standard/document.json +115 -0
  73. lexrpc-3.0/lexrpc/lexicons/site/standard/graph/recommend.json +26 -0
  74. lexrpc-3.0/lexrpc/lexicons/site/standard/graph/subscription.json +26 -0
  75. lexrpc-3.0/lexrpc/lexicons/site/standard/publication.json +65 -0
  76. lexrpc-3.0/lexrpc/lexicons/site/standard/theme/basic.json +37 -0
  77. lexrpc-3.0/lexrpc/lexicons/site/standard/theme/color.json +53 -0
  78. lexrpc-3.0/lexrpc/lexicons/so/sprk/actor/defs.json +387 -0
  79. lexrpc-3.0/lexrpc/lexicons/so/sprk/actor/getPreferences.json +27 -0
  80. lexrpc-3.0/lexrpc/lexicons/so/sprk/actor/getProfile.json +28 -0
  81. lexrpc-3.0/lexrpc/lexicons/so/sprk/actor/getProfiles.json +37 -0
  82. lexrpc-3.0/lexrpc/lexicons/so/sprk/actor/getSuggestions.json +43 -0
  83. lexrpc-3.0/lexrpc/lexicons/so/sprk/actor/profile.json +53 -0
  84. lexrpc-3.0/lexrpc/lexicons/so/sprk/actor/putPreferences.json +23 -0
  85. lexrpc-3.0/lexrpc/lexicons/so/sprk/actor/searchActors.json +43 -0
  86. lexrpc-3.0/lexrpc/lexicons/so/sprk/actor/searchActorsTypeahead.json +41 -0
  87. lexrpc-3.0/lexrpc/lexicons/so/sprk/authCreatePosts.json +37 -0
  88. lexrpc-3.0/lexrpc/lexicons/so/sprk/authDeleteContent.json +29 -0
  89. lexrpc-3.0/lexrpc/lexicons/so/sprk/authFullApp.json +94 -0
  90. lexrpc-3.0/lexrpc/lexicons/so/sprk/authManageFeedDeclarations.json +21 -0
  91. lexrpc-3.0/lexrpc/lexicons/so/sprk/authManageLabelerService.json +21 -0
  92. lexrpc-3.0/lexrpc/lexicons/so/sprk/authManageModeration.json +34 -0
  93. lexrpc-3.0/lexrpc/lexicons/so/sprk/authManageNotifications.json +28 -0
  94. lexrpc-3.0/lexrpc/lexicons/so/sprk/authManageProfile.json +21 -0
  95. lexrpc-3.0/lexrpc/lexicons/so/sprk/authViewAll.json +64 -0
  96. lexrpc-3.0/lexrpc/lexicons/so/sprk/embed/defs.json +83 -0
  97. lexrpc-3.0/lexrpc/lexicons/so/sprk/embed/mention.json +39 -0
  98. lexrpc-3.0/lexrpc/lexicons/so/sprk/embed/record.json +39 -0
  99. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/defs.json +326 -0
  100. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/describeFeedGenerator.json +39 -0
  101. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/generator.json +47 -0
  102. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getActorFeeds.json +41 -0
  103. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getActorLikes.json +42 -0
  104. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getActorReposts.json +42 -0
  105. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getAuthorFeed.json +53 -0
  106. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getCrosspostThread.json +93 -0
  107. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getFeed.json +42 -0
  108. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getFeedGenerator.json +42 -0
  109. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getFeedGenerators.json +36 -0
  110. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getFeedSkeleton.json +46 -0
  111. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getLikes.json +58 -0
  112. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getPostThread.json +93 -0
  113. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getPosts.json +35 -0
  114. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getRepostedBy.json +52 -0
  115. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getSuggestedFeeds.json +39 -0
  116. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/getTimeline.json +43 -0
  117. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/like.json +20 -0
  118. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/post.json +69 -0
  119. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/reply.json +54 -0
  120. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/repost.json +20 -0
  121. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/searchPosts.json +58 -0
  122. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/sendInteractions.json +33 -0
  123. lexrpc-3.0/lexrpc/lexicons/so/sprk/feed/threadgate.json +56 -0
  124. lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/block.json +23 -0
  125. lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/defs.json +33 -0
  126. lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/follow.json +19 -0
  127. lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/getBlocks.json +39 -0
  128. lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/getFollowers.json +45 -0
  129. lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/getFollows.json +45 -0
  130. lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/getKnownFollowers.json +45 -0
  131. {lexrpc-2.2/lexrpc/lexicons/app/bsky → lexrpc-3.0/lexrpc/lexicons/so/sprk}/graph/getMutes.json +2 -2
  132. lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/getRelationships.json +56 -0
  133. lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/getSuggestedFollowsByActor.json +42 -0
  134. {lexrpc-2.2/lexrpc/lexicons/app/bsky → lexrpc-3.0/lexrpc/lexicons/so/sprk}/graph/muteActor.json +2 -2
  135. lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/muteThread.json +20 -0
  136. lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/unmuteActor.json +20 -0
  137. lexrpc-3.0/lexrpc/lexicons/so/sprk/graph/unmuteThread.json +20 -0
  138. lexrpc-3.0/lexrpc/lexicons/so/sprk/labeler/defs.json +91 -0
  139. lexrpc-3.0/lexrpc/lexicons/so/sprk/labeler/getServices.json +43 -0
  140. lexrpc-3.0/lexrpc/lexicons/so/sprk/labeler/service.json +47 -0
  141. lexrpc-3.0/lexrpc/lexicons/so/sprk/media/defs.json +15 -0
  142. lexrpc-3.0/lexrpc/lexicons/so/sprk/media/image.json +50 -0
  143. lexrpc-3.0/lexrpc/lexicons/so/sprk/media/images.json +29 -0
  144. lexrpc-3.0/lexrpc/lexicons/so/sprk/media/video.json +66 -0
  145. lexrpc-3.0/lexrpc/lexicons/so/sprk/notification/getUnreadCount.json +27 -0
  146. lexrpc-3.0/lexrpc/lexicons/so/sprk/notification/listNotifications.json +86 -0
  147. lexrpc-3.0/lexrpc/lexicons/so/sprk/notification/putPreferences.json +20 -0
  148. lexrpc-3.0/lexrpc/lexicons/so/sprk/notification/registerPush.json +26 -0
  149. lexrpc-3.0/lexrpc/lexicons/so/sprk/notification/unregisterPush.json +26 -0
  150. lexrpc-3.0/lexrpc/lexicons/so/sprk/notification/updateSeen.json +20 -0
  151. lexrpc-3.0/lexrpc/lexicons/so/sprk/richtext/facet.json +51 -0
  152. lexrpc-3.0/lexrpc/lexicons/so/sprk/sound/audio.json +46 -0
  153. lexrpc-3.0/lexrpc/lexicons/so/sprk/sound/defs.json +37 -0
  154. lexrpc-3.0/lexrpc/lexicons/so/sprk/sound/getActorAudios.json +41 -0
  155. lexrpc-3.0/lexrpc/lexicons/so/sprk/sound/getAudioPosts.json +46 -0
  156. lexrpc-3.0/lexrpc/lexicons/so/sprk/sound/getAudios.json +35 -0
  157. lexrpc-3.0/lexrpc/lexicons/so/sprk/sound/getTrendingAudios.json +39 -0
  158. lexrpc-3.0/lexrpc/lexicons/so/sprk/sound/searchAudios.json +44 -0
  159. lexrpc-3.0/lexrpc/lexicons/so/sprk/story/defs.json +62 -0
  160. lexrpc-3.0/lexrpc/lexicons/so/sprk/story/getStories.json +34 -0
  161. lexrpc-3.0/lexrpc/lexicons/so/sprk/story/getTimeline.json +39 -0
  162. lexrpc-3.0/lexrpc/lexicons/so/sprk/story/post.json +39 -0
  163. {lexrpc-2.2/lexrpc/lexicons/app/bsky → lexrpc-3.0/lexrpc/lexicons/so/sprk}/video/defs.json +23 -2
  164. lexrpc-3.0/lexrpc/lexicons/so/sprk/video/getJobStatus.json +32 -0
  165. lexrpc-3.0/lexrpc/lexicons/so/sprk/video/getUploadLimits.json +24 -0
  166. lexrpc-3.0/lexrpc/lexicons/so/sprk/video/uploadVideo.json +26 -0
  167. lexrpc-3.0/lexrpc/lexicons/social/grain/actor/defs.json +89 -0
  168. lexrpc-3.0/lexrpc/lexicons/social/grain/actor/profile.json +34 -0
  169. lexrpc-3.0/lexrpc/lexicons/social/grain/comment/comment.json +42 -0
  170. lexrpc-3.0/lexrpc/lexicons/social/grain/comment/defs.json +61 -0
  171. lexrpc-3.0/lexrpc/lexicons/social/grain/defs.json +15 -0
  172. lexrpc-3.0/lexrpc/lexicons/social/grain/favorite/favorite.json +24 -0
  173. lexrpc-3.0/lexrpc/lexicons/social/grain/gallery/defs.json +130 -0
  174. lexrpc-3.0/lexrpc/lexicons/social/grain/gallery/gallery.json +32 -0
  175. lexrpc-3.0/lexrpc/lexicons/social/grain/gallery/item.json +32 -0
  176. lexrpc-3.0/lexrpc/lexicons/social/grain/graph/block.json +24 -0
  177. lexrpc-3.0/lexrpc/lexicons/social/grain/graph/follow.json +24 -0
  178. lexrpc-3.0/lexrpc/lexicons/social/grain/graph/muteActor.json +30 -0
  179. lexrpc-3.0/lexrpc/lexicons/social/grain/graph/unmuteActor.json +30 -0
  180. lexrpc-3.0/lexrpc/lexicons/social/grain/group/decline.json +29 -0
  181. lexrpc-3.0/lexrpc/lexicons/social/grain/group/defs.json +164 -0
  182. lexrpc-3.0/lexrpc/lexicons/social/grain/group/item.json +31 -0
  183. lexrpc-3.0/lexrpc/lexicons/social/grain/group/submission.json +31 -0
  184. lexrpc-3.0/lexrpc/lexicons/social/grain/photo/defs.json +68 -0
  185. lexrpc-3.0/lexrpc/lexicons/social/grain/photo/exif.json +29 -0
  186. lexrpc-3.0/lexrpc/lexicons/social/grain/photo/photo.json +30 -0
  187. lexrpc-3.0/lexrpc/lexicons/social/grain/privateGallery.json +13 -0
  188. lexrpc-3.0/lexrpc/lexicons/social/grain/story/defs.json +55 -0
  189. lexrpc-3.0/lexrpc/lexicons/social/grain/story/story.json +30 -0
  190. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/addSpaceMember.json +49 -0
  191. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/createGroup.json +38 -0
  192. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/createPoolComment.json +64 -0
  193. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/createPoolGallery.json +66 -0
  194. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/createPrivateGallery.json +93 -0
  195. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/deleteAccount.json +17 -0
  196. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/deleteGallery.json +27 -0
  197. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/deletePoolComment.json +25 -0
  198. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/deletePoolGallery.json +38 -0
  199. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getActorFavorites.json +33 -0
  200. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getActorProfile.json +25 -0
  201. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getBlocks.json +41 -0
  202. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getCameras.json +46 -0
  203. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getCommentThread.json +38 -0
  204. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getFollowers.json +52 -0
  205. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getFollowing.json +52 -0
  206. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getGallery.json +34 -0
  207. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getGalleryFavorites.json +49 -0
  208. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getGroup.json +27 -0
  209. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getGroupHost.json +21 -0
  210. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getGroupSubmissions.json +48 -0
  211. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getKnownFollowers.json +45 -0
  212. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getLocations.json +66 -0
  213. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getMutes.json +40 -0
  214. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getNotifications.json +66 -0
  215. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getPoolGallery.json +144 -0
  216. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getPrivateGallery.json +67 -0
  217. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getSitemap.json +59 -0
  218. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getSpaceMembers.json +46 -0
  219. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getSpaceSupport.json +45 -0
  220. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getStories.json +33 -0
  221. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getStory.json +25 -0
  222. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getStoryArchive.json +33 -0
  223. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getStoryAuthors.json +44 -0
  224. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/getSuggestedFollows.json +45 -0
  225. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/joinGroup.json +40 -0
  226. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/leaveGroup.json +30 -0
  227. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/listGroups.json +47 -0
  228. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/listPoolFeed.json +117 -0
  229. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/listPoolGalleries.json +109 -0
  230. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/listPrivateGalleries.json +39 -0
  231. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/listSharedGalleries.json +41 -0
  232. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/markStoriesViewed.json +33 -0
  233. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/putPoolFavorite.json +40 -0
  234. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/searchActorsTypeahead.json +39 -0
  235. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/searchGalleries.json +33 -0
  236. lexrpc-3.0/lexrpc/lexicons/social/grain/unspecced/searchProfiles.json +47 -0
  237. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/queue/createQueue.json +12 -5
  238. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/queue/defs.json +6 -5
  239. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/queue/listQueues.json +1 -1
  240. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/queue/updateQueue.json +13 -2
  241. lexrpc-3.0/lexrpc/lexicons/tools/ozone/report/closeReports.json +56 -0
  242. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/createActivity.json +7 -3
  243. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/defs.json +10 -0
  244. lexrpc-3.0/lexrpc/lexicons/tools/ozone/report/queryActivities.json +66 -0
  245. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/queryReports.json +2 -2
  246. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/server.py +19 -12
  247. {lexrpc-2.2 → lexrpc-3.0/lexrpc.egg-info}/PKG-INFO +38 -2
  248. {lexrpc-2.2 → lexrpc-3.0}/lexrpc.egg-info/SOURCES.txt +176 -2
  249. {lexrpc-2.2 → lexrpc-3.0}/lexrpc.egg-info/requires.txt +3 -0
  250. {lexrpc-2.2 → lexrpc-3.0}/pyproject.toml +4 -1
  251. lexrpc-2.2/lexrpc/lexicons/site/standard/authFull.json +0 -23
  252. lexrpc-2.2/lexrpc/lexicons/site/standard/authSocial.json +0 -21
  253. lexrpc-2.2/lexrpc/lexicons/site/standard/document.json +0 -125
  254. lexrpc-2.2/lexrpc/lexicons/site/standard/graph/recommend.json +0 -29
  255. lexrpc-2.2/lexrpc/lexicons/site/standard/graph/subscription.json +0 -28
  256. lexrpc-2.2/lexrpc/lexicons/site/standard/publication.json +0 -72
  257. lexrpc-2.2/lexrpc/lexicons/site/standard/theme/basic.json +0 -50
  258. lexrpc-2.2/lexrpc/lexicons/site/standard/theme/color.json +0 -62
  259. {lexrpc-2.2 → lexrpc-3.0}/LICENSE +0 -0
  260. {lexrpc-2.2 → lexrpc-3.0}/MANIFEST.in +0 -0
  261. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/__init__.py +0 -0
  262. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/getPreferences.json +0 -0
  263. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/getProfile.json +0 -0
  264. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/getProfiles.json +0 -0
  265. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/getSuggestions.json +0 -0
  266. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/profile.json +0 -0
  267. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/putPreferences.json +0 -0
  268. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/searchActors.json +0 -0
  269. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/searchActorsTypeahead.json +0 -0
  270. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/actor/status.json +0 -0
  271. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/ageassurance/begin.json +0 -0
  272. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/ageassurance/getConfig.json +0 -0
  273. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/ageassurance/getState.json +0 -0
  274. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/authDeleteContent.json +0 -0
  275. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/authManageFeedDeclarations.json +0 -0
  276. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/authManageLabelerService.json +0 -0
  277. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/authManageModeration.json +0 -0
  278. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/authManageNotifications.json +0 -0
  279. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/authManageProfile.json +0 -0
  280. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/bookmark/createBookmark.json +0 -0
  281. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/bookmark/defs.json +0 -0
  282. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/bookmark/deleteBookmark.json +0 -0
  283. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/bookmark/getBookmarks.json +0 -0
  284. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/contact/defs.json +0 -0
  285. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/contact/dismissMatch.json +0 -0
  286. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/contact/getMatches.json +0 -0
  287. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/contact/getSyncStatus.json +0 -0
  288. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/contact/importContacts.json +0 -0
  289. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/contact/removeData.json +0 -0
  290. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/contact/sendNotification.json +0 -0
  291. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/contact/startPhoneVerification.json +0 -0
  292. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/contact/verifyPhone.json +0 -0
  293. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/draft/defs.json +0 -0
  294. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/draft/deleteDraft.json +0 -0
  295. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/draft/getDrafts.json +0 -0
  296. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/draft/updateDraft.json +0 -0
  297. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/embed/defs.json +0 -0
  298. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/embed/external.json +0 -0
  299. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/embed/gallery.json +0 -0
  300. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/embed/getEmbedExternalView.json +0 -0
  301. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/embed/images.json +0 -0
  302. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/embed/record.json +0 -0
  303. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/embed/recordWithMedia.json +0 -0
  304. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/describeFeedGenerator.json +0 -0
  305. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/generator.json +0 -0
  306. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getActorFeeds.json +0 -0
  307. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getActorLikes.json +0 -0
  308. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getAuthorFeed.json +0 -0
  309. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getFeed.json +0 -0
  310. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getFeedGenerator.json +0 -0
  311. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getFeedGenerators.json +0 -0
  312. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getFeedSkeleton.json +0 -0
  313. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getLikes.json +0 -0
  314. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getListFeed.json +0 -0
  315. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getPostThread.json +0 -0
  316. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getPosts.json +0 -0
  317. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getQuotes.json +0 -0
  318. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getRepostedBy.json +0 -0
  319. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getSuggestedFeeds.json +0 -0
  320. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/getTimeline.json +0 -0
  321. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/like.json +0 -0
  322. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/post.json +0 -0
  323. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/postgate.json +0 -0
  324. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/repost.json +0 -0
  325. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/searchPosts.json +0 -0
  326. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/sendInteractions.json +0 -0
  327. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/feed/threadgate.json +0 -0
  328. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/block.json +0 -0
  329. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/defs.json +0 -0
  330. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/follow.json +0 -0
  331. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getActorStarterPacks.json +0 -0
  332. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getBlocks.json +0 -0
  333. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getKnownFollowers.json +0 -0
  334. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getList.json +0 -0
  335. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getListBlocks.json +0 -0
  336. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getListMutes.json +0 -0
  337. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getLists.json +0 -0
  338. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getListsWithMembership.json +0 -0
  339. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getRelationships.json +0 -0
  340. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getStarterPack.json +0 -0
  341. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getStarterPacks.json +0 -0
  342. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getStarterPacksWithMembership.json +0 -0
  343. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/getSuggestedFollowsByActor.json +0 -0
  344. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/list.json +0 -0
  345. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/listblock.json +0 -0
  346. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/listitem.json +0 -0
  347. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/muteActorList.json +0 -0
  348. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/muteThread.json +0 -0
  349. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/searchStarterPacks.json +0 -0
  350. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/starterpack.json +0 -0
  351. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/unmuteActor.json +0 -0
  352. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/unmuteActorList.json +0 -0
  353. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/unmuteThread.json +0 -0
  354. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/graph/verification.json +0 -0
  355. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/labeler/defs.json +0 -0
  356. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/labeler/getServices.json +0 -0
  357. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/labeler/service.json +0 -0
  358. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/declaration.json +0 -0
  359. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/getPreferences.json +0 -0
  360. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/getUnreadCount.json +0 -0
  361. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/listActivitySubscriptions.json +0 -0
  362. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/putActivitySubscription.json +0 -0
  363. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/putPreferences.json +0 -0
  364. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/registerPush.json +0 -0
  365. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/unregisterPush.json +0 -0
  366. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/notification/updateSeen.json +0 -0
  367. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/richtext/facet.json +0 -0
  368. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getAgeAssuranceState.json +0 -0
  369. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getConfig.json +0 -0
  370. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.json +0 -0
  371. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getOnboardingSuggestedStarterPacksSkeleton.json +0 -0
  372. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getOnboardingSuggestedUsersSkeleton.json +0 -0
  373. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getPopularFeedGenerators.json +0 -0
  374. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getPostThreadOtherV2.json +0 -0
  375. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getPostThreadV2.json +0 -0
  376. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedFeeds.json +0 -0
  377. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedFeedsSkeleton.json +0 -0
  378. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedOnboardingUsers.json +0 -0
  379. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedStarterPacks.json +0 -0
  380. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedStarterPacksSkeleton.json +0 -0
  381. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedUsers.json +0 -0
  382. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscover.json +0 -0
  383. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscoverSkeleton.json +0 -0
  384. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedUsersForExplore.json +0 -0
  385. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedUsersForExploreSkeleton.json +0 -0
  386. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMore.json +0 -0
  387. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMoreSkeleton.json +0 -0
  388. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestedUsersSkeleton.json +0 -0
  389. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getSuggestionsSkeleton.json +0 -0
  390. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getTaggedSuggestions.json +0 -0
  391. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/getTrendingTopics.json +0 -0
  392. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/initAgeAssurance.json +0 -0
  393. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/searchActorsSkeleton.json +0 -0
  394. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/searchPostsSkeleton.json +0 -0
  395. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/unspecced/searchStarterPacksSkeleton.json +0 -0
  396. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/video/getJobStatus.json +0 -0
  397. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/video/getUploadLimits.json +0 -0
  398. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/app/bsky/video/uploadVideo.json +0 -0
  399. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/actor/deleteAccount.json +0 -0
  400. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/actor/exportAccountData.json +0 -0
  401. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/actor/getStatus.json +0 -0
  402. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/authFullChatClient.json +0 -0
  403. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/acceptConvo.json +0 -0
  404. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/addReaction.json +0 -0
  405. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/deleteMessageForSelf.json +0 -0
  406. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/getConvo.json +0 -0
  407. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/getConvoAvailability.json +0 -0
  408. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/getConvoForMembers.json +0 -0
  409. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/getConvoMembers.json +0 -0
  410. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/getLog.json +0 -0
  411. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/getMessages.json +0 -0
  412. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/leaveConvo.json +0 -0
  413. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/listConvos.json +0 -0
  414. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/muteConvo.json +0 -0
  415. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/removeReaction.json +0 -0
  416. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/unmuteConvo.json +0 -0
  417. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/updateAllRead.json +0 -0
  418. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/convo/updateRead.json +0 -0
  419. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/moderation/getActorMetadata.json +0 -0
  420. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/moderation/getMessageContext.json +0 -0
  421. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/chat/bsky/moderation/updateActorAccess.json +0 -0
  422. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/defs.json +0 -0
  423. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/deleteAccount.json +0 -0
  424. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/disableAccountInvites.json +0 -0
  425. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/disableInviteCodes.json +0 -0
  426. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/enableAccountInvites.json +0 -0
  427. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/getAccountInfo.json +0 -0
  428. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/getAccountInfos.json +0 -0
  429. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/getInviteCodes.json +0 -0
  430. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/getSubjectStatus.json +0 -0
  431. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/searchAccounts.json +0 -0
  432. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/sendEmail.json +0 -0
  433. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/updateAccountEmail.json +0 -0
  434. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/updateAccountHandle.json +0 -0
  435. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/updateAccountPassword.json +0 -0
  436. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/updateAccountSigningKey.json +0 -0
  437. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/admin/updateSubjectStatus.json +0 -0
  438. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/defs.json +0 -0
  439. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/getRecommendedDidCredentials.json +0 -0
  440. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/refreshIdentity.json +0 -0
  441. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/requestPlcOperationSignature.json +0 -0
  442. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/resolveDid.json +0 -0
  443. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/resolveHandle.json +0 -0
  444. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/resolveIdentity.json +0 -0
  445. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/signPlcOperation.json +0 -0
  446. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/submitPlcOperation.json +0 -0
  447. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/identity/updateHandle.json +0 -0
  448. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/label/defs.json +0 -0
  449. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/label/queryLabels.json +0 -0
  450. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/label/subscribeLabels.json +0 -0
  451. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/lexicon/resolveLexicon.json +0 -0
  452. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/lexicon/schema.json +0 -0
  453. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/moderation/createReport.json +0 -0
  454. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/moderation/defs.json +0 -0
  455. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/applyWrites.json +0 -0
  456. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/createRecord.json +0 -0
  457. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/defs.json +0 -0
  458. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/deleteRecord.json +0 -0
  459. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/describeRepo.json +0 -0
  460. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/getRecord.json +0 -0
  461. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/importRepo.json +0 -0
  462. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/listMissingBlobs.json +0 -0
  463. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/listRecords.json +0 -0
  464. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/putRecord.json +0 -0
  465. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/strongRef.json +0 -0
  466. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/repo/uploadBlob.json +0 -0
  467. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/activateAccount.json +0 -0
  468. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/checkAccountStatus.json +0 -0
  469. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/confirmEmail.json +0 -0
  470. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/createAccount.json +0 -0
  471. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/createAppPassword.json +0 -0
  472. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/createInviteCode.json +0 -0
  473. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/createInviteCodes.json +0 -0
  474. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/createSession.json +0 -0
  475. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/deactivateAccount.json +0 -0
  476. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/defs.json +0 -0
  477. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/deleteAccount.json +0 -0
  478. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/deleteSession.json +0 -0
  479. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/getAccountInviteCodes.json +0 -0
  480. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/getServiceAuth.json +0 -0
  481. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/getSession.json +0 -0
  482. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/listAppPasswords.json +0 -0
  483. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/refreshSession.json +0 -0
  484. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/requestAccountDelete.json +0 -0
  485. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/requestEmailConfirmation.json +0 -0
  486. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/requestEmailUpdate.json +0 -0
  487. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/requestPasswordReset.json +0 -0
  488. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/reserveSigningKey.json +0 -0
  489. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/resetPassword.json +0 -0
  490. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/revokeAppPassword.json +0 -0
  491. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/server/updateEmail.json +0 -0
  492. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/defs.json +0 -0
  493. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/getBlob.json +0 -0
  494. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/getBlocks.json +0 -0
  495. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/getCheckout.json +0 -0
  496. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/getHead.json +0 -0
  497. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/getHostStatus.json +0 -0
  498. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/getLatestCommit.json +0 -0
  499. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/getRecord.json +0 -0
  500. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/getRepo.json +0 -0
  501. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/getRepoStatus.json +0 -0
  502. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/listBlobs.json +0 -0
  503. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/listHosts.json +0 -0
  504. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/listRepos.json +0 -0
  505. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/listReposByCollection.json +0 -0
  506. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/notifyOfUpdate.json +0 -0
  507. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/requestCrawl.json +0 -0
  508. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/sync/subscribeRepos.json +0 -0
  509. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/temp/addReservedHandle.json +0 -0
  510. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/temp/checkHandleAvailability.json +0 -0
  511. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/temp/checkSignupQueue.json +0 -0
  512. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/temp/dereferenceScope.json +0 -0
  513. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/temp/fetchLabels.json +0 -0
  514. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/temp/requestPhoneVerification.json +0 -0
  515. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/atproto/temp/revokeAccountCredentials.json +0 -0
  516. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/com/germnetwork/declaration.json +0 -0
  517. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/bookmarks/authManageBookmarks.json +0 -0
  518. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/bookmarks/authViewBookmarks.json +0 -0
  519. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/bookmarks/bookmark.json +0 -0
  520. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/bookmarks/getActorBookmarks.json +0 -0
  521. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/calendar/event.json +0 -0
  522. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/calendar/rsvp.json +0 -0
  523. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/interaction/like.json +0 -0
  524. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/location/address.json +0 -0
  525. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/location/fsq.json +0 -0
  526. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/location/geo.json +0 -0
  527. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/location/hthree.json +0 -0
  528. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/payments/webMonetization.json +0 -0
  529. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/community/lexicon/preference/ai.json +0 -0
  530. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/communication/createTemplate.json +0 -0
  531. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/communication/defs.json +0 -0
  532. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/communication/deleteTemplate.json +0 -0
  533. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/communication/listTemplates.json +0 -0
  534. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/communication/updateTemplate.json +0 -0
  535. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/hosting/getAccountHistory.json +0 -0
  536. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/cancelScheduledActions.json +0 -0
  537. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/defs.json +0 -0
  538. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/emitEvent.json +0 -0
  539. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/getAccountTimeline.json +0 -0
  540. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/getEvent.json +0 -0
  541. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/getRecord.json +0 -0
  542. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/getRecords.json +0 -0
  543. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/getRepo.json +0 -0
  544. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/getReporterStats.json +0 -0
  545. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/getRepos.json +0 -0
  546. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/getSubjects.json +0 -0
  547. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/listScheduledActions.json +0 -0
  548. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/queryEvents.json +0 -0
  549. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/queryStatuses.json +0 -0
  550. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/scheduleAction.json +0 -0
  551. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/moderation/searchRepos.json +0 -0
  552. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/queue/assignModerator.json +0 -0
  553. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/queue/deleteQueue.json +0 -0
  554. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/queue/getAssignments.json +0 -0
  555. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/queue/routeReports.json +0 -0
  556. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/queue/unassignModerator.json +0 -0
  557. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/assignModerator.json +0 -0
  558. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/getAssignments.json +0 -0
  559. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/getHistoricalStats.json +0 -0
  560. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/getLatestReport.json +0 -0
  561. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/getLiveStats.json +0 -0
  562. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/getReport.json +0 -0
  563. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/listActivities.json +0 -0
  564. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/reassignQueue.json +0 -0
  565. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/refreshStats.json +0 -0
  566. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/report/unassignModerator.json +0 -0
  567. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/safelink/addRule.json +0 -0
  568. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/safelink/defs.json +0 -0
  569. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/safelink/queryEvents.json +0 -0
  570. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/safelink/queryRules.json +0 -0
  571. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/safelink/removeRule.json +0 -0
  572. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/safelink/updateRule.json +0 -0
  573. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/server/getConfig.json +0 -0
  574. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/set/addValues.json +0 -0
  575. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/set/defs.json +0 -0
  576. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/set/deleteSet.json +0 -0
  577. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/set/deleteValues.json +0 -0
  578. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/set/getValues.json +0 -0
  579. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/set/querySets.json +0 -0
  580. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/set/upsertSet.json +0 -0
  581. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/setting/defs.json +0 -0
  582. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/setting/listOptions.json +0 -0
  583. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/setting/removeOptions.json +0 -0
  584. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/setting/upsertOption.json +0 -0
  585. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/signature/defs.json +0 -0
  586. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/signature/findCorrelation.json +0 -0
  587. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/signature/findRelatedAccounts.json +0 -0
  588. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/signature/searchAccounts.json +0 -0
  589. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/team/addMember.json +0 -0
  590. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/team/defs.json +0 -0
  591. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/team/deleteMember.json +0 -0
  592. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/team/listMembers.json +0 -0
  593. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/team/updateMember.json +0 -0
  594. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/verification/defs.json +0 -0
  595. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/verification/grantVerifications.json +0 -0
  596. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/verification/listVerifications.json +0 -0
  597. {lexrpc-2.2 → lexrpc-3.0}/lexrpc/lexicons/tools/ozone/verification/revokeVerifications.json +0 -0
  598. {lexrpc-2.2 → lexrpc-3.0}/lexrpc.egg-info/dependency_links.txt +0 -0
  599. {lexrpc-2.2 → lexrpc-3.0}/lexrpc.egg-info/top_level.txt +0 -0
  600. {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: 2.2
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 [![Circle CI](https://circleci.com/gh/snarfed/lexrpc.svg?style=svg)](https://circleci.com/gh/snarfed/lexrpc) [![Coverage Status](https://coveralls.io/repos/github/snarfed/lexrpc/badge.svg?branch=main)](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': {'message': { 'type': 'string' }},
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': {'message': { 'type': 'string' }},
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
- ``name`` is the error, eg ``RepoNotFound`` in ``com.atproto.sync.getRepo``.
116
- ``message`` is the human-readable string error message.
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`` or ``maxLength`` in their lexicon
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
- base = self._get_def(nsid).get(type, {})
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 = self._get_def(schema_name)
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) and val != ref:
378
- fail(f'is not {ref}')
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
- for item in val:
423
- self._validate_schema(
424
- name=name, val=item, type_name=schema['items']['type'],
425
- lexicon=lexicon, schema=schema['items'])
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
- if props and not isinstance(val, dict):
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 not in val:
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 schema.get('type') == 'params':
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, number, str, or list values
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, number, str, and array values
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 = self._get_def(method_nsid)
613
- params_schema = lexicon.get('parameters', {}).get('properties', {})
695
+ if not (lexicon := self._get_def(method_nsid)):
696
+ fail(f'{method_nsid} not found')
614
697
 
615
- decoded = {}
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
- decoded[name] = True
703
+ return True
623
704
  elif val == 'false':
624
- decoded[name] = False
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 == 'number':
631
- decoded[name] = float(val)
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
- decoded[name] = val
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
- decoded.setdefault(name, []).append(val)
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['type']
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