add lexicon codegen: vendored lexicons, lex cli and generation scripts

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Samuel Newman
2026-08-03 12:06:59 +03:00
parent a2129885c6
commit a3243820c9
311 changed files with 23342 additions and 14 deletions
+259
View File
@@ -0,0 +1,259 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.defs",
"defs": {
"skeletonSearchPost": {
"type": "object",
"required": ["uri"],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
}
}
},
"skeletonSearchActor": {
"type": "object",
"required": ["did"],
"properties": {
"did": {
"type": "string",
"format": "did"
}
}
},
"skeletonSearchStarterPack": {
"type": "object",
"required": ["uri"],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
}
}
},
"trendingTopic": {
"type": "object",
"required": ["topic", "link"],
"properties": {
"topic": {
"type": "string"
},
"displayName": {
"type": "string"
},
"description": {
"type": "string"
},
"link": {
"type": "string"
}
}
},
"skeletonTrend": {
"type": "object",
"required": [
"topic",
"displayName",
"link",
"startedAt",
"postCount",
"dids"
],
"properties": {
"topic": {
"type": "string"
},
"displayName": {
"type": "string"
},
"description": {
"type": "string"
},
"link": {
"type": "string"
},
"startedAt": {
"type": "string",
"format": "datetime"
},
"postCount": {
"type": "integer"
},
"status": {
"type": "string",
"knownValues": ["hot"]
},
"category": {
"type": "string"
},
"dids": {
"type": "array",
"items": {
"type": "string",
"format": "did"
}
}
}
},
"trendView": {
"type": "object",
"required": [
"topic",
"displayName",
"link",
"startedAt",
"postCount",
"actors"
],
"properties": {
"topic": {
"type": "string"
},
"displayName": {
"type": "string"
},
"description": {
"type": "string"
},
"link": {
"type": "string"
},
"startedAt": {
"type": "string",
"format": "datetime"
},
"postCount": {
"type": "integer"
},
"status": {
"type": "string",
"knownValues": ["hot"]
},
"category": {
"type": "string"
},
"actors": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.actor.defs#profileViewBasic"
}
}
}
},
"threadItemPost": {
"type": "object",
"required": [
"post",
"moreParents",
"moreReplies",
"opThread",
"hiddenByThreadgate",
"mutedByViewer"
],
"properties": {
"post": {
"type": "ref",
"ref": "app.bsky.feed.defs#postView"
},
"moreParents": {
"type": "boolean",
"description": "This post has more parents that were not present in the response. This is just a boolean, without the number of parents."
},
"moreReplies": {
"type": "integer",
"description": "This post has more replies that were not present in the response. This is a numeric value, which is best-effort and might not be accurate."
},
"opThread": {
"type": "boolean",
"description": "This post is part of a contiguous thread by the OP from the thread root. Many different OP threads can happen in the same thread."
},
"hiddenByThreadgate": {
"type": "boolean",
"description": "The threadgate created by the author indicates this post as a reply to be hidden for everyone consuming the thread."
},
"mutedByViewer": {
"type": "boolean",
"description": "This is by an account muted by the viewer requesting it."
}
}
},
"threadItemNoUnauthenticated": {
"type": "object",
"properties": {}
},
"threadItemNotFound": {
"type": "object",
"properties": {}
},
"threadItemBlocked": {
"type": "object",
"required": ["author"],
"properties": {
"author": {
"type": "ref",
"ref": "app.bsky.feed.defs#blockedAuthor"
}
}
},
"ageAssuranceState": {
"type": "object",
"description": "The computed state of the age assurance process, returned to the user in question on certain authenticated requests.",
"required": ["status"],
"properties": {
"lastInitiatedAt": {
"type": "string",
"format": "datetime",
"description": "The timestamp when this state was last updated."
},
"status": {
"type": "string",
"description": "The status of the age assurance process.",
"knownValues": ["unknown", "pending", "assured", "blocked"]
}
}
},
"ageAssuranceEvent": {
"type": "object",
"description": "Object used to store age assurance data in stash.",
"required": ["createdAt", "status", "attemptId"],
"properties": {
"createdAt": {
"type": "string",
"format": "datetime",
"description": "The date and time of this write operation."
},
"status": {
"type": "string",
"description": "The status of the age assurance process.",
"knownValues": ["unknown", "pending", "assured"]
},
"attemptId": {
"type": "string",
"description": "The unique identifier for this instance of the age assurance flow, in UUID format."
},
"email": {
"type": "string",
"description": "The email used for AA."
},
"initIp": {
"type": "string",
"description": "The IP address used when initiating the AA flow."
},
"initUa": {
"type": "string",
"description": "The user agent used when initiating the AA flow."
},
"completeIp": {
"type": "string",
"description": "The IP address used when completing the AA flow."
},
"completeUa": {
"type": "string",
"description": "The user agent used when completing the AA flow."
}
}
}
}
}
@@ -0,0 +1,17 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getAgeAssuranceState",
"defs": {
"main": {
"type": "query",
"description": "Returns the current state of the age assurance process for an account. This is used to check if the user has completed age assurance or if further action is required.",
"output": {
"encoding": "application/json",
"schema": {
"type": "ref",
"ref": "app.bsky.unspecced.defs#ageAssuranceState"
}
}
}
}
}
@@ -0,0 +1,45 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getConfig",
"defs": {
"main": {
"type": "query",
"description": "Get miscellaneous runtime configuration.",
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": [],
"properties": {
"checkEmailConfirmed": {
"type": "boolean"
},
"liveNow": {
"type": "array",
"items": {
"type": "ref",
"ref": "#liveNowConfig"
}
}
}
}
}
},
"liveNowConfig": {
"type": "object",
"required": ["did", "domains"],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"domains": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
@@ -0,0 +1,37 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getOnboardingSuggestedStarterPacks",
"defs": {
"main": {
"type": "query",
"description": "Get a list of suggested starterpacks for onboarding",
"parameters": {
"type": "params",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 10
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["starterPacks"],
"properties": {
"starterPacks": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.graph.defs#starterPackView"
}
}
}
}
}
}
}
}
@@ -0,0 +1,46 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getPopularFeedGenerators",
"defs": {
"main": {
"type": "query",
"description": "An unspecced view of globally popular feed generators.",
"parameters": {
"type": "params",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
},
"cursor": {
"type": "string"
},
"query": {
"type": "string"
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["feeds"],
"properties": {
"cursor": {
"type": "string"
},
"feeds": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.feed.defs#generatorView"
}
}
}
}
}
}
}
}
@@ -0,0 +1,56 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getPostThreadOtherV2",
"defs": {
"main": {
"type": "query",
"description": "(NOTE: this endpoint is under development and WILL change without notice. Don't use it until it is moved out of `unspecced` or your application WILL break) Get additional posts under a thread e.g. replies hidden by threadgate. Based on an anchor post at any depth of the tree, returns top-level replies below that anchor. It does not include ancestors nor the anchor itself. This should be called after exhausting `app.bsky.unspecced.getPostThreadV2`. Does not require auth, but additional metadata and filtering will be applied for authed requests.",
"parameters": {
"type": "params",
"required": ["anchor"],
"properties": {
"anchor": {
"type": "string",
"format": "at-uri",
"description": "Reference (AT-URI) to post record. This is the anchor post."
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["thread"],
"properties": {
"thread": {
"type": "array",
"description": "A flat list of other thread items. The depth of each item is indicated by the depth property inside the item.",
"items": {
"type": "ref",
"ref": "#threadItem"
}
}
}
}
}
},
"threadItem": {
"type": "object",
"required": ["uri", "depth", "value"],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"depth": {
"type": "integer",
"description": "The nesting level of this item in the thread. Depth 0 means the anchor item. Items above have negative depths, items below have positive depths."
},
"value": {
"type": "union",
"refs": ["app.bsky.unspecced.defs#threadItemPost"]
}
}
}
}
}
@@ -0,0 +1,94 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getPostThreadV2",
"defs": {
"main": {
"type": "query",
"description": "(NOTE: this endpoint is under development and WILL change without notice. Don't use it until it is moved out of `unspecced` or your application WILL break) Get posts in a thread. It is based in an anchor post at any depth of the tree, and returns posts above it (recursively resolving the parent, without further branching to their replies) and below it (recursive replies, with branching to their replies). Does not require auth, but additional metadata and filtering will be applied for authed requests.",
"parameters": {
"type": "params",
"required": ["anchor"],
"properties": {
"anchor": {
"type": "string",
"format": "at-uri",
"description": "Reference (AT-URI) to post record. This is the anchor post, and the thread will be built around it. It can be any post in the tree, not necessarily a root post."
},
"above": {
"type": "boolean",
"description": "Whether to include parents above the anchor.",
"default": true
},
"below": {
"type": "integer",
"description": "How many levels of replies to include below the anchor.",
"default": 6,
"minimum": 0,
"maximum": 20
},
"branchingFactor": {
"type": "integer",
"description": "Maximum of replies to include at each level of the thread, except for the direct replies to the anchor, which are (NOTE: currently, during unspecced phase) all returned (NOTE: later they might be paginated).",
"default": 10,
"minimum": 0,
"maximum": 100
},
"sort": {
"type": "string",
"description": "Sorting for the thread replies.",
"knownValues": ["newest", "oldest", "top"],
"default": "oldest"
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["thread", "hasOtherReplies"],
"properties": {
"thread": {
"type": "array",
"description": "A flat list of thread items. The depth of each item is indicated by the depth property inside the item.",
"items": {
"type": "ref",
"ref": "#threadItem"
}
},
"threadgate": {
"type": "ref",
"ref": "app.bsky.feed.defs#threadgateView"
},
"hasOtherReplies": {
"type": "boolean",
"description": "Whether this thread has additional replies. If true, a call can be made to the `getPostThreadOtherV2` endpoint to retrieve them."
}
}
}
}
},
"threadItem": {
"type": "object",
"required": ["uri", "depth", "value"],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"depth": {
"type": "integer",
"description": "The nesting level of this item in the thread. Depth 0 means the anchor item. Items above have negative depths, items below have positive depths."
},
"value": {
"type": "union",
"refs": [
"app.bsky.unspecced.defs#threadItemPost",
"app.bsky.unspecced.defs#threadItemNoUnauthenticated",
"app.bsky.unspecced.defs#threadItemNotFound",
"app.bsky.unspecced.defs#threadItemBlocked"
]
}
}
}
}
}
@@ -0,0 +1,37 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getSuggestedFeeds",
"defs": {
"main": {
"type": "query",
"description": "Get a list of suggested feeds",
"parameters": {
"type": "params",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 10
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["feeds"],
"properties": {
"feeds": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.feed.defs#generatorView"
}
}
}
}
}
}
}
}
@@ -0,0 +1,42 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getSuggestedFeedsSkeleton",
"defs": {
"main": {
"type": "query",
"description": "Get a skeleton of suggested feeds. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedFeeds",
"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": 25,
"default": 10
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["feeds"],
"properties": {
"feeds": {
"type": "array",
"items": {
"type": "string",
"format": "at-uri"
}
}
}
}
}
}
}
}
@@ -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."
}
}
}
}
}
}
}
@@ -0,0 +1,37 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getSuggestedStarterPacks",
"defs": {
"main": {
"type": "query",
"description": "Get a list of suggested starterpacks",
"parameters": {
"type": "params",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 10
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["starterPacks"],
"properties": {
"starterPacks": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.graph.defs#starterPackView"
}
}
}
}
}
}
}
}
@@ -0,0 +1,42 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getSuggestedStarterPacksSkeleton",
"defs": {
"main": {
"type": "query",
"description": "Get a skeleton of suggested starterpacks. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedStarterpacks",
"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": 25,
"default": 10
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["starterPacks"],
"properties": {
"starterPacks": {
"type": "array",
"items": {
"type": "string",
"format": "at-uri"
}
}
}
}
}
}
}
}
@@ -0,0 +1,49 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getSuggestedUsers",
"defs": {
"main": {
"type": "query",
"description": "Get a list of suggested users",
"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."
}
}
}
}
}
}
}
@@ -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."
}
}
}
}
}
}
}
@@ -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."
}
}
}
}
}
}
}
@@ -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."
}
}
}
}
}
}
}
@@ -0,0 +1,54 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getSuggestedUsersSkeleton",
"defs": {
"main": {
"type": "query",
"description": "Get a skeleton of suggested users. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedUsers",
"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."
}
}
}
}
}
}
}
@@ -0,0 +1,66 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getSuggestionsSkeleton",
"defs": {
"main": {
"type": "query",
"description": "Get a skeleton of suggested actors. Intended to be called and then hydrated through app.bsky.actor.getSuggestions",
"parameters": {
"type": "params",
"properties": {
"viewer": {
"type": "string",
"format": "did",
"description": "DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
},
"cursor": {
"type": "string"
},
"relativeToDid": {
"type": "string",
"format": "did",
"description": "DID of the account to get suggestions relative to. If not provided, suggestions will be based on the viewer."
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["actors"],
"properties": {
"cursor": {
"type": "string"
},
"actors": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.unspecced.defs#skeletonSearchActor"
}
},
"relativeToDid": {
"type": "string",
"format": "did",
"description": "DID of the account these suggestions are relative to. If this is returned undefined, suggestions are based on the viewer."
},
"recId": {
"type": "integer",
"description": "DEPRECATED: use recIdStr instead."
},
"recIdStr": {
"type": "string",
"description": "Snowflake for this recommendation, use when submitting recommendation events."
}
}
}
}
}
}
}
@@ -0,0 +1,47 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getTaggedSuggestions",
"defs": {
"main": {
"type": "query",
"description": "Get a list of suggestions (feeds and users) tagged with categories",
"parameters": {
"type": "params",
"properties": {}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["suggestions"],
"properties": {
"suggestions": {
"type": "array",
"items": {
"type": "ref",
"ref": "#suggestion"
}
}
}
}
}
},
"suggestion": {
"type": "object",
"required": ["tag", "subjectType", "subject"],
"properties": {
"tag": {
"type": "string"
},
"subjectType": {
"type": "string",
"knownValues": ["actor", "feed"]
},
"subject": {
"type": "string",
"format": "uri"
}
}
}
}
}
@@ -0,0 +1,49 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getTrendingTopics",
"defs": {
"main": {
"type": "query",
"description": "Get a list of trending topics",
"parameters": {
"type": "params",
"properties": {
"viewer": {
"type": "string",
"format": "did",
"description": "DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 10
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["topics", "suggested"],
"properties": {
"topics": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.unspecced.defs#trendingTopic"
}
},
"suggested": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.unspecced.defs#trendingTopic"
}
}
}
}
}
}
}
}
@@ -0,0 +1,41 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getTrends",
"defs": {
"main": {
"type": "query",
"description": "Get the current trends on the network",
"parameters": {
"type": "params",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 10
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["trends"],
"properties": {
"trends": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.unspecced.defs#trendView"
}
},
"recIdStr": {
"type": "string",
"description": "Snowflake for this recommendation, use when submitting recommendation events."
}
}
}
}
}
}
}
@@ -0,0 +1,42 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getTrendsSkeleton",
"defs": {
"main": {
"type": "query",
"description": "Get the skeleton of trends on the network. Intended to be called and then hydrated through app.bsky.unspecced.getTrends",
"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": 25,
"default": 10
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["trends"],
"properties": {
"trends": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.unspecced.defs#skeletonTrend"
}
}
}
}
}
}
}
}
@@ -0,0 +1,49 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.initAgeAssurance",
"defs": {
"main": {
"type": "procedure",
"description": "Initiate age assurance for an account. This is a one-time action that will start the process of verifying the user's age.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["email", "language", "countryCode"],
"properties": {
"email": {
"type": "string",
"description": "The user's email address to receive assurance instructions."
},
"language": {
"type": "string",
"description": "The user's preferred language for communication during the assurance process."
},
"countryCode": {
"type": "string",
"description": "An ISO 3166-1 alpha-2 code of the user's location."
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "ref",
"ref": "app.bsky.unspecced.defs#ageAssuranceState"
}
},
"errors": [
{
"name": "InvalidEmail"
},
{
"name": "DidTooLong"
},
{
"name": "InvalidInitiation"
}
]
}
}
}
@@ -0,0 +1,67 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.searchActorsSkeleton",
"defs": {
"main": {
"type": "query",
"description": "Backend Actors (profile) search, returns only skeleton.",
"parameters": {
"type": "params",
"required": ["q"],
"properties": {
"q": {
"type": "string",
"description": "Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. For typeahead search, only simple term match is supported, not full syntax."
},
"viewer": {
"type": "string",
"format": "did",
"description": "DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking."
},
"typeahead": {
"type": "boolean",
"description": "If true, acts as fast/simple 'typeahead' query."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"cursor": {
"type": "string",
"description": "Optional pagination mechanism; may not necessarily allow scrolling through entire result set."
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["actors"],
"properties": {
"cursor": {
"type": "string"
},
"hitsTotal": {
"type": "integer",
"description": "Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits."
},
"actors": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.unspecced.defs#skeletonSearchActor"
}
}
}
}
},
"errors": [
{
"name": "BadQueryString"
}
]
}
}
}
@@ -0,0 +1,110 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.searchPostsSkeleton",
"defs": {
"main": {
"type": "query",
"description": "Backend Posts search, returns only skeleton",
"parameters": {
"type": "params",
"required": ["q"],
"properties": {
"q": {
"type": "string",
"description": "Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended."
},
"sort": {
"type": "string",
"knownValues": ["top", "latest"],
"default": "latest",
"description": "Specifies the ranking order of results."
},
"since": {
"type": "string",
"description": "Filter results for posts after the indicated datetime (inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYYY-MM-DD)."
},
"until": {
"type": "string",
"description": "Filter results for posts before the indicated datetime (not inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYY-MM-DD)."
},
"mentions": {
"type": "string",
"format": "at-identifier",
"description": "Filter to posts which mention the given account. Handles are resolved to DID before query-time. Only matches rich-text facet mentions."
},
"author": {
"type": "string",
"format": "at-identifier",
"description": "Filter to posts by the given account. Handles are resolved to DID before query-time."
},
"lang": {
"type": "string",
"format": "language",
"description": "Filter to posts in the given language. Expected to be based on post language field, though server may override language detection."
},
"domain": {
"type": "string",
"description": "Filter to posts with URLs (facet links or embeds) linking to the given domain (hostname). Server may apply hostname normalization."
},
"url": {
"type": "string",
"format": "uri",
"description": "Filter to posts with links (facet links or embeds) pointing to this URL. Server may apply URL normalization or fuzzy matching."
},
"tag": {
"type": "array",
"items": {
"type": "string",
"maxLength": 640,
"maxGraphemes": 64
},
"description": "Filter to posts with the given tag (hashtag), based on rich-text facet or tag field. Do not include the hash (#) prefix. Multiple tags can be specified, with 'AND' matching."
},
"viewer": {
"type": "string",
"format": "did",
"description": "DID of the account making the request (not included for public/unauthenticated queries). Used for 'from:me' queries."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"cursor": {
"type": "string",
"description": "Optional pagination mechanism; may not necessarily allow scrolling through entire result set."
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["posts"],
"properties": {
"cursor": {
"type": "string"
},
"hitsTotal": {
"type": "integer",
"description": "Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits."
},
"posts": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.unspecced.defs#skeletonSearchPost"
}
}
}
}
},
"errors": [
{
"name": "BadQueryString"
}
]
}
}
}
@@ -0,0 +1,63 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.searchStarterPacksSkeleton",
"defs": {
"main": {
"type": "query",
"description": "Backend Starter Pack search, returns only skeleton.",
"parameters": {
"type": "params",
"required": ["q"],
"properties": {
"q": {
"type": "string",
"description": "Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended."
},
"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": 100,
"default": 25
},
"cursor": {
"type": "string",
"description": "Optional pagination mechanism; may not necessarily allow scrolling through entire result set."
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["starterPacks"],
"properties": {
"cursor": {
"type": "string"
},
"hitsTotal": {
"type": "integer",
"description": "Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits."
},
"starterPacks": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.unspecced.defs#skeletonSearchStarterPack"
}
}
}
}
},
"errors": [
{
"name": "BadQueryString"
}
]
}
}
}