diff --git a/lexicons/app/bsky/actor/defs.json b/lexicons/app/bsky/actor/defs.json index 7529792..8bbad85 100644 --- a/lexicons/app/bsky/actor/defs.json +++ b/lexicons/app/bsky/actor/defs.json @@ -149,7 +149,8 @@ "activitySubscription": { "type": "ref", "ref": "#profileAssociatedActivitySubscription" - } + }, + "germ": { "type": "ref", "ref": "#profileAssociatedGerm" } } }, "profileAssociatedChat": { @@ -162,6 +163,20 @@ } } }, + "profileAssociatedGerm": { + "type": "object", + "required": ["showButtonTo", "messageMeUrl"], + "properties": { + "messageMeUrl": { + "type": "string", + "format": "uri" + }, + "showButtonTo": { + "type": "string", + "knownValues": ["usersIFollow", "everyone"] + } + } + }, "profileAssociatedActivitySubscription": { "type": "object", "required": ["allowSubscriptions"], @@ -276,6 +291,7 @@ "#savedFeedsPref", "#savedFeedsPrefV2", "#personalDetailsPref", + "#declaredAgePref", "#feedViewPref", "#threadViewPref", "#interestsPref", @@ -284,7 +300,8 @@ "#bskyAppStatePref", "#labelersPref", "#postInteractionSettingsPref", - "#verificationPrefs" + "#verificationPrefs", + "#liveEventPreferences" ] } }, @@ -376,6 +393,24 @@ } } }, + "declaredAgePref": { + "type": "object", + "description": "Read-only preference containing value(s) inferred from the user's declared birthdate. Absence of this preference object in the response indicates that the user has not made a declaration.", + "properties": { + "isOverAge13": { + "type": "boolean", + "description": "Indicates if the user has declared that they are over 13 years of age." + }, + "isOverAge16": { + "type": "boolean", + "description": "Indicates if the user has declared that they are over 16 years of age." + }, + "isOverAge18": { + "type": "boolean", + "description": "Indicates if the user has declared that they are over 18 years of age." + } + } + }, "feedViewPref": { "type": "object", "required": ["feed"], @@ -587,6 +622,22 @@ } } }, + "liveEventPreferences": { + "type": "object", + "description": "Preferences for live events.", + "properties": { + "hiddenFeedIds": { + "description": "A list of feed IDs that the user has hidden from live events.", + "type": "array", + "items": { "type": "string" } + }, + "hideAllFeeds": { + "description": "Whether to hide all feeds from live events.", + "type": "boolean", + "default": false + } + } + }, "postInteractionSettingsPref": { "type": "object", "description": "Default post interaction settings for the account. These values should be applied as default values when creating new posts. These refs should mirror the threadgate and postgate records exactly.", @@ -621,6 +672,8 @@ "type": "object", "required": ["status", "record"], "properties": { + "uri": { "type": "string", "format": "at-uri" }, + "cid": { "type": "string", "format": "cid" }, "status": { "type": "string", "description": "The status for the account.", @@ -632,6 +685,10 @@ "description": "An optional embed associated with the status.", "refs": ["app.bsky.embed.external#view"] }, + "labels": { + "type": "array", + "items": { "type": "ref", "ref": "com.atproto.label.defs#label" } + }, "expiresAt": { "type": "string", "description": "The date when this status will expire. The application might choose to no longer return the status after expiration.", @@ -640,6 +697,10 @@ "isActive": { "type": "boolean", "description": "True if the status is not expired, false if it is expired. Only present if expiration was set." + }, + "isDisabled": { + "type": "boolean", + "description": "True if the user's go-live access has been disabled by a moderator, false otherwise." } } } diff --git a/lexicons/app/bsky/actor/getSuggestions.json b/lexicons/app/bsky/actor/getSuggestions.json index 31e5265..070200d 100644 --- a/lexicons/app/bsky/actor/getSuggestions.json +++ b/lexicons/app/bsky/actor/getSuggestions.json @@ -33,6 +33,10 @@ }, "recId": { "type": "integer", + "description": "DEPRECATED: use recIdStr instead." + }, + "recIdStr": { + "type": "string", "description": "Snowflake for this recommendation, use when submitting recommendation events." } } diff --git a/lexicons/app/bsky/ageassurance/defs.json b/lexicons/app/bsky/ageassurance/defs.json index 65f6150..308d0e3 100644 --- a/lexicons/app/bsky/ageassurance/defs.json +++ b/lexicons/app/bsky/ageassurance/defs.json @@ -62,7 +62,7 @@ "configRegion": { "type": "object", "description": "The Age Assurance configuration for a specific region.", - "required": ["countryCode", "rules"], + "required": ["countryCode", "minAccessAge", "rules"], "properties": { "countryCode": { "type": "string", @@ -72,6 +72,10 @@ "type": "string", "description": "The ISO 3166-2 region code this configuration applies to. If omitted, the configuration applies to the entire country." }, + "minAccessAge": { + "type": "integer", + "description": "The minimum age (as a whole integer) required to use Bluesky in this region." + }, "rules": { "type": "array", "description": "The ordered list of Age Assurance rules that apply to this region. Rules should be applied in order, and the first matching rule determines the access level granted. The rules array should always include a default rule as the last item.", diff --git a/lexicons/app/bsky/authCreatePosts.json b/lexicons/app/bsky/authCreatePosts.json new file mode 100644 index 0000000..bc1db86 --- /dev/null +++ b/lexicons/app/bsky/authCreatePosts.json @@ -0,0 +1,35 @@ +{ + "lexicon": 1, + "id": "app.bsky.authCreatePosts", + "defs": { + "main": { + "type": "permission-set", + "title": "Create Bluesky Posts", + "title:lang": {}, + "detail": "Can not update or delete posts.", + "detail:lang": {}, + "permissions": [ + { + "type": "permission", + "resource": "rpc", + "inheritAud": true, + "lxm": [ + "app.bsky.video.uploadVideo", + "app.bsky.video.getJobStatus", + "app.bsky.video.getUploadLimits" + ] + }, + { + "type": "permission", + "resource": "repo", + "action": ["create"], + "collection": [ + "app.bsky.feed.post", + "app.bsky.feed.postgate", + "app.bsky.feed.threadgate" + ] + } + ] + } + } +} diff --git a/lexicons/app/bsky/authDeleteContent.json b/lexicons/app/bsky/authDeleteContent.json new file mode 100644 index 0000000..7fd3178 --- /dev/null +++ b/lexicons/app/bsky/authDeleteContent.json @@ -0,0 +1,27 @@ +{ + "lexicon": 1, + "id": "app.bsky.authDeleteContent", + "defs": { + "main": { + "type": "permission-set", + "title": "Delete Bluesky Content", + "title:lang": {}, + "detail": "Clean up public account history: posts, reposts, and likes.", + "detail:lang": {}, + "permissions": [ + { + "type": "permission", + "resource": "repo", + "action": ["delete"], + "collection": [ + "app.bsky.feed.like", + "app.bsky.feed.post", + "app.bsky.feed.postgate", + "app.bsky.feed.repost", + "app.bsky.feed.threadgate" + ] + } + ] + } + } +} diff --git a/lexicons/app/bsky/authFullApp.json b/lexicons/app/bsky/authFullApp.json new file mode 100644 index 0000000..b6f92e0 --- /dev/null +++ b/lexicons/app/bsky/authFullApp.json @@ -0,0 +1,136 @@ +{ + "lexicon": 1, + "id": "app.bsky.authFullApp", + "defs": { + "main": { + "type": "permission-set", + "title": "Full Bluesky Social App Permissions", + "title:lang": {}, + "detail": "Manage all public content and interactions, private preferences and subscriptions, and other Bluesky-specific app features and data.", + "detail:lang": {}, + "permissions": [ + { + "type": "permission", + "resource": "rpc", + "inheritAud": true, + "lxm": [ + "app.bsky.actor.getPreferences", + "app.bsky.actor.getProfile", + "app.bsky.actor.getProfiles", + "app.bsky.actor.getSuggestions", + "app.bsky.actor.putPreferences", + "app.bsky.actor.searchActors", + "app.bsky.actor.searchActorsTypeahead", + "app.bsky.bookmark.createBookmark", + "app.bsky.bookmark.deleteBookmark", + "app.bsky.bookmark.getBookmarks", + "app.bsky.contact.dismissMatch", + "app.bsky.contact.getMatches", + "app.bsky.contact.getSyncStatus", + "app.bsky.contact.importContacts", + "app.bsky.contact.removeData", + "app.bsky.contact.startPhoneVerification", + "app.bsky.contact.verifyPhone", + "app.bsky.feed.describeFeedGenerator", + "app.bsky.feed.getActorFeeds", + "app.bsky.feed.getActorLikes", + "app.bsky.feed.getAuthorFeed", + "app.bsky.feed.getFeed", + "app.bsky.feed.getFeedGenerator", + "app.bsky.feed.getFeedGenerators", + "app.bsky.feed.getFeedSkeleton", + "app.bsky.feed.getLikes", + "app.bsky.feed.getListFeed", + "app.bsky.feed.getPostThread", + "app.bsky.feed.getPosts", + "app.bsky.feed.getQuotes", + "app.bsky.feed.getRepostedBy", + "app.bsky.feed.getSuggestedFeeds", + "app.bsky.feed.getTimeline", + "app.bsky.feed.searchPosts", + "app.bsky.feed.sendInteractions", + "app.bsky.graph.getActorStarterPacks", + "app.bsky.graph.getBlocks", + "app.bsky.graph.getFollowers", + "app.bsky.graph.getFollows", + "app.bsky.graph.getKnownFollowers", + "app.bsky.graph.getList", + "app.bsky.graph.getListBlocks", + "app.bsky.graph.getListMutes", + "app.bsky.graph.getLists", + "app.bsky.graph.getListsWithMembership", + "app.bsky.graph.getMutes", + "app.bsky.graph.getRelationships", + "app.bsky.graph.getStarterPack", + "app.bsky.graph.getStarterPacks", + "app.bsky.graph.getStarterPacksWithMembership", + "app.bsky.graph.getSuggestedFollowsByActor", + "app.bsky.graph.muteActor", + "app.bsky.graph.muteActorList", + "app.bsky.graph.muteThread", + "app.bsky.graph.searchStarterPacks", + "app.bsky.graph.unmuteActor", + "app.bsky.graph.unmuteActorList", + "app.bsky.graph.unmuteThread", + "app.bsky.labeler.getServices", + "app.bsky.notification.getPreferences", + "app.bsky.notification.getUnreadCount", + "app.bsky.notification.listActivitySubscriptions", + "app.bsky.notification.listNotifications", + "app.bsky.notification.putActivitySubscription", + "app.bsky.notification.putPreferences", + "app.bsky.notification.putPreferencesV2", + "app.bsky.notification.registerPush", + "app.bsky.notification.unregisterPush", + "app.bsky.notification.updateSeen", + "app.bsky.unspecced.getAgeAssuranceState", + "app.bsky.unspecced.getConfig", + "app.bsky.unspecced.getOnboardingSuggestedStarterPacks", + "app.bsky.unspecced.getPopularFeedGenerators", + "app.bsky.unspecced.getPostThreadOtherV2", + "app.bsky.unspecced.getPostThreadV2", + "app.bsky.unspecced.getSuggestedFeeds", + "app.bsky.unspecced.getSuggestedFeedsSkeleton", + "app.bsky.unspecced.getSuggestedStarterPacks", + "app.bsky.unspecced.getSuggestedStarterPacksSkeleton", + "app.bsky.unspecced.getSuggestedUsers", + "app.bsky.unspecced.getSuggestedUsersSkeleton", + "app.bsky.unspecced.getSuggestionsSkeleton", + "app.bsky.unspecced.getTaggedSuggestions", + "app.bsky.unspecced.getTrendingTopics", + "app.bsky.unspecced.getTrends", + "app.bsky.unspecced.getTrendsSkeleton", + "app.bsky.unspecced.initAgeAssurance", + "app.bsky.unspecced.searchActorsSkeleton", + "app.bsky.unspecced.searchPostsSkeleton", + "app.bsky.unspecced.searchStarterPacksSkeleton", + "app.bsky.video.getJobStatus", + "app.bsky.video.getUploadLimits", + "app.bsky.video.uploadVideo" + ] + }, + { + "type": "permission", + "resource": "repo", + "action": ["create", "update", "delete"], + "collection": [ + "app.bsky.actor.profile", + "app.bsky.actor.status", + "app.bsky.feed.like", + "app.bsky.feed.post", + "app.bsky.feed.postgate", + "app.bsky.feed.repost", + "app.bsky.feed.threadgate", + "app.bsky.graph.block", + "app.bsky.graph.follow", + "app.bsky.graph.list", + "app.bsky.graph.listblock", + "app.bsky.graph.listitem", + "app.bsky.graph.starterpack", + "app.bsky.notification.declaration" + ] + } + ] + } + } +} diff --git a/lexicons/app/bsky/authManageFeedDeclarations.json b/lexicons/app/bsky/authManageFeedDeclarations.json new file mode 100644 index 0000000..a94600a --- /dev/null +++ b/lexicons/app/bsky/authManageFeedDeclarations.json @@ -0,0 +1,21 @@ +{ + "lexicon": 1, + "id": "app.bsky.authManageFeedDeclarations", + "defs": { + "main": { + "type": "permission-set", + "title": "Manage Hosted Feeds", + "title:lang": {}, + "detail": "Configure feed generator declaration records.", + "detail:lang": {}, + "permissions": [ + { + "type": "permission", + "resource": "repo", + "action": ["create", "update", "delete"], + "collection": ["app.bsky.feed.generator"] + } + ] + } + } +} diff --git a/lexicons/app/bsky/authManageLabelerService.json b/lexicons/app/bsky/authManageLabelerService.json new file mode 100644 index 0000000..3ccc243 --- /dev/null +++ b/lexicons/app/bsky/authManageLabelerService.json @@ -0,0 +1,21 @@ +{ + "lexicon": 1, + "id": "app.bsky.authManageLabelerService", + "defs": { + "main": { + "type": "permission-set", + "title": "Manage Hosted Labeling Service", + "title:lang": {}, + "detail": "Configure labeler declaration records.", + "detail:lang": {}, + "permissions": [ + { + "type": "permission", + "resource": "repo", + "action": ["create", "update", "delete"], + "collection": ["app.bsky.labeler.service"] + } + ] + } + } +} diff --git a/lexicons/app/bsky/authManageModeration.json b/lexicons/app/bsky/authManageModeration.json new file mode 100644 index 0000000..8b8c252 --- /dev/null +++ b/lexicons/app/bsky/authManageModeration.json @@ -0,0 +1,36 @@ +{ + "lexicon": 1, + "id": "app.bsky.authManageModeration", + "defs": { + "main": { + "type": "permission-set", + "title": "Manage Personal Moderation", + "title:lang": {}, + "detail": "Control over blocks, mutes, mod lists, mod services, and preferences.", + "detail:lang": {}, + "permissions": [ + { + "type": "permission", + "resource": "rpc", + "inheritAud": true, + "lxm": [ + "app.bsky.actor.getPreferences", + "app.bsky.actor.putPreferences", + "app.bsky.graph.muteActor", + "app.bsky.graph.muteActorList", + "app.bsky.graph.muteThread", + "app.bsky.graph.unmuteActor", + "app.bsky.graph.unmuteActorList", + "app.bsky.graph.unmuteThread" + ] + }, + { + "type": "permission", + "resource": "repo", + "action": ["create", "update", "delete"], + "collection": ["app.bsky.graph.block", "app.bsky.graph.listblock"] + } + ] + } + } +} diff --git a/lexicons/app/bsky/authManageNotifications.json b/lexicons/app/bsky/authManageNotifications.json new file mode 100644 index 0000000..767353d --- /dev/null +++ b/lexicons/app/bsky/authManageNotifications.json @@ -0,0 +1,32 @@ +{ + "lexicon": 1, + "id": "app.bsky.authManageNotifications", + "defs": { + "main": { + "type": "permission-set", + "title": "Manage Bluesky Notifications", + "title:lang": {}, + "detail": "View and configure notifications for the Bluesky app.", + "detail:lang": {}, + "permissions": [ + { + "type": "permission", + "resource": "rpc", + "inheritAud": true, + "lxm": [ + "app.bsky.notification.getPreferences", + "app.bsky.notification.getUnreadCount", + "app.bsky.notification.listActivitySubscriptions", + "app.bsky.notification.listNotifications", + "app.bsky.notification.putActivitySubscription", + "app.bsky.notification.putPreferences", + "app.bsky.notification.putPreferencesV2", + "app.bsky.notification.registerPush", + "app.bsky.notification.unregisterPush", + "app.bsky.notification.updateSeen" + ] + } + ] + } + } +} diff --git a/lexicons/app/bsky/authManageProfile.json b/lexicons/app/bsky/authManageProfile.json new file mode 100644 index 0000000..ccf4aea --- /dev/null +++ b/lexicons/app/bsky/authManageProfile.json @@ -0,0 +1,25 @@ +{ + "lexicon": 1, + "id": "app.bsky.authManageProfile", + "defs": { + "main": { + "type": "permission-set", + "title": "Manage Bluesky Profile", + "title:lang": {}, + "detail": "Update profile data, as well as status and public chat visibility.", + "detail:lang": {}, + "permissions": [ + { + "type": "permission", + "resource": "repo", + "action": ["create", "update", "delete"], + "collection": [ + "app.bsky.actor.profile", + "app.bsky.actor.status", + "app.bsky.notification.declaration" + ] + } + ] + } + } +} diff --git a/lexicons/app/bsky/authViewAll.json b/lexicons/app/bsky/authViewAll.json new file mode 100644 index 0000000..dace940 --- /dev/null +++ b/lexicons/app/bsky/authViewAll.json @@ -0,0 +1,89 @@ +{ + "lexicon": 1, + "id": "app.bsky.authViewAll", + "defs": { + "main": { + "type": "permission-set", + "title": "Read-only access to all content", + "title:lang": {}, + "detail": "View Bluesky network content from account perspective, and read all notifications and preferences.", + "detail:lang": {}, + "permissions": [ + { + "type": "permission", + "resource": "rpc", + "inheritAud": true, + "lxm": [ + "app.bsky.actor.getPreferences", + "app.bsky.actor.getProfile", + "app.bsky.actor.getProfiles", + "app.bsky.actor.getSuggestions", + "app.bsky.actor.searchActors", + "app.bsky.actor.searchActorsTypeahead", + "app.bsky.bookmark.getBookmarks", + "app.bsky.feed.describeFeedGenerator", + "app.bsky.feed.getActorFeeds", + "app.bsky.feed.getActorLikes", + "app.bsky.feed.getAuthorFeed", + "app.bsky.feed.getFeed", + "app.bsky.feed.getFeedGenerator", + "app.bsky.feed.getFeedGenerators", + "app.bsky.feed.getFeedSkeleton", + "app.bsky.feed.getLikes", + "app.bsky.feed.getListFeed", + "app.bsky.feed.getPostThread", + "app.bsky.feed.getPosts", + "app.bsky.feed.getQuotes", + "app.bsky.feed.getRepostedBy", + "app.bsky.feed.getSuggestedFeeds", + "app.bsky.feed.getTimeline", + "app.bsky.feed.searchPosts", + "app.bsky.graph.getActorStarterPacks", + "app.bsky.graph.getBlocks", + "app.bsky.graph.getFollowers", + "app.bsky.graph.getFollows", + "app.bsky.graph.getKnownFollowers", + "app.bsky.graph.getListBlocks", + "app.bsky.graph.getListMutes", + "app.bsky.graph.getLists", + "app.bsky.graph.getListsWithMembership", + "app.bsky.graph.getMutes", + "app.bsky.graph.getRelationships", + "app.bsky.graph.getStarterPack", + "app.bsky.graph.getStarterPacks", + "app.bsky.graph.getStarterPacksWithMembership", + "app.bsky.graph.getSuggestedFollowsByActor", + "app.bsky.graph.searchStarterPacks", + "app.bsky.labeler.getServices", + "app.bsky.notification.getPreferences", + "app.bsky.notification.getUnreadCount", + "app.bsky.notification.listActivitySubscriptions", + "app.bsky.notification.listNotifications", + "app.bsky.notification.updateSeen", + "app.bsky.unspecced.getAgeAssuranceState", + "app.bsky.unspecced.getConfig", + "app.bsky.unspecced.getOnboardingSuggestedStarterPacks", + "app.bsky.unspecced.getPopularFeedGenerators", + "app.bsky.unspecced.getPostThreadOtherV2", + "app.bsky.unspecced.getPostThreadV2", + "app.bsky.unspecced.getSuggestedFeeds", + "app.bsky.unspecced.getSuggestedFeedsSkeleton", + "app.bsky.unspecced.getSuggestedStarterPacks", + "app.bsky.unspecced.getSuggestedStarterPacksSkeleton", + "app.bsky.unspecced.getSuggestedUsers", + "app.bsky.unspecced.getSuggestedUsersSkeleton", + "app.bsky.unspecced.getSuggestionsSkeleton", + "app.bsky.unspecced.getTaggedSuggestions", + "app.bsky.unspecced.getTrendingTopics", + "app.bsky.unspecced.getTrends", + "app.bsky.unspecced.getTrendsSkeleton", + "app.bsky.unspecced.searchActorsSkeleton", + "app.bsky.unspecced.searchPostsSkeleton", + "app.bsky.unspecced.searchStarterPacksSkeleton", + "app.bsky.video.getUploadLimits" + ] + } + ] + } + } +} diff --git a/lexicons/app/bsky/contact/defs.json b/lexicons/app/bsky/contact/defs.json new file mode 100644 index 0000000..5705814 --- /dev/null +++ b/lexicons/app/bsky/contact/defs.json @@ -0,0 +1,57 @@ +{ + "lexicon": 1, + "id": "app.bsky.contact.defs", + "defs": { + "matchAndContactIndex": { + "description": "Associates a profile with the positional index of the contact import input in the call to `app.bsky.contact.importContacts`, so clients can know which phone caused a particular match.", + "type": "object", + "required": ["match", "contactIndex"], + "properties": { + "match": { + "description": "Profile of the matched user.", + "type": "ref", + "ref": "app.bsky.actor.defs#profileView" + }, + "contactIndex": { + "description": "The index of this match in the import contact input.", + "type": "integer", + "minimum": 0, + "maximum": 999 + } + } + }, + "syncStatus": { + "type": "object", + "required": ["syncedAt", "matchesCount"], + "properties": { + "syncedAt": { + "description": "Last date when contacts where imported.", + "type": "string", + "format": "datetime" + }, + "matchesCount": { + "description": "Number of existing contact matches resulting of the user imports and of their imported contacts having imported the user. Matches stop being counted when the user either follows the matched contact or dismisses the match.", + "type": "integer", + "minimum": 0 + } + } + }, + "notification": { + "description": "A stash object to be sent via bsync representing a notification to be created.", + "type": "object", + "required": ["from", "to"], + "properties": { + "from": { + "description": "The DID of who this notification comes from.", + "type": "string", + "format": "did" + }, + "to": { + "description": "The DID of who this notification should go to.", + "type": "string", + "format": "did" + } + } + } + } +} diff --git a/lexicons/app/bsky/contact/dismissMatch.json b/lexicons/app/bsky/contact/dismissMatch.json new file mode 100644 index 0000000..66503ce --- /dev/null +++ b/lexicons/app/bsky/contact/dismissMatch.json @@ -0,0 +1,39 @@ +{ + "lexicon": 1, + "id": "app.bsky.contact.dismissMatch", + "defs": { + "main": { + "type": "procedure", + "description": "Removes a match that was found via contact import. It shouldn't appear again if the same contact is re-imported. Requires authentication.", + "input": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["subject"], + "properties": { + "subject": { + "description": "The subject's DID to dismiss the match with.", + "type": "string", + "format": "did" + } + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "properties": {} + } + }, + "errors": [ + { + "name": "InvalidDid" + }, + { + "name": "InternalError" + } + ] + } + } +} diff --git a/lexicons/app/bsky/contact/getMatches.json b/lexicons/app/bsky/contact/getMatches.json new file mode 100644 index 0000000..d864606 --- /dev/null +++ b/lexicons/app/bsky/contact/getMatches.json @@ -0,0 +1,53 @@ +{ + "lexicon": 1, + "id": "app.bsky.contact.getMatches", + "defs": { + "main": { + "type": "query", + "description": "Returns the matched contacts (contacts that were mutually imported). Excludes dismissed matches. Requires authentication.", + "parameters": { + "type": "params", + "properties": { + "limit": { + "type": "integer", + "minimum": 1, + "maximum": 100, + "default": 50 + }, + "cursor": { "type": "string" } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["matches"], + "properties": { + "cursor": { "type": "string" }, + "matches": { + "type": "array", + "items": { + "type": "ref", + "ref": "app.bsky.actor.defs#profileView" + } + } + } + } + }, + "errors": [ + { + "name": "InvalidDid" + }, + { + "name": "InvalidLimit" + }, + { + "name": "InvalidCursor" + }, + { + "name": "InternalError" + } + ] + } + } +} diff --git a/lexicons/app/bsky/contact/getSyncStatus.json b/lexicons/app/bsky/contact/getSyncStatus.json new file mode 100644 index 0000000..03fee00 --- /dev/null +++ b/lexicons/app/bsky/contact/getSyncStatus.json @@ -0,0 +1,35 @@ +{ + "lexicon": 1, + "id": "app.bsky.contact.getSyncStatus", + "defs": { + "main": { + "type": "query", + "description": "Gets the user's current contact import status. Requires authentication.", + "parameters": { + "type": "params", + "properties": {} + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "properties": { + "syncStatus": { + "description": "If present, indicates the user has imported their contacts. If not present, indicates the user never used the feature or called `app.bsky.contact.removeData` and didn't import again since.", + "type": "ref", + "ref": "app.bsky.contact.defs#syncStatus" + } + } + } + }, + "errors": [ + { + "name": "InvalidDid" + }, + { + "name": "InternalError" + } + ] + } + } +} diff --git a/lexicons/app/bsky/contact/importContacts.json b/lexicons/app/bsky/contact/importContacts.json new file mode 100644 index 0000000..ac7449b --- /dev/null +++ b/lexicons/app/bsky/contact/importContacts.json @@ -0,0 +1,66 @@ +{ + "lexicon": 1, + "id": "app.bsky.contact.importContacts", + "defs": { + "main": { + "type": "procedure", + "description": "Import contacts for securely matching with other users. This follows the protocol explained in https://docs.bsky.app/blog/contact-import-rfc. Requires authentication.", + "input": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["token", "contacts"], + "properties": { + "token": { + "description": "JWT to authenticate the call. Use the JWT received as a response to the call to `app.bsky.contact.verifyPhone`.", + "type": "string" + }, + "contacts": { + "description": "List of phone numbers in global E.164 format (e.g., '+12125550123'). Phone numbers that cannot be normalized into a valid phone number will be discarded. Should not repeat the 'phone' input used in `app.bsky.contact.verifyPhone`.", + "type": "array", + "items": { + "type": "string" + }, + "minLength": 1, + "maxLength": 1000 + } + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["matchesAndContactIndexes"], + "properties": { + "matchesAndContactIndexes": { + "description": "The users that matched during import and their indexes on the input contacts, so the client can correlate with its local list.", + "type": "array", + "items": { + "type": "ref", + "ref": "app.bsky.contact.defs#matchAndContactIndex" + } + } + } + } + }, + "errors": [ + { + "name": "InvalidDid" + }, + { + "name": "InvalidContacts" + }, + { + "name": "TooManyContacts" + }, + { + "name": "InvalidToken" + }, + { + "name": "InternalError" + } + ] + } + } +} diff --git a/lexicons/app/bsky/contact/removeData.json b/lexicons/app/bsky/contact/removeData.json new file mode 100644 index 0000000..56dd911 --- /dev/null +++ b/lexicons/app/bsky/contact/removeData.json @@ -0,0 +1,32 @@ +{ + "lexicon": 1, + "id": "app.bsky.contact.removeData", + "defs": { + "main": { + "type": "procedure", + "description": "Removes all stored hashes used for contact matching, existing matches, and sync status. Requires authentication.", + "input": { + "encoding": "application/json", + "schema": { + "type": "object", + "properties": {} + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "properties": {} + } + }, + "errors": [ + { + "name": "InvalidDid" + }, + { + "name": "InternalError" + } + ] + } + } +} diff --git a/lexicons/app/bsky/contact/sendNotification.json b/lexicons/app/bsky/contact/sendNotification.json new file mode 100644 index 0000000..74af1a0 --- /dev/null +++ b/lexicons/app/bsky/contact/sendNotification.json @@ -0,0 +1,36 @@ +{ + "lexicon": 1, + "id": "app.bsky.contact.sendNotification", + "defs": { + "main": { + "type": "procedure", + "description": "System endpoint to send notifications related to contact imports. Requires role authentication.", + "input": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["from", "to"], + "properties": { + "from": { + "description": "The DID of who this notification comes from.", + "type": "string", + "format": "did" + }, + "to": { + "description": "The DID of who this notification should go to.", + "type": "string", + "format": "did" + } + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "properties": {} + } + } + } + } +} diff --git a/lexicons/app/bsky/contact/startPhoneVerification.json b/lexicons/app/bsky/contact/startPhoneVerification.json new file mode 100644 index 0000000..b11024c --- /dev/null +++ b/lexicons/app/bsky/contact/startPhoneVerification.json @@ -0,0 +1,44 @@ +{ + "lexicon": 1, + "id": "app.bsky.contact.startPhoneVerification", + "defs": { + "main": { + "type": "procedure", + "description": "Starts a phone verification flow. The phone passed will receive a code via SMS that should be passed to `app.bsky.contact.verifyPhone`. Requires authentication.", + "input": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["phone"], + "properties": { + "phone": { + "description": "The phone number to receive the code via SMS.", + "type": "string" + } + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "properties": {} + } + }, + "errors": [ + { + "name": "RateLimitExceeded" + }, + { + "name": "InvalidDid" + }, + { + "name": "InvalidPhone" + }, + { + "name": "InternalError" + } + ] + } + } +} diff --git a/lexicons/app/bsky/contact/verifyPhone.json b/lexicons/app/bsky/contact/verifyPhone.json new file mode 100644 index 0000000..fed072e --- /dev/null +++ b/lexicons/app/bsky/contact/verifyPhone.json @@ -0,0 +1,57 @@ +{ + "lexicon": 1, + "id": "app.bsky.contact.verifyPhone", + "defs": { + "main": { + "type": "procedure", + "description": "Verifies control over a phone number with a code received via SMS and starts a contact import session. Requires authentication.", + "input": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["phone", "code"], + "properties": { + "phone": { + "description": "The phone number to verify. Should be the same as the one passed to `app.bsky.contact.startPhoneVerification`.", + "type": "string" + }, + "code": { + "description": "The code received via SMS as a result of the call to `app.bsky.contact.startPhoneVerification`.", + "type": "string" + } + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["token"], + "properties": { + "token": { + "description": "JWT to be used in a call to `app.bsky.contact.importContacts`. It is only valid for a single call.", + "type": "string" + } + } + } + }, + "errors": [ + { + "name": "RateLimitExceeded" + }, + { + "name": "InvalidDid" + }, + { + "name": "InvalidPhone" + }, + { + "name": "InvalidCode" + }, + { + "name": "InternalError" + } + ] + } + } +} diff --git a/lexicons/app/bsky/draft/createDraft.json b/lexicons/app/bsky/draft/createDraft.json new file mode 100644 index 0000000..d18239d --- /dev/null +++ b/lexicons/app/bsky/draft/createDraft.json @@ -0,0 +1,42 @@ +{ + "lexicon": 1, + "id": "app.bsky.draft.createDraft", + "defs": { + "main": { + "type": "procedure", + "description": "Inserts a draft using private storage (stash). An upper limit of drafts might be enforced. Requires authentication.", + "input": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["draft"], + "properties": { + "draft": { + "type": "ref", + "ref": "app.bsky.draft.defs#draft" + } + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["id"], + "properties": { + "id": { + "type": "string", + "description": "The ID of the created draft." + } + } + } + }, + "errors": [ + { + "name": "DraftLimitReached", + "description": "Trying to insert a new draft when the limit was already reached." + } + ] + } + } +} diff --git a/lexicons/app/bsky/draft/defs.json b/lexicons/app/bsky/draft/defs.json new file mode 100644 index 0000000..9062cd4 --- /dev/null +++ b/lexicons/app/bsky/draft/defs.json @@ -0,0 +1,221 @@ +{ + "lexicon": 1, + "id": "app.bsky.draft.defs", + "defs": { + "draftWithId": { + "description": "A draft with an identifier, used to store drafts in private storage (stash).", + "type": "object", + "required": ["id", "draft"], + "properties": { + "id": { + "description": "A TID to be used as a draft identifier.", + "type": "string", + "format": "tid" + }, + "draft": { + "type": "ref", + "ref": "#draft" + } + } + }, + "draft": { + "description": "A draft containing an array of draft posts.", + "type": "object", + "required": ["posts"], + "properties": { + "deviceId": { + "type": "string", + "description": "UUIDv4 identifier of the device that created this draft.", + "maxLength": 100 + }, + "deviceName": { + "type": "string", + "description": "The device and/or platform on which the draft was created.", + "maxLength": 100 + }, + "posts": { + "description": "Array of draft posts that compose this draft.", + "type": "array", + "minLength": 1, + "maxLength": 100, + "items": { + "type": "ref", + "ref": "#draftPost" + } + }, + "langs": { + "type": "array", + "description": "Indicates human language of posts primary text content.", + "maxLength": 3, + "items": { "type": "string", "format": "language" } + }, + "postgateEmbeddingRules": { + "description": "Embedding rules for the postgates to be created when this draft is published.", + "type": "array", + "maxLength": 5, + "items": { + "type": "union", + "refs": ["app.bsky.feed.postgate#disableRule"] + } + }, + "threadgateAllow": { + "description": "Allow-rules for the threadgate to be created when this draft is published.", + "type": "array", + "maxLength": 5, + "items": { + "type": "union", + "refs": [ + "app.bsky.feed.threadgate#mentionRule", + "app.bsky.feed.threadgate#followerRule", + "app.bsky.feed.threadgate#followingRule", + "app.bsky.feed.threadgate#listRule" + ] + } + } + } + }, + "draftPost": { + "description": "One of the posts that compose a draft.", + "type": "object", + "required": ["text"], + "properties": { + "text": { + "type": "string", + "maxLength": 10000, + "maxGraphemes": 1000, + "description": "The primary post content. It has a higher limit than post contents to allow storing a larger text that can later be refined into smaller posts." + }, + "labels": { + "type": "union", + "description": "Self-label values for this post. Effectively content warnings.", + "refs": ["com.atproto.label.defs#selfLabels"] + }, + "embedImages": { + "type": "array", + "items": { "type": "ref", "ref": "#draftEmbedImage" }, + "maxLength": 4 + }, + "embedVideos": { + "type": "array", + "items": { "type": "ref", "ref": "#draftEmbedVideo" }, + "maxLength": 1 + }, + "embedExternals": { + "type": "array", + "items": { "type": "ref", "ref": "#draftEmbedExternal" }, + "maxLength": 1 + }, + "embedRecords": { + "type": "array", + "items": { "type": "ref", "ref": "#draftEmbedRecord" }, + "maxLength": 1 + } + } + }, + + "draftView": { + "description": "View to present drafts data to users.", + "type": "object", + "required": ["id", "draft", "createdAt", "updatedAt"], + "properties": { + "id": { + "description": "A TID to be used as a draft identifier.", + "type": "string", + "format": "tid" + }, + "draft": { + "type": "ref", + "ref": "#draft" + }, + "createdAt": { + "description": "The time the draft was created.", + "type": "string", + "format": "datetime" + }, + "updatedAt": { + "description": "The time the draft was last updated.", + "type": "string", + "format": "datetime" + } + } + }, + + "draftEmbedLocalRef": { + "type": "object", + "required": ["path"], + "properties": { + "path": { + "type": "string", + "description": "Local, on-device ref to file to be embedded. Embeds are currently device-bound for drafts.", + "minLength": 1, + "maxLength": 1024 + } + } + }, + "draftEmbedCaption": { + "type": "object", + "required": ["lang", "content"], + "properties": { + "lang": { + "type": "string", + "format": "language" + }, + "content": { + "type": "string", + "maxLength": 10000 + } + } + }, + + "draftEmbedImage": { + "type": "object", + "required": ["localRef"], + "properties": { + "localRef": { + "type": "ref", + "ref": "#draftEmbedLocalRef" + }, + "alt": { + "type": "string", + "maxGraphemes": 2000 + } + } + }, + "draftEmbedVideo": { + "type": "object", + "required": ["localRef"], + "properties": { + "localRef": { + "type": "ref", + "ref": "#draftEmbedLocalRef" + }, + "alt": { + "type": "string", + "maxGraphemes": 2000 + }, + "captions": { + "type": "array", + "items": { + "type": "ref", + "ref": "#draftEmbedCaption" + }, + "maxLength": 20 + } + } + }, + "draftEmbedExternal": { + "type": "object", + "required": ["uri"], + "properties": { + "uri": { "type": "string", "format": "uri" } + } + }, + "draftEmbedRecord": { + "type": "object", + "required": ["record"], + "properties": { + "record": { "type": "ref", "ref": "com.atproto.repo.strongRef" } + } + } + } +} diff --git a/lexicons/app/bsky/draft/deleteDraft.json b/lexicons/app/bsky/draft/deleteDraft.json new file mode 100644 index 0000000..0445a0f --- /dev/null +++ b/lexicons/app/bsky/draft/deleteDraft.json @@ -0,0 +1,23 @@ +{ + "lexicon": 1, + "id": "app.bsky.draft.deleteDraft", + "defs": { + "main": { + "type": "procedure", + "description": "Deletes a draft by ID. Requires authentication.", + "input": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["id"], + "properties": { + "id": { + "type": "string", + "format": "tid" + } + } + } + } + } + } +} diff --git a/lexicons/app/bsky/draft/getDrafts.json b/lexicons/app/bsky/draft/getDrafts.json new file mode 100644 index 0000000..3e60740 --- /dev/null +++ b/lexicons/app/bsky/draft/getDrafts.json @@ -0,0 +1,39 @@ +{ + "lexicon": 1, + "id": "app.bsky.draft.getDrafts", + "defs": { + "main": { + "type": "query", + "description": "Gets views of user drafts. Requires authentication.", + "parameters": { + "type": "params", + "properties": { + "limit": { + "type": "integer", + "minimum": 1, + "maximum": 100, + "default": 50 + }, + "cursor": { "type": "string" } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["drafts"], + "properties": { + "cursor": { "type": "string" }, + "drafts": { + "type": "array", + "items": { + "type": "ref", + "ref": "app.bsky.draft.defs#draftView" + } + } + } + } + } + } + } +} diff --git a/lexicons/app/bsky/draft/updateDraft.json b/lexicons/app/bsky/draft/updateDraft.json new file mode 100644 index 0000000..6b1b6fc --- /dev/null +++ b/lexicons/app/bsky/draft/updateDraft.json @@ -0,0 +1,23 @@ +{ + "lexicon": 1, + "id": "app.bsky.draft.updateDraft", + "defs": { + "main": { + "type": "procedure", + "description": "Updates a draft using private storage (stash). If the draft ID points to a non-existing ID, the update will be silently ignored. This is done because updates don't enforce draft limit, so it accepts all writes, but will ignore invalid ones. Requires authentication.", + "input": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["draft"], + "properties": { + "draft": { + "type": "ref", + "ref": "app.bsky.draft.defs#draftWithId" + } + } + } + } + } + } +} diff --git a/lexicons/app/bsky/embed/images.json b/lexicons/app/bsky/embed/images.json index c6b6fa2..e8599ae 100644 --- a/lexicons/app/bsky/embed/images.json +++ b/lexicons/app/bsky/embed/images.json @@ -20,8 +20,9 @@ "properties": { "image": { "type": "blob", + "description": "The raw image file. May be up to 2 MB, formerly limited to 1 MB.", "accept": ["image/*"], - "maxSize": 1000000 + "maxSize": 2000000 }, "alt": { "type": "string", diff --git a/lexicons/app/bsky/embed/video.json b/lexicons/app/bsky/embed/video.json index 92511af..9ff650a 100644 --- a/lexicons/app/bsky/embed/video.json +++ b/lexicons/app/bsky/embed/video.json @@ -27,6 +27,11 @@ "aspectRatio": { "type": "ref", "ref": "app.bsky.embed.defs#aspectRatio" + }, + "presentation": { + "type": "string", + "description": "A hint to the client about how to present the video.", + "knownValues": ["default", "gif"] } } }, @@ -60,6 +65,11 @@ "aspectRatio": { "type": "ref", "ref": "app.bsky.embed.defs#aspectRatio" + }, + "presentation": { + "type": "string", + "description": "A hint to the client about how to present the video.", + "knownValues": ["default", "gif"] } } } diff --git a/lexicons/app/bsky/feed/sendInteractions.json b/lexicons/app/bsky/feed/sendInteractions.json index c50fbbc..5490e3c 100644 --- a/lexicons/app/bsky/feed/sendInteractions.json +++ b/lexicons/app/bsky/feed/sendInteractions.json @@ -11,6 +11,7 @@ "type": "object", "required": ["interactions"], "properties": { + "feed": { "type": "string", "format": "at-uri" }, "interactions": { "type": "array", "items": { diff --git a/lexicons/app/bsky/graph/defs.json b/lexicons/app/bsky/graph/defs.json index 68dc8aa..5e75331 100644 --- a/lexicons/app/bsky/graph/defs.json +++ b/lexicons/app/bsky/graph/defs.json @@ -159,6 +159,26 @@ "type": "string", "format": "at-uri", "description": "if the actor is followed by this DID, contains the AT-URI of the follow record" + }, + "blocking": { + "type": "string", + "format": "at-uri", + "description": "if the actor blocks this DID, this is the AT-URI of the block record" + }, + "blockedBy": { + "type": "string", + "format": "at-uri", + "description": "if the actor is blocked by this DID, contains the AT-URI of the block record" + }, + "blockingByList": { + "type": "string", + "format": "at-uri", + "description": "if the actor blocks this DID via a block list, this is the AT-URI of the listblock record" + }, + "blockedByList": { + "type": "string", + "format": "at-uri", + "description": "if the actor is blocked by this DID via a block list, contains the AT-URI of the listblock record" } } } diff --git a/lexicons/app/bsky/graph/getSuggestedFollowsByActor.json b/lexicons/app/bsky/graph/getSuggestedFollowsByActor.json index 454de15..e4df854 100644 --- a/lexicons/app/bsky/graph/getSuggestedFollowsByActor.json +++ b/lexicons/app/bsky/graph/getSuggestedFollowsByActor.json @@ -25,14 +25,18 @@ "ref": "app.bsky.actor.defs#profileView" } }, + "recIdStr": { + "type": "string", + "description": "Snowflake for this recommendation, use when submitting recommendation events." + }, "isFallback": { "type": "boolean", - "description": "If true, response has fallen-back to generic results, and is not scoped using relativeToDid", + "description": "DEPRECATED, unused. Previously: if true, response has fallen-back to generic results, and is not scoped using relativeToDid", "default": false }, "recId": { "type": "integer", - "description": "Snowflake for this recommendation, use when submitting recommendation events." + "description": "DEPRECATED: use recIdStr instead." } } } diff --git a/lexicons/app/bsky/notification/listNotifications.json b/lexicons/app/bsky/notification/listNotifications.json index fdac69c..2227e7e 100644 --- a/lexicons/app/bsky/notification/listNotifications.json +++ b/lexicons/app/bsky/notification/listNotifications.json @@ -74,7 +74,8 @@ "unverified", "like-via-repost", "repost-via-repost", - "subscribed-post" + "subscribed-post", + "contact-match" ] }, "reasonSubject": { "type": "string", "format": "at-uri" }, diff --git a/lexicons/app/bsky/unspecced/getOnboardingSuggestedUsersSkeleton.json b/lexicons/app/bsky/unspecced/getOnboardingSuggestedUsersSkeleton.json new file mode 100644 index 0000000..1303ac1 --- /dev/null +++ b/lexicons/app/bsky/unspecced/getOnboardingSuggestedUsersSkeleton.json @@ -0,0 +1,54 @@ +{ + "lexicon": 1, + "id": "app.bsky.unspecced.getOnboardingSuggestedUsersSkeleton", + "defs": { + "main": { + "type": "query", + "description": "Get a skeleton of suggested users for onboarding. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedOnboardingUsers", + "parameters": { + "type": "params", + "properties": { + "viewer": { + "type": "string", + "format": "did", + "description": "DID of the account making the request (not included for public/unauthenticated queries)." + }, + "category": { + "type": "string", + "description": "Category of users to get suggestions for." + }, + "limit": { + "type": "integer", + "minimum": 1, + "maximum": 50, + "default": 25 + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["dids"], + "properties": { + "dids": { + "type": "array", + "items": { + "type": "string", + "format": "did" + } + }, + "recId": { + "type": "string", + "description": "DEPRECATED: use recIdStr instead." + }, + "recIdStr": { + "type": "string", + "description": "Snowflake for this recommendation, use when submitting recommendation events." + } + } + } + } + } + } +} diff --git a/lexicons/app/bsky/unspecced/getSuggestedOnboardingUsers.json b/lexicons/app/bsky/unspecced/getSuggestedOnboardingUsers.json new file mode 100644 index 0000000..24e4556 --- /dev/null +++ b/lexicons/app/bsky/unspecced/getSuggestedOnboardingUsers.json @@ -0,0 +1,49 @@ +{ + "lexicon": 1, + "id": "app.bsky.unspecced.getSuggestedOnboardingUsers", + "defs": { + "main": { + "type": "query", + "description": "Get a list of suggested users for onboarding", + "parameters": { + "type": "params", + "properties": { + "category": { + "type": "string", + "description": "Category of users to get suggestions for." + }, + "limit": { + "type": "integer", + "minimum": 1, + "maximum": 50, + "default": 25 + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["actors"], + "properties": { + "actors": { + "type": "array", + "items": { + "type": "ref", + "ref": "app.bsky.actor.defs#profileView" + } + }, + "recId": { + "type": "string", + "description": "DEPRECATED: use recIdStr instead." + }, + "recIdStr": { + "type": "string", + "description": "Snowflake for this recommendation, use when submitting recommendation events." + } + } + } + } + } + } +} diff --git a/lexicons/app/bsky/unspecced/getSuggestedUsers.json b/lexicons/app/bsky/unspecced/getSuggestedUsers.json index 7a68538..705e21c 100644 --- a/lexicons/app/bsky/unspecced/getSuggestedUsers.json +++ b/lexicons/app/bsky/unspecced/getSuggestedUsers.json @@ -32,6 +32,14 @@ "type": "ref", "ref": "app.bsky.actor.defs#profileView" } + }, + "recId": { + "type": "string", + "description": "DEPRECATED: use recIdStr instead." + }, + "recIdStr": { + "type": "string", + "description": "Snowflake for this recommendation, use when submitting recommendation events." } } } diff --git a/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscover.json b/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscover.json new file mode 100644 index 0000000..7d0f289 --- /dev/null +++ b/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscover.json @@ -0,0 +1,41 @@ +{ + "lexicon": 1, + "id": "app.bsky.unspecced.getSuggestedUsersForDiscover", + "defs": { + "main": { + "type": "query", + "description": "Get a list of suggested users for the Discover page", + "parameters": { + "type": "params", + "properties": { + "limit": { + "type": "integer", + "minimum": 1, + "maximum": 50, + "default": 25 + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["actors"], + "properties": { + "actors": { + "type": "array", + "items": { + "type": "ref", + "ref": "app.bsky.actor.defs#profileView" + } + }, + "recIdStr": { + "type": "string", + "description": "Snowflake for this recommendation, use when submitting recommendation events." + } + } + } + } + } + } +} diff --git a/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscoverSkeleton.json b/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscoverSkeleton.json new file mode 100644 index 0000000..7f017ca --- /dev/null +++ b/lexicons/app/bsky/unspecced/getSuggestedUsersForDiscoverSkeleton.json @@ -0,0 +1,46 @@ +{ + "lexicon": 1, + "id": "app.bsky.unspecced.getSuggestedUsersForDiscoverSkeleton", + "defs": { + "main": { + "type": "query", + "description": "Get a skeleton of suggested users for the Discover page. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedUsersForDiscover", + "parameters": { + "type": "params", + "properties": { + "viewer": { + "type": "string", + "format": "did", + "description": "DID of the account making the request (not included for public/unauthenticated queries)." + }, + "limit": { + "type": "integer", + "minimum": 1, + "maximum": 50, + "default": 25 + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["dids"], + "properties": { + "dids": { + "type": "array", + "items": { + "type": "string", + "format": "did" + } + }, + "recIdStr": { + "type": "string", + "description": "Snowflake for this recommendation, use when submitting recommendation events." + } + } + } + } + } + } +} diff --git a/lexicons/app/bsky/unspecced/getSuggestedUsersForExplore.json b/lexicons/app/bsky/unspecced/getSuggestedUsersForExplore.json new file mode 100644 index 0000000..a37a21a --- /dev/null +++ b/lexicons/app/bsky/unspecced/getSuggestedUsersForExplore.json @@ -0,0 +1,45 @@ +{ + "lexicon": 1, + "id": "app.bsky.unspecced.getSuggestedUsersForExplore", + "defs": { + "main": { + "type": "query", + "description": "Get a list of suggested users for the Explore page", + "parameters": { + "type": "params", + "properties": { + "category": { + "type": "string", + "description": "Category of users to get suggestions for." + }, + "limit": { + "type": "integer", + "minimum": 1, + "maximum": 50, + "default": 25 + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["actors"], + "properties": { + "actors": { + "type": "array", + "items": { + "type": "ref", + "ref": "app.bsky.actor.defs#profileView" + } + }, + "recIdStr": { + "type": "string", + "description": "Snowflake for this recommendation, use when submitting recommendation events." + } + } + } + } + } + } +} diff --git a/lexicons/app/bsky/unspecced/getSuggestedUsersForExploreSkeleton.json b/lexicons/app/bsky/unspecced/getSuggestedUsersForExploreSkeleton.json new file mode 100644 index 0000000..b3f3186 --- /dev/null +++ b/lexicons/app/bsky/unspecced/getSuggestedUsersForExploreSkeleton.json @@ -0,0 +1,50 @@ +{ + "lexicon": 1, + "id": "app.bsky.unspecced.getSuggestedUsersForExploreSkeleton", + "defs": { + "main": { + "type": "query", + "description": "Get a skeleton of suggested users for the Explore page. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedUsersForExplore", + "parameters": { + "type": "params", + "properties": { + "viewer": { + "type": "string", + "format": "did", + "description": "DID of the account making the request (not included for public/unauthenticated queries)." + }, + "category": { + "type": "string", + "description": "Category of users to get suggestions for." + }, + "limit": { + "type": "integer", + "minimum": 1, + "maximum": 50, + "default": 25 + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["dids"], + "properties": { + "dids": { + "type": "array", + "items": { + "type": "string", + "format": "did" + } + }, + "recIdStr": { + "type": "string", + "description": "Snowflake for this recommendation, use when submitting recommendation events." + } + } + } + } + } + } +} diff --git a/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMore.json b/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMore.json new file mode 100644 index 0000000..1938df7 --- /dev/null +++ b/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMore.json @@ -0,0 +1,45 @@ +{ + "lexicon": 1, + "id": "app.bsky.unspecced.getSuggestedUsersForSeeMore", + "defs": { + "main": { + "type": "query", + "description": "Get a list of suggested users for the See More page", + "parameters": { + "type": "params", + "properties": { + "category": { + "type": "string", + "description": "Category of users to get suggestions for." + }, + "limit": { + "type": "integer", + "minimum": 1, + "maximum": 50, + "default": 25 + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["actors"], + "properties": { + "actors": { + "type": "array", + "items": { + "type": "ref", + "ref": "app.bsky.actor.defs#profileView" + } + }, + "recIdStr": { + "type": "string", + "description": "Snowflake for this recommendation, use when submitting recommendation events." + } + } + } + } + } + } +} diff --git a/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMoreSkeleton.json b/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMoreSkeleton.json new file mode 100644 index 0000000..954b518 --- /dev/null +++ b/lexicons/app/bsky/unspecced/getSuggestedUsersForSeeMoreSkeleton.json @@ -0,0 +1,50 @@ +{ + "lexicon": 1, + "id": "app.bsky.unspecced.getSuggestedUsersForSeeMoreSkeleton", + "defs": { + "main": { + "type": "query", + "description": "Get a skeleton of suggested users for the See More page. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedUsersForSeeMore", + "parameters": { + "type": "params", + "properties": { + "viewer": { + "type": "string", + "format": "did", + "description": "DID of the account making the request (not included for public/unauthenticated queries)." + }, + "category": { + "type": "string", + "description": "Category of users to get suggestions for." + }, + "limit": { + "type": "integer", + "minimum": 1, + "maximum": 50, + "default": 25 + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["dids"], + "properties": { + "dids": { + "type": "array", + "items": { + "type": "string", + "format": "did" + } + }, + "recIdStr": { + "type": "string", + "description": "Snowflake for this recommendation, use when submitting recommendation events." + } + } + } + } + } + } +} diff --git a/lexicons/app/bsky/unspecced/getSuggestedUsersSkeleton.json b/lexicons/app/bsky/unspecced/getSuggestedUsersSkeleton.json index d442562..3fed8dd 100644 --- a/lexicons/app/bsky/unspecced/getSuggestedUsersSkeleton.json +++ b/lexicons/app/bsky/unspecced/getSuggestedUsersSkeleton.json @@ -37,6 +37,14 @@ "type": "string", "format": "did" } + }, + "recId": { + "type": "string", + "description": "DEPRECATED: use recIdStr instead." + }, + "recIdStr": { + "type": "string", + "description": "Snowflake for this recommendation, use when submitting recommendation events." } } } diff --git a/lexicons/app/bsky/unspecced/getSuggestionsSkeleton.json b/lexicons/app/bsky/unspecced/getSuggestionsSkeleton.json index 658f2a1..f97504c 100644 --- a/lexicons/app/bsky/unspecced/getSuggestionsSkeleton.json +++ b/lexicons/app/bsky/unspecced/getSuggestionsSkeleton.json @@ -48,6 +48,10 @@ }, "recId": { "type": "integer", + "description": "DEPRECATED: use recIdStr instead." + }, + "recIdStr": { + "type": "string", "description": "Snowflake for this recommendation, use when submitting recommendation events." } } diff --git a/lexicons/chat/bsky/authFullChatClient.json b/lexicons/chat/bsky/authFullChatClient.json new file mode 100644 index 0000000..4de94a9 --- /dev/null +++ b/lexicons/chat/bsky/authFullChatClient.json @@ -0,0 +1,49 @@ +{ + "lexicon": 1, + "id": "chat.bsky.authFullChatClient", + "defs": { + "main": { + "type": "permission-set", + "title": "Full Chat Client (All Conversations)", + "title:lang": {}, + "detail": "Control of all chat conversations and configuration management.", + "detail:lang": { + "en": "All Chat Conversations" + }, + "permissions": [ + { + "type": "permission", + "resource": "rpc", + "inheritAud": true, + "lxm": [ + "chat.bsky.actor.deleteAccount", + "chat.bsky.actor.exportAccountData", + "chat.bsky.convo.acceptConvo", + "chat.bsky.convo.addReaction", + "chat.bsky.convo.deleteMessageForSelf", + "chat.bsky.convo.getConvo", + "chat.bsky.convo.getConvoAvailability", + "chat.bsky.convo.getConvoForMembers", + "chat.bsky.convo.getLog", + "chat.bsky.convo.getMessages", + "chat.bsky.convo.leaveConvo", + "chat.bsky.convo.listConvos", + "chat.bsky.convo.muteConvo", + "chat.bsky.convo.removeReaction", + "chat.bsky.convo.sendMessage", + "chat.bsky.convo.sendMessageBatch", + "chat.bsky.convo.unmuteConvo", + "chat.bsky.convo.updateAllRead", + "chat.bsky.convo.updateRead" + ] + }, + { + "type": "permission", + "resource": "repo", + "action": ["create", "update", "delete"], + "collection": ["chat.bsky.actor.declaration"] + } + ] + } + } +} diff --git a/lexicons/com/atproto/label/defs.json b/lexicons/com/atproto/label/defs.json index 6f4c1ab..26b6a3f 100644 --- a/lexicons/com/atproto/label/defs.json +++ b/lexicons/com/atproto/label/defs.json @@ -140,16 +140,13 @@ "type": "string", "knownValues": [ "!hide", - "!no-promote", "!warn", "!no-unauthenticated", - "dmca-violation", - "doxxing", "porn", "sexual", "nudity", - "nsfl", - "gore" + "graphic-media", + "bot" ] } } diff --git a/lexicons/com/atproto/server/deleteSession.json b/lexicons/com/atproto/server/deleteSession.json index 807a89d..55c8bb2 100644 --- a/lexicons/com/atproto/server/deleteSession.json +++ b/lexicons/com/atproto/server/deleteSession.json @@ -4,7 +4,8 @@ "defs": { "main": { "type": "procedure", - "description": "Delete the current session. Requires auth." + "description": "Delete the current session. Requires auth using the 'refreshJwt' (not the 'accessJwt').", + "errors": [{ "name": "InvalidToken" }, { "name": "ExpiredToken" }] } } } diff --git a/lexicons/com/atproto/server/getSession.json b/lexicons/com/atproto/server/getSession.json index 86efa74..5986361 100644 --- a/lexicons/com/atproto/server/getSession.json +++ b/lexicons/com/atproto/server/getSession.json @@ -13,10 +13,10 @@ "properties": { "handle": { "type": "string", "format": "handle" }, "did": { "type": "string", "format": "did" }, + "didDoc": { "type": "unknown" }, "email": { "type": "string" }, "emailConfirmed": { "type": "boolean" }, "emailAuthFactor": { "type": "boolean" }, - "didDoc": { "type": "unknown" }, "active": { "type": "boolean" }, "status": { "type": "string", diff --git a/lexicons/com/atproto/server/refreshSession.json b/lexicons/com/atproto/server/refreshSession.json index 71123a4..e22acb8 100644 --- a/lexicons/com/atproto/server/refreshSession.json +++ b/lexicons/com/atproto/server/refreshSession.json @@ -16,6 +16,9 @@ "handle": { "type": "string", "format": "handle" }, "did": { "type": "string", "format": "did" }, "didDoc": { "type": "unknown" }, + "email": { "type": "string" }, + "emailConfirmed": { "type": "boolean" }, + "emailAuthFactor": { "type": "boolean" }, "active": { "type": "boolean" }, "status": { "type": "string", @@ -25,7 +28,11 @@ } } }, - "errors": [{ "name": "AccountTakedown" }] + "errors": [ + { "name": "AccountTakedown" }, + { "name": "InvalidToken" }, + { "name": "ExpiredToken" } + ] } } } diff --git a/lexicons/tools/ozone/moderation/defs.json b/lexicons/tools/ozone/moderation/defs.json index 4e03bda..0ed8f27 100644 --- a/lexicons/tools/ozone/moderation/defs.json +++ b/lexicons/tools/ozone/moderation/defs.json @@ -38,6 +38,7 @@ "#modEventPriorityScore", "#ageAssuranceEvent", "#ageAssuranceOverrideEvent", + "#ageAssurancePurgeEvent", "#revokeAccountCredentialsEvent", "#scheduleTakedownEvent", "#cancelScheduledTakedownEvent" @@ -95,6 +96,7 @@ "#modEventPriorityScore", "#ageAssuranceEvent", "#ageAssuranceOverrideEvent", + "#ageAssurancePurgeEvent", "#revokeAccountCredentialsEvent", "#scheduleTakedownEvent", "#cancelScheduledTakedownEvent" @@ -582,16 +584,30 @@ }, "comment": { "type": "string", + "minLength": 1, "description": "Comment describing the reason for the override." } } }, + "ageAssurancePurgeEvent": { + "type": "object", + "description": "Purges all age assurance events for the subject. Only works on DID subjects. Moderator-only.", + "required": ["comment"], + "properties": { + "comment": { + "type": "string", + "minLength": 1, + "description": "Comment describing the reason for the purge." + } + } + }, "revokeAccountCredentialsEvent": { "type": "object", "description": "Account credentials revocation by moderators. Only works on DID subjects.", "required": ["comment"], "properties": { "comment": { + "minLength": 1, "type": "string", "description": "Comment describing the reason for the revocation." } diff --git a/lexicons/tools/ozone/moderation/emitEvent.json b/lexicons/tools/ozone/moderation/emitEvent.json index ddce792..256ef16 100644 --- a/lexicons/tools/ozone/moderation/emitEvent.json +++ b/lexicons/tools/ozone/moderation/emitEvent.json @@ -35,6 +35,7 @@ "tools.ozone.moderation.defs#modEventPriorityScore", "tools.ozone.moderation.defs#ageAssuranceEvent", "tools.ozone.moderation.defs#ageAssuranceOverrideEvent", + "tools.ozone.moderation.defs#ageAssurancePurgeEvent", "tools.ozone.moderation.defs#revokeAccountCredentialsEvent", "tools.ozone.moderation.defs#scheduleTakedownEvent", "tools.ozone.moderation.defs#cancelScheduledTakedownEvent"