diff --git a/deno.json b/deno.json
index 4ee6d0a..817cad0 100644
--- a/deno.json
+++ b/deno.json
@@ -9,7 +9,7 @@
"dev": {
"dependencies": ["dev:db", "dev:api", "dev:ingest"]
},
- "codegen": "deno run -A jsr:@atp/lex-gen@^0.1.0-alpha.2 server -o ./lex -i ./lexicons",
+ "codegen": "deno run -A ../atp/lex-gen/mod.ts server -o ./lex -i ./lexicons",
"start": "deno run -A main.ts",
"docker-dev": "docker compose -f compose.dev.yaml up --build --watch"
},
diff --git a/lex/index.ts b/lex/index.ts
index babb48f..74061f8 100644
--- a/lex/index.ts
+++ b/lex/index.ts
@@ -55,9 +55,21 @@ import type * as ToolsOzoneModerationEmitEvent from "./types/tools/ozone/moderat
import type * as ToolsOzoneModerationSearchRepos from "./types/tools/ozone/moderation/searchRepos.ts";
import type * as ToolsOzoneModerationGetAccountTimeline from "./types/tools/ozone/moderation/getAccountTimeline.ts";
import type * as ToolsOzoneModerationGetRepos from "./types/tools/ozone/moderation/getRepos.ts";
+import type * as AppBskyDraftCreateDraft from "./types/app/bsky/draft/createDraft.ts";
+import type * as AppBskyDraftUpdateDraft from "./types/app/bsky/draft/updateDraft.ts";
+import type * as AppBskyDraftGetDrafts from "./types/app/bsky/draft/getDrafts.ts";
+import type * as AppBskyDraftDeleteDraft from "./types/app/bsky/draft/deleteDraft.ts";
import type * as AppBskyVideoUploadVideo from "./types/app/bsky/video/uploadVideo.ts";
import type * as AppBskyVideoGetJobStatus from "./types/app/bsky/video/getJobStatus.ts";
import type * as AppBskyVideoGetUploadLimits from "./types/app/bsky/video/getUploadLimits.ts";
+import type * as AppBskyContactSendNotification from "./types/app/bsky/contact/sendNotification.ts";
+import type * as AppBskyContactGetSyncStatus from "./types/app/bsky/contact/getSyncStatus.ts";
+import type * as AppBskyContactStartPhoneVerification from "./types/app/bsky/contact/startPhoneVerification.ts";
+import type * as AppBskyContactGetMatches from "./types/app/bsky/contact/getMatches.ts";
+import type * as AppBskyContactImportContacts from "./types/app/bsky/contact/importContacts.ts";
+import type * as AppBskyContactDismissMatch from "./types/app/bsky/contact/dismissMatch.ts";
+import type * as AppBskyContactRemoveData from "./types/app/bsky/contact/removeData.ts";
+import type * as AppBskyContactVerifyPhone from "./types/app/bsky/contact/verifyPhone.ts";
import type * as AppBskyBookmarkDeleteBookmark from "./types/app/bsky/bookmark/deleteBookmark.ts";
import type * as AppBskyBookmarkGetBookmarks from "./types/app/bsky/bookmark/getBookmarks.ts";
import type * as AppBskyBookmarkCreateBookmark from "./types/app/bsky/bookmark/createBookmark.ts";
@@ -73,7 +85,9 @@ import type * as AppBskyNotificationListNotifications from "./types/app/bsky/not
import type * as AppBskyNotificationGetUnreadCount from "./types/app/bsky/notification/getUnreadCount.ts";
import type * as AppBskyUnspeccedGetSuggestedFeedsSkeleton from "./types/app/bsky/unspecced/getSuggestedFeedsSkeleton.ts";
import type * as AppBskyUnspeccedSearchStarterPacksSkeleton from "./types/app/bsky/unspecced/searchStarterPacksSkeleton.ts";
+import type * as AppBskyUnspeccedGetSuggestedUsersForExplore from "./types/app/bsky/unspecced/getSuggestedUsersForExplore.ts";
import type * as AppBskyUnspeccedGetOnboardingSuggestedStarterPacksSkeleton from "./types/app/bsky/unspecced/getOnboardingSuggestedStarterPacksSkeleton.ts";
+import type * as AppBskyUnspeccedGetSuggestedUsersForExploreSkeleton from "./types/app/bsky/unspecced/getSuggestedUsersForExploreSkeleton.ts";
import type * as AppBskyUnspeccedGetSuggestedUsers from "./types/app/bsky/unspecced/getSuggestedUsers.ts";
import type * as AppBskyUnspeccedGetPostThreadOtherV2 from "./types/app/bsky/unspecced/getPostThreadOtherV2.ts";
import type * as AppBskyUnspeccedGetSuggestedStarterPacks from "./types/app/bsky/unspecced/getSuggestedStarterPacks.ts";
@@ -85,11 +99,17 @@ import type * as AppBskyUnspeccedGetTrends from "./types/app/bsky/unspecced/getT
import type * as AppBskyUnspeccedSearchActorsSkeleton from "./types/app/bsky/unspecced/searchActorsSkeleton.ts";
import type * as AppBskyUnspeccedGetSuggestionsSkeleton from "./types/app/bsky/unspecced/getSuggestionsSkeleton.ts";
import type * as AppBskyUnspeccedSearchPostsSkeleton from "./types/app/bsky/unspecced/searchPostsSkeleton.ts";
+import type * as AppBskyUnspeccedGetOnboardingSuggestedUsersSkeleton from "./types/app/bsky/unspecced/getOnboardingSuggestedUsersSkeleton.ts";
+import type * as AppBskyUnspeccedGetSuggestedUsersForDiscoverSkeleton from "./types/app/bsky/unspecced/getSuggestedUsersForDiscoverSkeleton.ts";
+import type * as AppBskyUnspeccedGetSuggestedUsersForDiscover from "./types/app/bsky/unspecced/getSuggestedUsersForDiscover.ts";
import type * as AppBskyUnspeccedGetAgeAssuranceState from "./types/app/bsky/unspecced/getAgeAssuranceState.ts";
import type * as AppBskyUnspeccedGetPopularFeedGenerators from "./types/app/bsky/unspecced/getPopularFeedGenerators.ts";
+import type * as AppBskyUnspeccedGetSuggestedOnboardingUsers from "./types/app/bsky/unspecced/getSuggestedOnboardingUsers.ts";
+import type * as AppBskyUnspeccedGetSuggestedUsersForSeeMore from "./types/app/bsky/unspecced/getSuggestedUsersForSeeMore.ts";
import type * as AppBskyUnspeccedInitAgeAssurance from "./types/app/bsky/unspecced/initAgeAssurance.ts";
import type * as AppBskyUnspeccedGetTrendingTopics from "./types/app/bsky/unspecced/getTrendingTopics.ts";
import type * as AppBskyUnspeccedGetTaggedSuggestions from "./types/app/bsky/unspecced/getTaggedSuggestions.ts";
+import type * as AppBskyUnspeccedGetSuggestedUsersForSeeMoreSkeleton from "./types/app/bsky/unspecced/getSuggestedUsersForSeeMoreSkeleton.ts";
import type * as AppBskyUnspeccedGetSuggestedFeeds from "./types/app/bsky/unspecced/getSuggestedFeeds.ts";
import type * as AppBskyUnspeccedGetTrendsSkeleton from "./types/app/bsky/unspecced/getTrendsSkeleton.ts";
import type * as AppBskyUnspeccedGetConfig from "./types/app/bsky/unspecced/getConfig.ts";
@@ -1119,7 +1139,9 @@ export class AppNS {
export class AppBskyNS {
_server: Server;
+ draft: AppBskyDraftNS;
video: AppBskyVideoNS;
+ contact: AppBskyContactNS;
bookmark: AppBskyBookmarkNS;
embed: AppBskyEmbedNS;
notification: AppBskyNotificationNS;
@@ -1133,7 +1155,9 @@ export class AppBskyNS {
constructor(server: Server) {
this._server = server;
+ this.draft = new AppBskyDraftNS(server);
this.video = new AppBskyVideoNS(server);
+ this.contact = new AppBskyContactNS(server);
this.bookmark = new AppBskyBookmarkNS(server);
this.embed = new AppBskyEmbedNS(server);
this.notification = new AppBskyNotificationNS(server);
@@ -1147,6 +1171,62 @@ export class AppBskyNS {
}
}
+export class AppBskyDraftNS {
+ _server: Server;
+
+ constructor(server: Server) {
+ this._server = server;
+ }
+
+ createDraft(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyDraftCreateDraft.QueryParams,
+ AppBskyDraftCreateDraft.HandlerInput,
+ AppBskyDraftCreateDraft.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.draft.createDraft"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+
+ updateDraft(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyDraftUpdateDraft.QueryParams,
+ AppBskyDraftUpdateDraft.HandlerInput,
+ AppBskyDraftUpdateDraft.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.draft.updateDraft"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+
+ getDrafts(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyDraftGetDrafts.QueryParams,
+ AppBskyDraftGetDrafts.HandlerInput,
+ AppBskyDraftGetDrafts.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.draft.getDrafts"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+
+ deleteDraft(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyDraftDeleteDraft.QueryParams,
+ AppBskyDraftDeleteDraft.HandlerInput,
+ AppBskyDraftDeleteDraft.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.draft.deleteDraft"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+}
+
export class AppBskyVideoNS {
_server: Server;
@@ -1191,6 +1271,110 @@ export class AppBskyVideoNS {
}
}
+export class AppBskyContactNS {
+ _server: Server;
+
+ constructor(server: Server) {
+ this._server = server;
+ }
+
+ sendNotification(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyContactSendNotification.QueryParams,
+ AppBskyContactSendNotification.HandlerInput,
+ AppBskyContactSendNotification.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.contact.sendNotification"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+
+ getSyncStatus(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyContactGetSyncStatus.QueryParams,
+ AppBskyContactGetSyncStatus.HandlerInput,
+ AppBskyContactGetSyncStatus.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.contact.getSyncStatus"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+
+ startPhoneVerification(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyContactStartPhoneVerification.QueryParams,
+ AppBskyContactStartPhoneVerification.HandlerInput,
+ AppBskyContactStartPhoneVerification.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.contact.startPhoneVerification"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+
+ getMatches(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyContactGetMatches.QueryParams,
+ AppBskyContactGetMatches.HandlerInput,
+ AppBskyContactGetMatches.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.contact.getMatches"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+
+ importContacts(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyContactImportContacts.QueryParams,
+ AppBskyContactImportContacts.HandlerInput,
+ AppBskyContactImportContacts.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.contact.importContacts"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+
+ dismissMatch(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyContactDismissMatch.QueryParams,
+ AppBskyContactDismissMatch.HandlerInput,
+ AppBskyContactDismissMatch.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.contact.dismissMatch"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+
+ removeData(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyContactRemoveData.QueryParams,
+ AppBskyContactRemoveData.HandlerInput,
+ AppBskyContactRemoveData.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.contact.removeData"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+
+ verifyPhone(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyContactVerifyPhone.QueryParams,
+ AppBskyContactVerifyPhone.HandlerInput,
+ AppBskyContactVerifyPhone.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.contact.verifyPhone"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+}
+
export class AppBskyBookmarkNS {
_server: Server;
@@ -1402,6 +1586,18 @@ export class AppBskyUnspeccedNS {
return this._server.xrpc.method(nsid, cfg);
}
+ getSuggestedUsersForExplore(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyUnspeccedGetSuggestedUsersForExplore.QueryParams,
+ AppBskyUnspeccedGetSuggestedUsersForExplore.HandlerInput,
+ AppBskyUnspeccedGetSuggestedUsersForExplore.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.unspecced.getSuggestedUsersForExplore"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+
getOnboardingSuggestedStarterPacksSkeleton(
cfg: MethodConfigOrHandler<
A,
@@ -1415,6 +1611,18 @@ export class AppBskyUnspeccedNS {
return this._server.xrpc.method(nsid, cfg);
}
+ getSuggestedUsersForExploreSkeleton(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyUnspeccedGetSuggestedUsersForExploreSkeleton.QueryParams,
+ AppBskyUnspeccedGetSuggestedUsersForExploreSkeleton.HandlerInput,
+ AppBskyUnspeccedGetSuggestedUsersForExploreSkeleton.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.unspecced.getSuggestedUsersForExploreSkeleton"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+
getSuggestedUsers(
cfg: MethodConfigOrHandler<
A,
@@ -1547,6 +1755,42 @@ export class AppBskyUnspeccedNS {
return this._server.xrpc.method(nsid, cfg);
}
+ getOnboardingSuggestedUsersSkeleton(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyUnspeccedGetOnboardingSuggestedUsersSkeleton.QueryParams,
+ AppBskyUnspeccedGetOnboardingSuggestedUsersSkeleton.HandlerInput,
+ AppBskyUnspeccedGetOnboardingSuggestedUsersSkeleton.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.unspecced.getOnboardingSuggestedUsersSkeleton"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+
+ getSuggestedUsersForDiscoverSkeleton(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyUnspeccedGetSuggestedUsersForDiscoverSkeleton.QueryParams,
+ AppBskyUnspeccedGetSuggestedUsersForDiscoverSkeleton.HandlerInput,
+ AppBskyUnspeccedGetSuggestedUsersForDiscoverSkeleton.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.unspecced.getSuggestedUsersForDiscoverSkeleton"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+
+ getSuggestedUsersForDiscover(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyUnspeccedGetSuggestedUsersForDiscover.QueryParams,
+ AppBskyUnspeccedGetSuggestedUsersForDiscover.HandlerInput,
+ AppBskyUnspeccedGetSuggestedUsersForDiscover.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.unspecced.getSuggestedUsersForDiscover"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+
getAgeAssuranceState(
cfg: MethodConfigOrHandler<
A,
@@ -1571,6 +1815,30 @@ export class AppBskyUnspeccedNS {
return this._server.xrpc.method(nsid, cfg);
}
+ getSuggestedOnboardingUsers(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyUnspeccedGetSuggestedOnboardingUsers.QueryParams,
+ AppBskyUnspeccedGetSuggestedOnboardingUsers.HandlerInput,
+ AppBskyUnspeccedGetSuggestedOnboardingUsers.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.unspecced.getSuggestedOnboardingUsers"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+
+ getSuggestedUsersForSeeMore(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyUnspeccedGetSuggestedUsersForSeeMore.QueryParams,
+ AppBskyUnspeccedGetSuggestedUsersForSeeMore.HandlerInput,
+ AppBskyUnspeccedGetSuggestedUsersForSeeMore.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.unspecced.getSuggestedUsersForSeeMore"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+
initAgeAssurance(
cfg: MethodConfigOrHandler<
A,
@@ -1607,6 +1875,18 @@ export class AppBskyUnspeccedNS {
return this._server.xrpc.method(nsid, cfg);
}
+ getSuggestedUsersForSeeMoreSkeleton(
+ cfg: MethodConfigOrHandler<
+ A,
+ AppBskyUnspeccedGetSuggestedUsersForSeeMoreSkeleton.QueryParams,
+ AppBskyUnspeccedGetSuggestedUsersForSeeMoreSkeleton.HandlerInput,
+ AppBskyUnspeccedGetSuggestedUsersForSeeMoreSkeleton.HandlerOutput
+ >,
+ ) {
+ const nsid = "app.bsky.unspecced.getSuggestedUsersForSeeMoreSkeleton"; // @ts-ignore - dynamically generated
+ return this._server.xrpc.method(nsid, cfg);
+ }
+
getSuggestedFeeds(
cfg: MethodConfigOrHandler<
A,
diff --git a/lex/lexicons.ts b/lex/lexicons.ts
index 307624d..45a5231 100644
--- a/lex/lexicons.ts
+++ b/lex/lexicons.ts
@@ -3112,6 +3112,7 @@ export const schemaDict = {
"lex:tools.ozone.moderation.defs#modEventPriorityScore",
"lex:tools.ozone.moderation.defs#ageAssuranceEvent",
"lex:tools.ozone.moderation.defs#ageAssuranceOverrideEvent",
+ "lex:tools.ozone.moderation.defs#ageAssurancePurgeEvent",
"lex:tools.ozone.moderation.defs#revokeAccountCredentialsEvent",
"lex:tools.ozone.moderation.defs#scheduleTakedownEvent",
"lex:tools.ozone.moderation.defs#cancelScheduledTakedownEvent",
@@ -3189,6 +3190,7 @@ export const schemaDict = {
"lex:tools.ozone.moderation.defs#modEventPriorityScore",
"lex:tools.ozone.moderation.defs#ageAssuranceEvent",
"lex:tools.ozone.moderation.defs#ageAssuranceOverrideEvent",
+ "lex:tools.ozone.moderation.defs#ageAssurancePurgeEvent",
"lex:tools.ozone.moderation.defs#revokeAccountCredentialsEvent",
"lex:tools.ozone.moderation.defs#scheduleTakedownEvent",
"lex:tools.ozone.moderation.defs#cancelScheduledTakedownEvent",
@@ -3793,10 +3795,26 @@ export const schemaDict = {
},
"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":
@@ -3806,6 +3824,7 @@ export const schemaDict = {
],
"properties": {
"comment": {
+ "minLength": 1,
"type": "string",
"description": "Comment describing the reason for the revocation.",
},
@@ -5266,6 +5285,7 @@ export const schemaDict = {
"lex:tools.ozone.moderation.defs#modEventPriorityScore",
"lex:tools.ozone.moderation.defs#ageAssuranceEvent",
"lex:tools.ozone.moderation.defs#ageAssuranceOverrideEvent",
+ "lex:tools.ozone.moderation.defs#ageAssurancePurgeEvent",
"lex:tools.ozone.moderation.defs#revokeAccountCredentialsEvent",
"lex:tools.ozone.moderation.defs#scheduleTakedownEvent",
"lex:tools.ozone.moderation.defs#cancelScheduledTakedownEvent",
@@ -5544,241 +5564,364 @@ export const schemaDict = {
},
},
},
- "AppBskyVideoUploadVideo": {
- "lexicon": 1,
- "id": "app.bsky.video.uploadVideo",
- "defs": {
- "main": {
- "type": "procedure",
- "description": "Upload a video to be processed then stored on the PDS.",
- "input": {
- "encoding": "video/mp4",
- },
- "output": {
- "encoding": "application/json",
- "schema": {
- "type": "object",
- "required": [
- "jobStatus",
- ],
- "properties": {
- "jobStatus": {
- "type": "ref",
- "ref": "lex:app.bsky.video.defs#jobStatus",
- },
- },
- },
- },
- },
- },
- },
- "AppBskyVideoDefs": {
+ "AppBskyDraftDefs": {
"lexicon": 1,
- "id": "app.bsky.video.defs",
+ "id": "app.bsky.draft.defs",
"defs": {
- "jobStatus": {
+ "draftWithId": {
+ "description":
+ "A draft with an identifier, used to store drafts in private storage (stash).",
"type": "object",
"required": [
- "jobId",
- "did",
- "state",
+ "id",
+ "draft",
],
"properties": {
- "jobId": {
+ "id": {
+ "description": "A TID to be used as a draft identifier.",
"type": "string",
+ "format": "tid",
},
- "did": {
- "type": "string",
- "format": "did",
+ "draft": {
+ "type": "ref",
+ "ref": "lex:app.bsky.draft.defs#draft",
},
- "state": {
+ },
+ },
+ "draft": {
+ "description": "A draft containing an array of draft posts.",
+ "type": "object",
+ "required": [
+ "posts",
+ ],
+ "properties": {
+ "deviceId": {
"type": "string",
"description":
- "The state of the video processing job. All values not listed as a known value indicate that the job is in process.",
- "knownValues": [
- "JOB_STATE_COMPLETED",
- "JOB_STATE_FAILED",
- ],
- },
- "progress": {
- "type": "integer",
- "minimum": 0,
- "maximum": 100,
- "description": "Progress within the current processing state.",
- },
- "blob": {
- "type": "blob",
+ "UUIDv4 identifier of the device that created this draft.",
+ "maxLength": 100,
},
- "error": {
+ "deviceName": {
"type": "string",
+ "description":
+ "The device and/or platform on which the draft was created.",
+ "maxLength": 100,
},
- "message": {
- "type": "string",
+ "posts": {
+ "description": "Array of draft posts that compose this draft.",
+ "type": "array",
+ "minLength": 1,
+ "maxLength": 100,
+ "items": {
+ "type": "ref",
+ "ref": "lex:app.bsky.draft.defs#draftPost",
+ },
},
- },
- },
- },
- },
- "AppBskyVideoGetJobStatus": {
- "lexicon": 1,
- "id": "app.bsky.video.getJobStatus",
- "defs": {
- "main": {
- "type": "query",
- "description": "Get status details for a video processing job.",
- "parameters": {
- "type": "params",
- "required": [
- "jobId",
- ],
- "properties": {
- "jobId": {
+ "langs": {
+ "type": "array",
+ "description":
+ "Indicates human language of posts primary text content.",
+ "maxLength": 3,
+ "items": {
"type": "string",
+ "format": "language",
},
},
- },
- "output": {
- "encoding": "application/json",
- "schema": {
- "type": "object",
- "required": [
- "jobStatus",
- ],
- "properties": {
- "jobStatus": {
- "type": "ref",
- "ref": "lex:app.bsky.video.defs#jobStatus",
- },
+ "postgateEmbeddingRules": {
+ "description":
+ "Embedding rules for the postgates to be created when this draft is published.",
+ "type": "array",
+ "maxLength": 5,
+ "items": {
+ "type": "union",
+ "refs": [
+ "lex:app.bsky.feed.postgate#disableRule",
+ ],
},
},
- },
- },
- },
- },
- "AppBskyVideoGetUploadLimits": {
- "lexicon": 1,
- "id": "app.bsky.video.getUploadLimits",
- "defs": {
- "main": {
- "type": "query",
- "description": "Get video upload limits for the authenticated user.",
- "output": {
- "encoding": "application/json",
- "schema": {
- "type": "object",
- "required": [
- "canUpload",
- ],
- "properties": {
- "canUpload": {
- "type": "boolean",
- },
- "remainingDailyVideos": {
- "type": "integer",
- },
- "remainingDailyBytes": {
- "type": "integer",
- },
- "message": {
- "type": "string",
- },
- "error": {
- "type": "string",
- },
+ "threadgateAllow": {
+ "description":
+ "Allow-rules for the threadgate to be created when this draft is published.",
+ "type": "array",
+ "maxLength": 5,
+ "items": {
+ "type": "union",
+ "refs": [
+ "lex:app.bsky.feed.threadgate#mentionRule",
+ "lex:app.bsky.feed.threadgate#followerRule",
+ "lex:app.bsky.feed.threadgate#followingRule",
+ "lex:app.bsky.feed.threadgate#listRule",
+ ],
},
},
},
},
- },
- },
- "AppBskyBookmarkDefs": {
- "lexicon": 1,
- "id": "app.bsky.bookmark.defs",
- "defs": {
- "bookmark": {
- "description": "Object used to store bookmark data in stash.",
+ "draftPost": {
+ "description": "One of the posts that compose a draft.",
"type": "object",
"required": [
- "subject",
+ "text",
],
"properties": {
- "subject": {
+ "text": {
+ "type": "string",
+ "maxLength": 10000,
+ "maxGraphemes": 1000,
"description":
- "A strong ref to the record to be bookmarked. Currently, only `app.bsky.feed.post` records are supported.",
- "type": "ref",
- "ref": "lex:com.atproto.repo.strongRef",
+ "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": [
+ "lex:com.atproto.label.defs#selfLabels",
+ ],
+ },
+ "embedImages": {
+ "type": "array",
+ "items": {
+ "type": "ref",
+ "ref": "lex:app.bsky.draft.defs#draftEmbedImage",
+ },
+ "maxLength": 4,
+ },
+ "embedVideos": {
+ "type": "array",
+ "items": {
+ "type": "ref",
+ "ref": "lex:app.bsky.draft.defs#draftEmbedVideo",
+ },
+ "maxLength": 1,
+ },
+ "embedExternals": {
+ "type": "array",
+ "items": {
+ "type": "ref",
+ "ref": "lex:app.bsky.draft.defs#draftEmbedExternal",
+ },
+ "maxLength": 1,
+ },
+ "embedRecords": {
+ "type": "array",
+ "items": {
+ "type": "ref",
+ "ref": "lex:app.bsky.draft.defs#draftEmbedRecord",
+ },
+ "maxLength": 1,
},
},
},
- "bookmarkView": {
+ "draftView": {
+ "description": "View to present drafts data to users.",
"type": "object",
"required": [
- "subject",
- "item",
+ "id",
+ "draft",
+ "createdAt",
+ "updatedAt",
],
"properties": {
- "subject": {
- "description": "A strong ref to the bookmarked record.",
+ "id": {
+ "description": "A TID to be used as a draft identifier.",
+ "type": "string",
+ "format": "tid",
+ },
+ "draft": {
"type": "ref",
- "ref": "lex:com.atproto.repo.strongRef",
+ "ref": "lex:app.bsky.draft.defs#draft",
},
"createdAt": {
+ "description": "The time the draft was created.",
"type": "string",
"format": "datetime",
},
- "item": {
- "type": "union",
- "refs": [
- "lex:app.bsky.feed.defs#blockedPost",
- "lex:app.bsky.feed.defs#notFoundPost",
- "lex:app.bsky.feed.defs#postView",
- ],
+ "updatedAt": {
+ "description": "The time the draft was last updated.",
+ "type": "string",
+ "format": "datetime",
},
},
},
- },
- },
- "AppBskyBookmarkDeleteBookmark": {
- "lexicon": 1,
- "id": "app.bsky.bookmark.deleteBookmark",
- "defs": {
- "main": {
- "type": "procedure",
+ "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": "lex:app.bsky.draft.defs#draftEmbedLocalRef",
+ },
+ "alt": {
+ "type": "string",
+ "maxGraphemes": 2000,
+ },
+ },
+ },
+ "draftEmbedVideo": {
+ "type": "object",
+ "required": [
+ "localRef",
+ ],
+ "properties": {
+ "localRef": {
+ "type": "ref",
+ "ref": "lex:app.bsky.draft.defs#draftEmbedLocalRef",
+ },
+ "alt": {
+ "type": "string",
+ "maxGraphemes": 2000,
+ },
+ "captions": {
+ "type": "array",
+ "items": {
+ "type": "ref",
+ "ref": "lex:app.bsky.draft.defs#draftEmbedCaption",
+ },
+ "maxLength": 20,
+ },
+ },
+ },
+ "draftEmbedExternal": {
+ "type": "object",
+ "required": [
+ "uri",
+ ],
+ "properties": {
+ "uri": {
+ "type": "string",
+ "format": "uri",
+ },
+ },
+ },
+ "draftEmbedRecord": {
+ "type": "object",
+ "required": [
+ "record",
+ ],
+ "properties": {
+ "record": {
+ "type": "ref",
+ "ref": "lex:com.atproto.repo.strongRef",
+ },
+ },
+ },
+ },
+ },
+ "AppBskyDraftCreateDraft": {
+ "lexicon": 1,
+ "id": "app.bsky.draft.createDraft",
+ "defs": {
+ "main": {
+ "type": "procedure",
"description":
- "Deletes a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication.",
+ "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": [
- "uri",
+ "draft",
],
"properties": {
- "uri": {
+ "draft": {
+ "type": "ref",
+ "ref": "lex:app.bsky.draft.defs#draft",
+ },
+ },
+ },
+ },
+ "output": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "required": [
+ "id",
+ ],
+ "properties": {
+ "id": {
"type": "string",
- "format": "at-uri",
+ "description": "The ID of the created draft.",
},
},
},
},
"errors": [
{
- "name": "UnsupportedCollection",
+ "name": "DraftLimitReached",
"description":
- "The URI to be bookmarked is for an unsupported collection.",
+ "Trying to insert a new draft when the limit was already reached.",
},
],
},
},
},
- "AppBskyBookmarkGetBookmarks": {
+ "AppBskyDraftUpdateDraft": {
"lexicon": 1,
- "id": "app.bsky.bookmark.getBookmarks",
+ "id": "app.bsky.draft.updateDraft",
"defs": {
"main": {
- "type": "query",
+ "type": "procedure",
"description":
- "Gets views of records bookmarked by the authenticated user. Requires authentication.",
+ "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": "lex:app.bsky.draft.defs#draftWithId",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyDraftGetDrafts": {
+ "lexicon": 1,
+ "id": "app.bsky.draft.getDrafts",
+ "defs": {
+ "main": {
+ "type": "query",
+ "description": "Gets views of user drafts. Requires authentication.",
"parameters": {
"type": "params",
"properties": {
@@ -5798,17 +5941,17 @@ export const schemaDict = {
"schema": {
"type": "object",
"required": [
- "bookmarks",
+ "drafts",
],
"properties": {
"cursor": {
"type": "string",
},
- "bookmarks": {
+ "drafts": {
"type": "array",
"items": {
"type": "ref",
- "ref": "lex:app.bsky.bookmark.defs#bookmarkView",
+ "ref": "lex:app.bsky.draft.defs#draftView",
},
},
},
@@ -5817,821 +5960,555 @@ export const schemaDict = {
},
},
},
- "AppBskyBookmarkCreateBookmark": {
+ "AppBskyDraftDeleteDraft": {
"lexicon": 1,
- "id": "app.bsky.bookmark.createBookmark",
+ "id": "app.bsky.draft.deleteDraft",
"defs": {
"main": {
"type": "procedure",
- "description":
- "Creates a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication.",
+ "description": "Deletes a draft by ID. Requires authentication.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": [
- "uri",
- "cid",
+ "id",
],
"properties": {
- "uri": {
- "type": "string",
- "format": "at-uri",
- },
- "cid": {
+ "id": {
"type": "string",
- "format": "cid",
+ "format": "tid",
},
},
},
},
- "errors": [
- {
- "name": "UnsupportedCollection",
- "description":
- "The URI to be bookmarked is for an unsupported collection.",
- },
- ],
},
},
},
- "AppBskyEmbedDefs": {
+ "AppBskyAuthManageLabelerService": {
"lexicon": 1,
- "id": "app.bsky.embed.defs",
+ "id": "app.bsky.authManageLabelerService",
"defs": {
- "aspectRatio": {
- "type": "object",
- "description":
- "width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit.",
- "required": [
- "width",
- "height",
- ],
- "properties": {
- "width": {
- "type": "integer",
- "minimum": 1,
- },
- "height": {
- "type": "integer",
- "minimum": 1,
+ "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",
+ ],
},
- },
+ ],
},
},
},
- "AppBskyEmbedRecord": {
+ "AppBskyVideoUploadVideo": {
"lexicon": 1,
- "id": "app.bsky.embed.record",
- "description":
- "A representation of a record embedded in a Bluesky record (eg, a post). For example, a quote-post, or sharing a feed generator record.",
+ "id": "app.bsky.video.uploadVideo",
"defs": {
"main": {
- "type": "object",
- "required": [
- "record",
- ],
- "properties": {
- "record": {
- "type": "ref",
- "ref": "lex:com.atproto.repo.strongRef",
- },
+ "type": "procedure",
+ "description": "Upload a video to be processed then stored on the PDS.",
+ "input": {
+ "encoding": "video/mp4",
},
- },
- "view": {
- "type": "object",
- "required": [
- "record",
- ],
- "properties": {
- "record": {
- "type": "union",
- "refs": [
- "lex:app.bsky.embed.record#viewRecord",
- "lex:app.bsky.embed.record#viewNotFound",
- "lex:app.bsky.embed.record#viewBlocked",
- "lex:app.bsky.embed.record#viewDetached",
- "lex:app.bsky.feed.defs#generatorView",
- "lex:app.bsky.graph.defs#listView",
- "lex:app.bsky.labeler.defs#labelerView",
- "lex:app.bsky.graph.defs#starterPackViewBasic",
+ "output": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "required": [
+ "jobStatus",
],
+ "properties": {
+ "jobStatus": {
+ "type": "ref",
+ "ref": "lex:app.bsky.video.defs#jobStatus",
+ },
+ },
},
},
},
- "viewRecord": {
+ },
+ },
+ "AppBskyVideoDefs": {
+ "lexicon": 1,
+ "id": "app.bsky.video.defs",
+ "defs": {
+ "jobStatus": {
"type": "object",
"required": [
- "uri",
- "cid",
- "author",
- "value",
- "indexedAt",
+ "jobId",
+ "did",
+ "state",
],
"properties": {
- "uri": {
+ "jobId": {
"type": "string",
- "format": "at-uri",
},
- "cid": {
+ "did": {
"type": "string",
- "format": "cid",
+ "format": "did",
},
- "author": {
- "type": "ref",
- "ref": "lex:app.bsky.actor.defs#profileViewBasic",
- },
- "value": {
- "type": "unknown",
- "description": "The record data itself.",
- },
- "labels": {
- "type": "array",
- "items": {
- "type": "ref",
- "ref": "lex:com.atproto.label.defs#label",
- },
- },
- "replyCount": {
- "type": "integer",
- },
- "repostCount": {
- "type": "integer",
- },
- "likeCount": {
- "type": "integer",
+ "state": {
+ "type": "string",
+ "description":
+ "The state of the video processing job. All values not listed as a known value indicate that the job is in process.",
+ "knownValues": [
+ "JOB_STATE_COMPLETED",
+ "JOB_STATE_FAILED",
+ ],
},
- "quoteCount": {
+ "progress": {
"type": "integer",
+ "minimum": 0,
+ "maximum": 100,
+ "description": "Progress within the current processing state.",
},
- "embeds": {
- "type": "array",
- "items": {
- "type": "union",
- "refs": [
- "lex:app.bsky.embed.images#view",
- "lex:app.bsky.embed.video#view",
- "lex:app.bsky.embed.external#view",
- "lex:app.bsky.embed.record#view",
- "lex:app.bsky.embed.recordWithMedia#view",
- ],
- },
+ "blob": {
+ "type": "blob",
},
- "indexedAt": {
+ "error": {
"type": "string",
- "format": "datetime",
},
- },
- },
- "viewNotFound": {
- "type": "object",
- "required": [
- "uri",
- "notFound",
- ],
- "properties": {
- "uri": {
+ "message": {
"type": "string",
- "format": "at-uri",
- },
- "notFound": {
- "type": "boolean",
- "const": true,
},
},
},
- "viewBlocked": {
- "type": "object",
- "required": [
- "uri",
- "blocked",
- "author",
- ],
- "properties": {
- "uri": {
- "type": "string",
- "format": "at-uri",
- },
- "blocked": {
- "type": "boolean",
- "const": true,
- },
- "author": {
- "type": "ref",
- "ref": "lex:app.bsky.feed.defs#blockedAuthor",
+ },
+ },
+ "AppBskyVideoGetJobStatus": {
+ "lexicon": 1,
+ "id": "app.bsky.video.getJobStatus",
+ "defs": {
+ "main": {
+ "type": "query",
+ "description": "Get status details for a video processing job.",
+ "parameters": {
+ "type": "params",
+ "required": [
+ "jobId",
+ ],
+ "properties": {
+ "jobId": {
+ "type": "string",
+ },
},
},
- },
- "viewDetached": {
- "type": "object",
- "required": [
- "uri",
- "detached",
- ],
- "properties": {
- "uri": {
- "type": "string",
- "format": "at-uri",
- },
- "detached": {
- "type": "boolean",
- "const": true,
+ "output": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "required": [
+ "jobStatus",
+ ],
+ "properties": {
+ "jobStatus": {
+ "type": "ref",
+ "ref": "lex:app.bsky.video.defs#jobStatus",
+ },
+ },
},
},
},
},
},
- "AppBskyEmbedImages": {
+ "AppBskyVideoGetUploadLimits": {
"lexicon": 1,
- "id": "app.bsky.embed.images",
- "description": "A set of images embedded in a Bluesky record (eg, a post).",
+ "id": "app.bsky.video.getUploadLimits",
"defs": {
"main": {
- "type": "object",
- "required": [
- "images",
- ],
- "properties": {
- "images": {
- "type": "array",
- "items": {
- "type": "ref",
- "ref": "lex:app.bsky.embed.images#image",
+ "type": "query",
+ "description": "Get video upload limits for the authenticated user.",
+ "output": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "required": [
+ "canUpload",
+ ],
+ "properties": {
+ "canUpload": {
+ "type": "boolean",
+ },
+ "remainingDailyVideos": {
+ "type": "integer",
+ },
+ "remainingDailyBytes": {
+ "type": "integer",
+ },
+ "message": {
+ "type": "string",
+ },
+ "error": {
+ "type": "string",
+ },
},
- "maxLength": 4,
},
},
},
- "image": {
+ },
+ },
+ "AppBskyContactDefs": {
+ "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": [
- "image",
- "alt",
+ "match",
+ "contactIndex",
],
"properties": {
- "image": {
- "type": "blob",
- "accept": [
- "image/*",
- ],
- "maxSize": 1000000,
+ "match": {
+ "description": "Profile of the matched user.",
+ "type": "ref",
+ "ref": "lex:app.bsky.actor.defs#profileView",
},
- "alt": {
- "type": "string",
+ "contactIndex": {
"description":
- "Alt text description of the image, for accessibility.",
- },
- "aspectRatio": {
- "type": "ref",
- "ref": "lex:app.bsky.embed.defs#aspectRatio",
+ "The index of this match in the import contact input.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 999,
},
},
},
- "view": {
+ "syncStatus": {
"type": "object",
"required": [
- "images",
+ "syncedAt",
+ "matchesCount",
],
"properties": {
- "images": {
- "type": "array",
- "items": {
- "type": "ref",
- "ref": "lex:app.bsky.embed.images#viewImage",
- },
- "maxLength": 4,
+ "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,
},
},
},
- "viewImage": {
+ "notification": {
+ "description":
+ "A stash object to be sent via bsync representing a notification to be created.",
"type": "object",
"required": [
- "thumb",
- "fullsize",
- "alt",
+ "from",
+ "to",
],
"properties": {
- "thumb": {
- "type": "string",
- "format": "uri",
- "description":
- "Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View.",
- },
- "fullsize": {
+ "from": {
+ "description": "The DID of who this notification comes from.",
"type": "string",
- "format": "uri",
- "description":
- "Fully-qualified URL where a large version of the image can be fetched. May or may not be the exact original blob. For example, CDN location provided by the App View.",
+ "format": "did",
},
- "alt": {
+ "to": {
+ "description": "The DID of who this notification should go to.",
"type": "string",
- "description":
- "Alt text description of the image, for accessibility.",
- },
- "aspectRatio": {
- "type": "ref",
- "ref": "lex:app.bsky.embed.defs#aspectRatio",
+ "format": "did",
},
},
},
},
},
- "AppBskyEmbedRecordWithMedia": {
+ "AppBskyContactSendNotification": {
"lexicon": 1,
- "id": "app.bsky.embed.recordWithMedia",
- "description":
- "A representation of a record embedded in a Bluesky record (eg, a post), alongside other compatible embeds. For example, a quote post and image, or a quote post and external URL card.",
+ "id": "app.bsky.contact.sendNotification",
"defs": {
"main": {
- "type": "object",
- "required": [
- "record",
- "media",
- ],
- "properties": {
- "record": {
- "type": "ref",
- "ref": "lex:app.bsky.embed.record",
- },
- "media": {
- "type": "union",
- "refs": [
- "lex:app.bsky.embed.images",
- "lex:app.bsky.embed.video",
- "lex:app.bsky.embed.external",
+ "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",
+ },
+ },
},
},
- },
- "view": {
- "type": "object",
- "required": [
- "record",
- "media",
- ],
- "properties": {
- "record": {
- "type": "ref",
- "ref": "lex:app.bsky.embed.record#view",
- },
- "media": {
- "type": "union",
- "refs": [
- "lex:app.bsky.embed.images#view",
- "lex:app.bsky.embed.video#view",
- "lex:app.bsky.embed.external#view",
- ],
+ "output": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "properties": {},
},
},
},
},
},
- "AppBskyEmbedVideo": {
+ "AppBskyContactGetSyncStatus": {
"lexicon": 1,
- "id": "app.bsky.embed.video",
- "description": "A video embedded in a Bluesky record (eg, a post).",
+ "id": "app.bsky.contact.getSyncStatus",
"defs": {
"main": {
- "type": "object",
- "required": [
- "video",
- ],
- "properties": {
- "video": {
- "type": "blob",
- "description":
- "The mp4 video file. May be up to 100mb, formerly limited to 50mb.",
- "accept": [
- "video/mp4",
- ],
- "maxSize": 100000000,
- },
- "captions": {
- "type": "array",
- "items": {
- "type": "ref",
- "ref": "lex:app.bsky.embed.video#caption",
+ "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": "lex:app.bsky.contact.defs#syncStatus",
+ },
},
- "maxLength": 20,
},
- "alt": {
- "type": "string",
- "description":
- "Alt text description of the video, for accessibility.",
- "maxGraphemes": 1000,
- "maxLength": 10000,
+ },
+ "errors": [
+ {
+ "name": "InvalidDid",
},
- "aspectRatio": {
- "type": "ref",
- "ref": "lex:app.bsky.embed.defs#aspectRatio",
+ {
+ "name": "InternalError",
},
- },
- },
- "caption": {
- "type": "object",
- "required": [
- "lang",
- "file",
],
- "properties": {
- "lang": {
- "type": "string",
- "format": "language",
- },
- "file": {
- "type": "blob",
- "accept": [
- "text/vtt",
+ },
+ },
+ },
+ "AppBskyContactStartPhoneVerification": {
+ "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",
],
- "maxSize": 20000,
+ "properties": {
+ "phone": {
+ "description": "The phone number to receive the code via SMS.",
+ "type": "string",
+ },
+ },
},
},
- },
- "view": {
- "type": "object",
- "required": [
- "cid",
- "playlist",
- ],
- "properties": {
- "cid": {
- "type": "string",
- "format": "cid",
+ "output": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "properties": {},
},
- "playlist": {
- "type": "string",
- "format": "uri",
+ },
+ "errors": [
+ {
+ "name": "RateLimitExceeded",
},
- "thumbnail": {
- "type": "string",
- "format": "uri",
+ {
+ "name": "InvalidDid",
},
- "alt": {
- "type": "string",
- "maxGraphemes": 1000,
- "maxLength": 10000,
+ {
+ "name": "InvalidPhone",
},
- "aspectRatio": {
- "type": "ref",
- "ref": "lex:app.bsky.embed.defs#aspectRatio",
+ {
+ "name": "InternalError",
},
- },
+ ],
},
},
},
- "AppBskyEmbedExternal": {
+ "AppBskyContactGetMatches": {
"lexicon": 1,
- "id": "app.bsky.embed.external",
+ "id": "app.bsky.contact.getMatches",
"defs": {
"main": {
- "type": "object",
+ "type": "query",
"description":
- "A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post).",
- "required": [
- "external",
- ],
- "properties": {
- "external": {
- "type": "ref",
- "ref": "lex:app.bsky.embed.external#external",
+ "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",
+ },
},
},
- },
- "external": {
- "type": "object",
- "required": [
- "uri",
- "title",
- "description",
- ],
- "properties": {
- "uri": {
- "type": "string",
- "format": "uri",
- },
- "title": {
- "type": "string",
- },
- "description": {
- "type": "string",
- },
- "thumb": {
- "type": "blob",
- "accept": [
- "image/*",
+ "output": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "required": [
+ "matches",
],
- "maxSize": 1000000,
+ "properties": {
+ "cursor": {
+ "type": "string",
+ },
+ "matches": {
+ "type": "array",
+ "items": {
+ "type": "ref",
+ "ref": "lex:app.bsky.actor.defs#profileView",
+ },
+ },
+ },
},
},
- },
- "view": {
- "type": "object",
- "required": [
- "external",
- ],
- "properties": {
- "external": {
- "type": "ref",
- "ref": "lex:app.bsky.embed.external#viewExternal",
+ "errors": [
+ {
+ "name": "InvalidDid",
},
- },
- },
- "viewExternal": {
- "type": "object",
- "required": [
- "uri",
- "title",
- "description",
- ],
- "properties": {
- "uri": {
- "type": "string",
- "format": "uri",
+ {
+ "name": "InvalidLimit",
},
- "title": {
- "type": "string",
+ {
+ "name": "InvalidCursor",
},
- "description": {
- "type": "string",
- },
- "thumb": {
- "type": "string",
- "format": "uri",
- },
- },
- },
- },
- },
- "AppBskyNotificationDefs": {
- "lexicon": 1,
- "id": "app.bsky.notification.defs",
- "defs": {
- "recordDeleted": {
- "type": "object",
- "properties": {},
- },
- "chatPreference": {
- "type": "object",
- "required": [
- "include",
- "push",
- ],
- "properties": {
- "include": {
- "type": "string",
- "knownValues": [
- "all",
- "accepted",
- ],
- },
- "push": {
- "type": "boolean",
- },
- },
- },
- "filterablePreference": {
- "type": "object",
- "required": [
- "include",
- "list",
- "push",
- ],
- "properties": {
- "include": {
- "type": "string",
- "knownValues": [
- "all",
- "follows",
- ],
- },
- "list": {
- "type": "boolean",
- },
- "push": {
- "type": "boolean",
- },
- },
- },
- "preference": {
- "type": "object",
- "required": [
- "list",
- "push",
- ],
- "properties": {
- "list": {
- "type": "boolean",
- },
- "push": {
- "type": "boolean",
- },
- },
- },
- "preferences": {
- "type": "object",
- "required": [
- "chat",
- "follow",
- "like",
- "likeViaRepost",
- "mention",
- "quote",
- "reply",
- "repost",
- "repostViaRepost",
- "starterpackJoined",
- "subscribedPost",
- "unverified",
- "verified",
- ],
- "properties": {
- "chat": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#chatPreference",
- },
- "follow": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#filterablePreference",
- },
- "like": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#filterablePreference",
- },
- "likeViaRepost": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#filterablePreference",
- },
- "mention": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#filterablePreference",
- },
- "quote": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#filterablePreference",
- },
- "reply": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#filterablePreference",
- },
- "repost": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#filterablePreference",
- },
- "repostViaRepost": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#filterablePreference",
- },
- "starterpackJoined": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#preference",
- },
- "subscribedPost": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#preference",
- },
- "unverified": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#preference",
- },
- "verified": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#preference",
- },
- },
- },
- "activitySubscription": {
- "type": "object",
- "required": [
- "post",
- "reply",
- ],
- "properties": {
- "post": {
- "type": "boolean",
- },
- "reply": {
- "type": "boolean",
+ {
+ "name": "InternalError",
},
- },
- },
- "subjectActivitySubscription": {
- "description":
- "Object used to store activity subscription data in stash.",
- "type": "object",
- "required": [
- "subject",
- "activitySubscription",
],
- "properties": {
- "subject": {
- "type": "string",
- "format": "did",
- },
- "activitySubscription": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#activitySubscription",
- },
- },
},
},
},
- "AppBskyNotificationRegisterPush": {
+ "AppBskyContactImportContacts": {
"lexicon": 1,
- "id": "app.bsky.notification.registerPush",
+ "id": "app.bsky.contact.importContacts",
"defs": {
"main": {
"type": "procedure",
"description":
- "Register to receive push notifications, via a specified service, for the requesting account. Requires auth.",
+ "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": [
- "serviceDid",
"token",
- "platform",
- "appId",
+ "contacts",
],
"properties": {
- "serviceDid": {
- "type": "string",
- "format": "did",
- },
"token": {
+ "description":
+ "JWT to authenticate the call. Use the JWT received as a response to the call to `app.bsky.contact.verifyPhone`.",
"type": "string",
},
- "platform": {
- "type": "string",
- "knownValues": [
- "ios",
- "android",
- "web",
- ],
- },
- "appId": {
- "type": "string",
- },
- "ageRestricted": {
- "type": "boolean",
- "description": "Set to true when the actor is age restricted",
+ "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,
},
},
},
},
- },
- },
- },
- "AppBskyNotificationPutPreferences": {
- "lexicon": 1,
- "id": "app.bsky.notification.putPreferences",
- "defs": {
- "main": {
- "type": "procedure",
- "description":
- "Set notification-related preferences for an account. Requires auth.",
- "input": {
+ "output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": [
- "priority",
+ "matchesAndContactIndexes",
],
"properties": {
- "priority": {
- "type": "boolean",
+ "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": "lex:app.bsky.contact.defs#matchAndContactIndex",
+ },
},
},
},
},
+ "errors": [
+ {
+ "name": "InvalidDid",
+ },
+ {
+ "name": "InvalidContacts",
+ },
+ {
+ "name": "TooManyContacts",
+ },
+ {
+ "name": "InvalidToken",
+ },
+ {
+ "name": "InternalError",
+ },
+ ],
},
},
},
- "AppBskyNotificationPutActivitySubscription": {
+ "AppBskyContactDismissMatch": {
"lexicon": 1,
- "id": "app.bsky.notification.putActivitySubscription",
+ "id": "app.bsky.contact.dismissMatch",
"defs": {
"main": {
"type": "procedure",
"description":
- "Puts an activity subscription entry. The key should be omitted for creation and provided for updates. Requires auth.",
+ "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",
- "activitySubscription",
],
"properties": {
"subject": {
+ "description": "The subject's DID to dismiss the match with.",
"type": "string",
"format": "did",
},
- "activitySubscription": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#activitySubscription",
- },
},
},
},
@@ -6639,118 +6516,79 @@ export const schemaDict = {
"encoding": "application/json",
"schema": {
"type": "object",
- "required": [
- "subject",
- ],
- "properties": {
- "subject": {
- "type": "string",
- "format": "did",
- },
- "activitySubscription": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#activitySubscription",
- },
- },
+ "properties": {},
},
},
+ "errors": [
+ {
+ "name": "InvalidDid",
+ },
+ {
+ "name": "InternalError",
+ },
+ ],
},
},
},
- "AppBskyNotificationDeclaration": {
+ "AppBskyContactRemoveData": {
"lexicon": 1,
- "id": "app.bsky.notification.declaration",
+ "id": "app.bsky.contact.removeData",
"defs": {
"main": {
- "type": "record",
+ "type": "procedure",
"description":
- "A declaration of the user's choices related to notifications that can be produced by them.",
- "key": "literal:self",
- "record": {
- "type": "object",
- "required": [
- "allowSubscriptions",
- ],
- "properties": {
- "allowSubscriptions": {
- "type": "string",
- "description":
- "A declaration of the user's preference for allowing activity subscriptions from other users. Absence of a record implies 'followers'.",
- "knownValues": [
- "followers",
- "mutuals",
- "none",
- ],
- },
+ "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",
+ },
+ ],
},
},
},
- "AppBskyNotificationPutPreferencesV2": {
+ "AppBskyContactVerifyPhone": {
"lexicon": 1,
- "id": "app.bsky.notification.putPreferencesV2",
+ "id": "app.bsky.contact.verifyPhone",
"defs": {
"main": {
"type": "procedure",
"description":
- "Set notification-related preferences for an account. Requires auth.",
+ "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": {
- "chat": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#chatPreference",
- },
- "follow": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#filterablePreference",
- },
- "like": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#filterablePreference",
- },
- "likeViaRepost": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#filterablePreference",
- },
- "mention": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#filterablePreference",
- },
- "quote": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#filterablePreference",
- },
- "reply": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#filterablePreference",
- },
- "repost": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#filterablePreference",
- },
- "repostViaRepost": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#filterablePreference",
- },
- "starterpackJoined": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#preference",
- },
- "subscribedPost": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#preference",
- },
- "unverified": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#preference",
+ "phone": {
+ "description":
+ "The phone number to verify. Should be the same as the one passed to `app.bsky.contact.startPhoneVerification`.",
+ "type": "string",
},
- "verified": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#preference",
+ "code": {
+ "description":
+ "The code received via SMS as a result of the call to `app.bsky.contact.startPhoneVerification`.",
+ "type": "string",
},
},
},
@@ -6760,53 +6598,157 @@ export const schemaDict = {
"schema": {
"type": "object",
"required": [
- "preferences",
+ "token",
],
"properties": {
- "preferences": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#preferences",
+ "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",
+ },
+ ],
+ },
+ },
+ },
+ "AppBskyAuthManageNotifications": {
+ "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",
+ ],
+ },
+ ],
+ },
+ },
+ },
+ "AppBskyBookmarkDefs": {
+ "lexicon": 1,
+ "id": "app.bsky.bookmark.defs",
+ "defs": {
+ "bookmark": {
+ "description": "Object used to store bookmark data in stash.",
+ "type": "object",
+ "required": [
+ "subject",
+ ],
+ "properties": {
+ "subject": {
+ "description":
+ "A strong ref to the record to be bookmarked. Currently, only `app.bsky.feed.post` records are supported.",
+ "type": "ref",
+ "ref": "lex:com.atproto.repo.strongRef",
+ },
+ },
+ },
+ "bookmarkView": {
+ "type": "object",
+ "required": [
+ "subject",
+ "item",
+ ],
+ "properties": {
+ "subject": {
+ "description": "A strong ref to the bookmarked record.",
+ "type": "ref",
+ "ref": "lex:com.atproto.repo.strongRef",
+ },
+ "createdAt": {
+ "type": "string",
+ "format": "datetime",
+ },
+ "item": {
+ "type": "union",
+ "refs": [
+ "lex:app.bsky.feed.defs#blockedPost",
+ "lex:app.bsky.feed.defs#notFoundPost",
+ "lex:app.bsky.feed.defs#postView",
+ ],
+ },
+ },
},
},
},
- "AppBskyNotificationUpdateSeen": {
+ "AppBskyBookmarkDeleteBookmark": {
"lexicon": 1,
- "id": "app.bsky.notification.updateSeen",
+ "id": "app.bsky.bookmark.deleteBookmark",
"defs": {
"main": {
"type": "procedure",
"description":
- "Notify server that the requesting account has seen notifications. Requires auth.",
+ "Deletes a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": [
- "seenAt",
+ "uri",
],
"properties": {
- "seenAt": {
+ "uri": {
"type": "string",
- "format": "datetime",
+ "format": "at-uri",
},
},
},
},
+ "errors": [
+ {
+ "name": "UnsupportedCollection",
+ "description":
+ "The URI to be bookmarked is for an unsupported collection.",
+ },
+ ],
},
},
},
- "AppBskyNotificationListActivitySubscriptions": {
+ "AppBskyBookmarkGetBookmarks": {
"lexicon": 1,
- "id": "app.bsky.notification.listActivitySubscriptions",
+ "id": "app.bsky.bookmark.getBookmarks",
"defs": {
"main": {
"type": "query",
"description":
- "Enumerate all accounts to which the requesting account is subscribed to receive notifications for. Requires auth.",
+ "Gets views of records bookmarked by the authenticated user. Requires authentication.",
"parameters": {
"type": "params",
"properties": {
@@ -6826,17 +6768,17 @@ export const schemaDict = {
"schema": {
"type": "object",
"required": [
- "subscriptions",
+ "bookmarks",
],
"properties": {
"cursor": {
"type": "string",
},
- "subscriptions": {
+ "bookmarks": {
"type": "array",
"items": {
"type": "ref",
- "ref": "lex:app.bsky.actor.defs#profileView",
+ "ref": "lex:app.bsky.bookmark.defs#bookmarkView",
},
},
},
@@ -6845,156 +6787,115 @@ export const schemaDict = {
},
},
},
- "AppBskyNotificationUnregisterPush": {
+ "AppBskyBookmarkCreateBookmark": {
"lexicon": 1,
- "id": "app.bsky.notification.unregisterPush",
+ "id": "app.bsky.bookmark.createBookmark",
"defs": {
"main": {
"type": "procedure",
"description":
- "The inverse of registerPush - inform a specified service that push notifications should no longer be sent to the given token for the requesting account. Requires auth.",
+ "Creates a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": [
- "serviceDid",
- "token",
- "platform",
- "appId",
+ "uri",
+ "cid",
],
"properties": {
- "serviceDid": {
- "type": "string",
- "format": "did",
- },
- "token": {
- "type": "string",
- },
- "platform": {
+ "uri": {
"type": "string",
- "knownValues": [
- "ios",
- "android",
- "web",
- ],
+ "format": "at-uri",
},
- "appId": {
+ "cid": {
"type": "string",
+ "format": "cid",
},
},
},
},
- },
+ "errors": [
+ {
+ "name": "UnsupportedCollection",
+ "description":
+ "The URI to be bookmarked is for an unsupported collection.",
+ },
+ ],
+ },
},
},
- "AppBskyNotificationGetPreferences": {
+ "AppBskyEmbedDefs": {
"lexicon": 1,
- "id": "app.bsky.notification.getPreferences",
+ "id": "app.bsky.embed.defs",
"defs": {
- "main": {
- "type": "query",
+ "aspectRatio": {
+ "type": "object",
"description":
- "Get notification-related preferences for an account. Requires auth.",
- "parameters": {
- "type": "params",
- "properties": {},
- },
- "output": {
- "encoding": "application/json",
- "schema": {
- "type": "object",
- "required": [
- "preferences",
- ],
- "properties": {
- "preferences": {
- "type": "ref",
- "ref": "lex:app.bsky.notification.defs#preferences",
- },
- },
+ "width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit.",
+ "required": [
+ "width",
+ "height",
+ ],
+ "properties": {
+ "width": {
+ "type": "integer",
+ "minimum": 1,
+ },
+ "height": {
+ "type": "integer",
+ "minimum": 1,
},
},
},
},
},
- "AppBskyNotificationListNotifications": {
+ "AppBskyEmbedRecord": {
"lexicon": 1,
- "id": "app.bsky.notification.listNotifications",
+ "id": "app.bsky.embed.record",
+ "description":
+ "A representation of a record embedded in a Bluesky record (eg, a post). For example, a quote-post, or sharing a feed generator record.",
"defs": {
"main": {
- "type": "query",
- "description":
- "Enumerate notifications for the requesting account. Requires auth.",
- "parameters": {
- "type": "params",
- "properties": {
- "reasons": {
- "description": "Notification reasons to include in response.",
- "type": "array",
- "items": {
- "type": "string",
- "description":
- "A reason that matches the reason property of #notification.",
- },
- },
- "limit": {
- "type": "integer",
- "minimum": 1,
- "maximum": 100,
- "default": 50,
- },
- "priority": {
- "type": "boolean",
- },
- "cursor": {
- "type": "string",
- },
- "seenAt": {
- "type": "string",
- "format": "datetime",
- },
+ "type": "object",
+ "required": [
+ "record",
+ ],
+ "properties": {
+ "record": {
+ "type": "ref",
+ "ref": "lex:com.atproto.repo.strongRef",
},
},
- "output": {
- "encoding": "application/json",
- "schema": {
- "type": "object",
- "required": [
- "notifications",
+ },
+ "view": {
+ "type": "object",
+ "required": [
+ "record",
+ ],
+ "properties": {
+ "record": {
+ "type": "union",
+ "refs": [
+ "lex:app.bsky.embed.record#viewRecord",
+ "lex:app.bsky.embed.record#viewNotFound",
+ "lex:app.bsky.embed.record#viewBlocked",
+ "lex:app.bsky.embed.record#viewDetached",
+ "lex:app.bsky.feed.defs#generatorView",
+ "lex:app.bsky.graph.defs#listView",
+ "lex:app.bsky.labeler.defs#labelerView",
+ "lex:app.bsky.graph.defs#starterPackViewBasic",
],
- "properties": {
- "cursor": {
- "type": "string",
- },
- "notifications": {
- "type": "array",
- "items": {
- "type": "ref",
- "ref":
- "lex:app.bsky.notification.listNotifications#notification",
- },
- },
- "priority": {
- "type": "boolean",
- },
- "seenAt": {
- "type": "string",
- "format": "datetime",
- },
- },
},
},
},
- "notification": {
+ "viewRecord": {
"type": "object",
"required": [
"uri",
"cid",
"author",
- "reason",
- "record",
- "isRead",
+ "value",
"indexedAt",
],
"properties": {
@@ -7008,40 +6909,11 @@ export const schemaDict = {
},
"author": {
"type": "ref",
- "ref": "lex:app.bsky.actor.defs#profileView",
- },
- "reason": {
- "type": "string",
- "description":
- "The reason why this notification was delivered - e.g. your post was liked, or you received a new follower.",
- "knownValues": [
- "like",
- "repost",
- "follow",
- "mention",
- "reply",
- "quote",
- "starterpack-joined",
- "verified",
- "unverified",
- "like-via-repost",
- "repost-via-repost",
- "subscribed-post",
- ],
- },
- "reasonSubject": {
- "type": "string",
- "format": "at-uri",
+ "ref": "lex:app.bsky.actor.defs#profileViewBasic",
},
- "record": {
+ "value": {
"type": "unknown",
- },
- "isRead": {
- "type": "boolean",
- },
- "indexedAt": {
- "type": "string",
- "format": "datetime",
+ "description": "The record data itself.",
},
"labels": {
"type": "array",
@@ -7050,472 +6922,2219 @@ export const schemaDict = {
"ref": "lex:com.atproto.label.defs#label",
},
},
- },
- },
- },
- },
- "AppBskyNotificationGetUnreadCount": {
- "lexicon": 1,
- "id": "app.bsky.notification.getUnreadCount",
- "defs": {
- "main": {
- "type": "query",
- "description":
- "Count the number of unread notifications for the requesting account. Requires auth.",
- "parameters": {
- "type": "params",
- "properties": {
- "priority": {
- "type": "boolean",
- },
- "seenAt": {
- "type": "string",
- "format": "datetime",
+ "replyCount": {
+ "type": "integer",
+ },
+ "repostCount": {
+ "type": "integer",
+ },
+ "likeCount": {
+ "type": "integer",
+ },
+ "quoteCount": {
+ "type": "integer",
+ },
+ "embeds": {
+ "type": "array",
+ "items": {
+ "type": "union",
+ "refs": [
+ "lex:app.bsky.embed.images#view",
+ "lex:app.bsky.embed.video#view",
+ "lex:app.bsky.embed.external#view",
+ "lex:app.bsky.embed.record#view",
+ "lex:app.bsky.embed.recordWithMedia#view",
+ ],
},
},
+ "indexedAt": {
+ "type": "string",
+ "format": "datetime",
+ },
},
- "output": {
- "encoding": "application/json",
- "schema": {
- "type": "object",
- "required": [
- "count",
- ],
- "properties": {
- "count": {
- "type": "integer",
- },
- },
+ },
+ "viewNotFound": {
+ "type": "object",
+ "required": [
+ "uri",
+ "notFound",
+ ],
+ "properties": {
+ "uri": {
+ "type": "string",
+ "format": "at-uri",
+ },
+ "notFound": {
+ "type": "boolean",
+ "const": true,
},
},
},
- },
- },
- "AppBskyUnspeccedGetSuggestedFeedsSkeleton": {
- "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",
- },
- },
- },
- },
- },
- },
- },
- },
- "AppBskyUnspeccedSearchStarterPacksSkeleton": {
- "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":
- "lex:app.bsky.unspecced.defs#skeletonSearchStarterPack",
- },
- },
- },
- },
- },
- "errors": [
- {
- "name": "BadQueryString",
- },
- ],
- },
- },
- },
- "AppBskyUnspeccedDefs": {
- "lexicon": 1,
- "id": "app.bsky.unspecced.defs",
- "defs": {
- "skeletonSearchPost": {
+ "viewBlocked": {
"type": "object",
"required": [
"uri",
+ "blocked",
+ "author",
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri",
},
+ "blocked": {
+ "type": "boolean",
+ "const": true,
+ },
+ "author": {
+ "type": "ref",
+ "ref": "lex:app.bsky.feed.defs#blockedAuthor",
+ },
},
},
- "skeletonSearchActor": {
+ "viewDetached": {
"type": "object",
"required": [
- "did",
+ "uri",
+ "detached",
],
"properties": {
- "did": {
+ "uri": {
"type": "string",
- "format": "did",
+ "format": "at-uri",
+ },
+ "detached": {
+ "type": "boolean",
+ "const": true,
},
},
},
- "skeletonSearchStarterPack": {
+ },
+ },
+ "AppBskyEmbedImages": {
+ "lexicon": 1,
+ "id": "app.bsky.embed.images",
+ "description": "A set of images embedded in a Bluesky record (eg, a post).",
+ "defs": {
+ "main": {
"type": "object",
"required": [
- "uri",
+ "images",
],
"properties": {
- "uri": {
- "type": "string",
- "format": "at-uri",
+ "images": {
+ "type": "array",
+ "items": {
+ "type": "ref",
+ "ref": "lex:app.bsky.embed.images#image",
+ },
+ "maxLength": 4,
},
},
},
- "trendingTopic": {
+ "image": {
"type": "object",
"required": [
- "topic",
- "link",
+ "image",
+ "alt",
],
"properties": {
- "topic": {
- "type": "string",
- },
- "displayName": {
- "type": "string",
+ "image": {
+ "type": "blob",
+ "description":
+ "The raw image file. May be up to 2 MB, formerly limited to 1 MB.",
+ "accept": [
+ "image/*",
+ ],
+ "maxSize": 2000000,
},
- "description": {
+ "alt": {
"type": "string",
+ "description":
+ "Alt text description of the image, for accessibility.",
},
- "link": {
- "type": "string",
+ "aspectRatio": {
+ "type": "ref",
+ "ref": "lex:app.bsky.embed.defs#aspectRatio",
},
},
},
- "skeletonTrend": {
+ "view": {
"type": "object",
"required": [
- "topic",
- "displayName",
- "link",
- "startedAt",
- "postCount",
- "dids",
+ "images",
],
"properties": {
- "topic": {
- "type": "string",
- },
- "displayName": {
- "type": "string",
- },
- "link": {
- "type": "string",
- },
- "startedAt": {
- "type": "string",
- "format": "datetime",
- },
- "postCount": {
- "type": "integer",
- },
- "status": {
- "type": "string",
- "knownValues": [
- "hot",
- ],
- },
- "category": {
- "type": "string",
- },
- "dids": {
+ "images": {
"type": "array",
"items": {
- "type": "string",
- "format": "did",
+ "type": "ref",
+ "ref": "lex:app.bsky.embed.images#viewImage",
},
+ "maxLength": 4,
},
},
},
- "trendView": {
+ "viewImage": {
"type": "object",
"required": [
- "topic",
- "displayName",
- "link",
- "startedAt",
- "postCount",
- "actors",
+ "thumb",
+ "fullsize",
+ "alt",
],
"properties": {
- "topic": {
+ "thumb": {
"type": "string",
+ "format": "uri",
+ "description":
+ "Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View.",
},
- "displayName": {
+ "fullsize": {
"type": "string",
+ "format": "uri",
+ "description":
+ "Fully-qualified URL where a large version of the image can be fetched. May or may not be the exact original blob. For example, CDN location provided by the App View.",
},
- "link": {
+ "alt": {
"type": "string",
+ "description":
+ "Alt text description of the image, for accessibility.",
},
- "startedAt": {
- "type": "string",
- "format": "datetime",
+ "aspectRatio": {
+ "type": "ref",
+ "ref": "lex:app.bsky.embed.defs#aspectRatio",
},
- "postCount": {
- "type": "integer",
+ },
+ },
+ },
+ },
+ "AppBskyEmbedRecordWithMedia": {
+ "lexicon": 1,
+ "id": "app.bsky.embed.recordWithMedia",
+ "description":
+ "A representation of a record embedded in a Bluesky record (eg, a post), alongside other compatible embeds. For example, a quote post and image, or a quote post and external URL card.",
+ "defs": {
+ "main": {
+ "type": "object",
+ "required": [
+ "record",
+ "media",
+ ],
+ "properties": {
+ "record": {
+ "type": "ref",
+ "ref": "lex:app.bsky.embed.record",
},
- "status": {
- "type": "string",
- "knownValues": [
- "hot",
+ "media": {
+ "type": "union",
+ "refs": [
+ "lex:app.bsky.embed.images",
+ "lex:app.bsky.embed.video",
+ "lex:app.bsky.embed.external",
],
},
- "category": {
- "type": "string",
- },
- "actors": {
- "type": "array",
- "items": {
- "type": "ref",
- "ref": "lex:app.bsky.actor.defs#profileViewBasic",
- },
- },
},
},
- "threadItemPost": {
+ "view": {
"type": "object",
"required": [
- "post",
- "moreParents",
- "moreReplies",
- "opThread",
- "hiddenByThreadgate",
- "mutedByViewer",
+ "record",
+ "media",
],
"properties": {
- "post": {
+ "record": {
"type": "ref",
- "ref": "lex:app.bsky.feed.defs#postView",
+ "ref": "lex:app.bsky.embed.record#view",
},
- "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.",
+ "media": {
+ "type": "union",
+ "refs": [
+ "lex:app.bsky.embed.images#view",
+ "lex:app.bsky.embed.video#view",
+ "lex:app.bsky.embed.external#view",
+ ],
},
- "moreReplies": {
- "type": "integer",
+ },
+ },
+ },
+ },
+ "AppBskyEmbedVideo": {
+ "lexicon": 1,
+ "id": "app.bsky.embed.video",
+ "description": "A video embedded in a Bluesky record (eg, a post).",
+ "defs": {
+ "main": {
+ "type": "object",
+ "required": [
+ "video",
+ ],
+ "properties": {
+ "video": {
+ "type": "blob",
"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.",
+ "The mp4 video file. May be up to 100mb, formerly limited to 50mb.",
+ "accept": [
+ "video/mp4",
+ ],
+ "maxSize": 100000000,
},
- "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.",
+ "captions": {
+ "type": "array",
+ "items": {
+ "type": "ref",
+ "ref": "lex:app.bsky.embed.video#caption",
+ },
+ "maxLength": 20,
},
- "hiddenByThreadgate": {
- "type": "boolean",
+ "alt": {
+ "type": "string",
"description":
- "The threadgate created by the author indicates this post as a reply to be hidden for everyone consuming the thread.",
+ "Alt text description of the video, for accessibility.",
+ "maxGraphemes": 1000,
+ "maxLength": 10000,
},
- "mutedByViewer": {
- "type": "boolean",
+ "aspectRatio": {
+ "type": "ref",
+ "ref": "lex:app.bsky.embed.defs#aspectRatio",
+ },
+ "presentation": {
+ "type": "string",
"description":
- "This is by an account muted by the viewer requesting it.",
+ "A hint to the client about how to present the video.",
+ "knownValues": [
+ "default",
+ "gif",
+ ],
},
},
},
- "threadItemNoUnauthenticated": {
- "type": "object",
- "properties": {},
- },
- "threadItemNotFound": {
- "type": "object",
- "properties": {},
- },
- "threadItemBlocked": {
+ "caption": {
"type": "object",
"required": [
- "author",
+ "lang",
+ "file",
],
"properties": {
- "author": {
- "type": "ref",
- "ref": "lex:app.bsky.feed.defs#blockedAuthor",
+ "lang": {
+ "type": "string",
+ "format": "language",
+ },
+ "file": {
+ "type": "blob",
+ "accept": [
+ "text/vtt",
+ ],
+ "maxSize": 20000,
},
},
},
- "ageAssuranceState": {
+ "view": {
"type": "object",
- "description":
- "The computed state of the age assurance process, returned to the user in question on certain authenticated requests.",
"required": [
- "status",
+ "cid",
+ "playlist",
],
"properties": {
- "lastInitiatedAt": {
+ "cid": {
"type": "string",
- "format": "datetime",
- "description": "The timestamp when this state was last updated.",
+ "format": "cid",
},
- "status": {
+ "playlist": {
"type": "string",
- "description": "The status of the age assurance process.",
+ "format": "uri",
+ },
+ "thumbnail": {
+ "type": "string",
+ "format": "uri",
+ },
+ "alt": {
+ "type": "string",
+ "maxGraphemes": 1000,
+ "maxLength": 10000,
+ },
+ "aspectRatio": {
+ "type": "ref",
+ "ref": "lex:app.bsky.embed.defs#aspectRatio",
+ },
+ "presentation": {
+ "type": "string",
+ "description":
+ "A hint to the client about how to present the video.",
"knownValues": [
- "unknown",
- "pending",
- "assured",
- "blocked",
+ "default",
+ "gif",
],
},
},
},
- "ageAssuranceEvent": {
+ },
+ },
+ "AppBskyEmbedExternal": {
+ "lexicon": 1,
+ "id": "app.bsky.embed.external",
+ "defs": {
+ "main": {
"type": "object",
- "description": "Object used to store age assurance data in stash.",
+ "description":
+ "A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post).",
"required": [
- "createdAt",
- "status",
- "attemptId",
+ "external",
],
"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",
- ],
+ "external": {
+ "type": "ref",
+ "ref": "lex:app.bsky.embed.external#external",
},
- "attemptId": {
+ },
+ },
+ "external": {
+ "type": "object",
+ "required": [
+ "uri",
+ "title",
+ "description",
+ ],
+ "properties": {
+ "uri": {
"type": "string",
- "description":
- "The unique identifier for this instance of the age assurance flow, in UUID format.",
+ "format": "uri",
},
- "email": {
+ "title": {
"type": "string",
- "description": "The email used for AA.",
},
- "initIp": {
+ "description": {
"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.",
+ "thumb": {
+ "type": "blob",
+ "accept": [
+ "image/*",
+ ],
+ "maxSize": 1000000,
},
- "completeIp": {
- "type": "string",
- "description": "The IP address used when completing the AA flow.",
+ },
+ },
+ "view": {
+ "type": "object",
+ "required": [
+ "external",
+ ],
+ "properties": {
+ "external": {
+ "type": "ref",
+ "ref": "lex:app.bsky.embed.external#viewExternal",
+ },
+ },
+ },
+ "viewExternal": {
+ "type": "object",
+ "required": [
+ "uri",
+ "title",
+ "description",
+ ],
+ "properties": {
+ "uri": {
+ "type": "string",
+ "format": "uri",
+ },
+ "title": {
+ "type": "string",
+ },
+ "description": {
+ "type": "string",
+ },
+ "thumb": {
+ "type": "string",
+ "format": "uri",
+ },
+ },
+ },
+ },
+ },
+ "AppBskyAuthDeleteContent": {
+ "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",
+ ],
+ },
+ ],
+ },
+ },
+ },
+ "AppBskyAuthCreatePosts": {
+ "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",
+ ],
+ },
+ ],
+ },
+ },
+ },
+ "AppBskyNotificationDefs": {
+ "lexicon": 1,
+ "id": "app.bsky.notification.defs",
+ "defs": {
+ "recordDeleted": {
+ "type": "object",
+ "properties": {},
+ },
+ "chatPreference": {
+ "type": "object",
+ "required": [
+ "include",
+ "push",
+ ],
+ "properties": {
+ "include": {
+ "type": "string",
+ "knownValues": [
+ "all",
+ "accepted",
+ ],
+ },
+ "push": {
+ "type": "boolean",
+ },
+ },
+ },
+ "filterablePreference": {
+ "type": "object",
+ "required": [
+ "include",
+ "list",
+ "push",
+ ],
+ "properties": {
+ "include": {
+ "type": "string",
+ "knownValues": [
+ "all",
+ "follows",
+ ],
+ },
+ "list": {
+ "type": "boolean",
+ },
+ "push": {
+ "type": "boolean",
+ },
+ },
+ },
+ "preference": {
+ "type": "object",
+ "required": [
+ "list",
+ "push",
+ ],
+ "properties": {
+ "list": {
+ "type": "boolean",
+ },
+ "push": {
+ "type": "boolean",
+ },
+ },
+ },
+ "preferences": {
+ "type": "object",
+ "required": [
+ "chat",
+ "follow",
+ "like",
+ "likeViaRepost",
+ "mention",
+ "quote",
+ "reply",
+ "repost",
+ "repostViaRepost",
+ "starterpackJoined",
+ "subscribedPost",
+ "unverified",
+ "verified",
+ ],
+ "properties": {
+ "chat": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#chatPreference",
+ },
+ "follow": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#filterablePreference",
+ },
+ "like": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#filterablePreference",
+ },
+ "likeViaRepost": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#filterablePreference",
+ },
+ "mention": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#filterablePreference",
+ },
+ "quote": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#filterablePreference",
+ },
+ "reply": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#filterablePreference",
+ },
+ "repost": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#filterablePreference",
+ },
+ "repostViaRepost": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#filterablePreference",
+ },
+ "starterpackJoined": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#preference",
+ },
+ "subscribedPost": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#preference",
+ },
+ "unverified": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#preference",
+ },
+ "verified": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#preference",
+ },
+ },
+ },
+ "activitySubscription": {
+ "type": "object",
+ "required": [
+ "post",
+ "reply",
+ ],
+ "properties": {
+ "post": {
+ "type": "boolean",
+ },
+ "reply": {
+ "type": "boolean",
+ },
+ },
+ },
+ "subjectActivitySubscription": {
+ "description":
+ "Object used to store activity subscription data in stash.",
+ "type": "object",
+ "required": [
+ "subject",
+ "activitySubscription",
+ ],
+ "properties": {
+ "subject": {
+ "type": "string",
+ "format": "did",
+ },
+ "activitySubscription": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#activitySubscription",
+ },
+ },
+ },
+ },
+ },
+ "AppBskyNotificationRegisterPush": {
+ "lexicon": 1,
+ "id": "app.bsky.notification.registerPush",
+ "defs": {
+ "main": {
+ "type": "procedure",
+ "description":
+ "Register to receive push notifications, via a specified service, for the requesting account. Requires auth.",
+ "input": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "required": [
+ "serviceDid",
+ "token",
+ "platform",
+ "appId",
+ ],
+ "properties": {
+ "serviceDid": {
+ "type": "string",
+ "format": "did",
+ },
+ "token": {
+ "type": "string",
+ },
+ "platform": {
+ "type": "string",
+ "knownValues": [
+ "ios",
+ "android",
+ "web",
+ ],
+ },
+ "appId": {
+ "type": "string",
+ },
+ "ageRestricted": {
+ "type": "boolean",
+ "description": "Set to true when the actor is age restricted",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyNotificationPutPreferences": {
+ "lexicon": 1,
+ "id": "app.bsky.notification.putPreferences",
+ "defs": {
+ "main": {
+ "type": "procedure",
+ "description":
+ "Set notification-related preferences for an account. Requires auth.",
+ "input": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "required": [
+ "priority",
+ ],
+ "properties": {
+ "priority": {
+ "type": "boolean",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyNotificationPutActivitySubscription": {
+ "lexicon": 1,
+ "id": "app.bsky.notification.putActivitySubscription",
+ "defs": {
+ "main": {
+ "type": "procedure",
+ "description":
+ "Puts an activity subscription entry. The key should be omitted for creation and provided for updates. Requires auth.",
+ "input": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "required": [
+ "subject",
+ "activitySubscription",
+ ],
+ "properties": {
+ "subject": {
+ "type": "string",
+ "format": "did",
+ },
+ "activitySubscription": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#activitySubscription",
+ },
+ },
+ },
+ },
+ "output": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "required": [
+ "subject",
+ ],
+ "properties": {
+ "subject": {
+ "type": "string",
+ "format": "did",
+ },
+ "activitySubscription": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#activitySubscription",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyNotificationDeclaration": {
+ "lexicon": 1,
+ "id": "app.bsky.notification.declaration",
+ "defs": {
+ "main": {
+ "type": "record",
+ "description":
+ "A declaration of the user's choices related to notifications that can be produced by them.",
+ "key": "literal:self",
+ "record": {
+ "type": "object",
+ "required": [
+ "allowSubscriptions",
+ ],
+ "properties": {
+ "allowSubscriptions": {
+ "type": "string",
+ "description":
+ "A declaration of the user's preference for allowing activity subscriptions from other users. Absence of a record implies 'followers'.",
+ "knownValues": [
+ "followers",
+ "mutuals",
+ "none",
+ ],
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyNotificationPutPreferencesV2": {
+ "lexicon": 1,
+ "id": "app.bsky.notification.putPreferencesV2",
+ "defs": {
+ "main": {
+ "type": "procedure",
+ "description":
+ "Set notification-related preferences for an account. Requires auth.",
+ "input": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "chat": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#chatPreference",
+ },
+ "follow": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#filterablePreference",
+ },
+ "like": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#filterablePreference",
+ },
+ "likeViaRepost": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#filterablePreference",
+ },
+ "mention": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#filterablePreference",
+ },
+ "quote": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#filterablePreference",
+ },
+ "reply": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#filterablePreference",
+ },
+ "repost": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#filterablePreference",
+ },
+ "repostViaRepost": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#filterablePreference",
+ },
+ "starterpackJoined": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#preference",
+ },
+ "subscribedPost": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#preference",
+ },
+ "unverified": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#preference",
+ },
+ "verified": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#preference",
+ },
+ },
+ },
+ },
+ "output": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "required": [
+ "preferences",
+ ],
+ "properties": {
+ "preferences": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#preferences",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyNotificationUpdateSeen": {
+ "lexicon": 1,
+ "id": "app.bsky.notification.updateSeen",
+ "defs": {
+ "main": {
+ "type": "procedure",
+ "description":
+ "Notify server that the requesting account has seen notifications. Requires auth.",
+ "input": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "required": [
+ "seenAt",
+ ],
+ "properties": {
+ "seenAt": {
+ "type": "string",
+ "format": "datetime",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyNotificationListActivitySubscriptions": {
+ "lexicon": 1,
+ "id": "app.bsky.notification.listActivitySubscriptions",
+ "defs": {
+ "main": {
+ "type": "query",
+ "description":
+ "Enumerate all accounts to which the requesting account is subscribed to receive notifications for. Requires auth.",
+ "parameters": {
+ "type": "params",
+ "properties": {
+ "limit": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 100,
+ "default": 50,
+ },
+ "cursor": {
+ "type": "string",
+ },
+ },
+ },
+ "output": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "required": [
+ "subscriptions",
+ ],
+ "properties": {
+ "cursor": {
+ "type": "string",
+ },
+ "subscriptions": {
+ "type": "array",
+ "items": {
+ "type": "ref",
+ "ref": "lex:app.bsky.actor.defs#profileView",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyNotificationUnregisterPush": {
+ "lexicon": 1,
+ "id": "app.bsky.notification.unregisterPush",
+ "defs": {
+ "main": {
+ "type": "procedure",
+ "description":
+ "The inverse of registerPush - inform a specified service that push notifications should no longer be sent to the given token for the requesting account. Requires auth.",
+ "input": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "required": [
+ "serviceDid",
+ "token",
+ "platform",
+ "appId",
+ ],
+ "properties": {
+ "serviceDid": {
+ "type": "string",
+ "format": "did",
+ },
+ "token": {
+ "type": "string",
+ },
+ "platform": {
+ "type": "string",
+ "knownValues": [
+ "ios",
+ "android",
+ "web",
+ ],
+ },
+ "appId": {
+ "type": "string",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyNotificationGetPreferences": {
+ "lexicon": 1,
+ "id": "app.bsky.notification.getPreferences",
+ "defs": {
+ "main": {
+ "type": "query",
+ "description":
+ "Get notification-related preferences for an account. Requires auth.",
+ "parameters": {
+ "type": "params",
+ "properties": {},
+ },
+ "output": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "required": [
+ "preferences",
+ ],
+ "properties": {
+ "preferences": {
+ "type": "ref",
+ "ref": "lex:app.bsky.notification.defs#preferences",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyNotificationListNotifications": {
+ "lexicon": 1,
+ "id": "app.bsky.notification.listNotifications",
+ "defs": {
+ "main": {
+ "type": "query",
+ "description":
+ "Enumerate notifications for the requesting account. Requires auth.",
+ "parameters": {
+ "type": "params",
+ "properties": {
+ "reasons": {
+ "description": "Notification reasons to include in response.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "description":
+ "A reason that matches the reason property of #notification.",
+ },
+ },
+ "limit": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 100,
+ "default": 50,
+ },
+ "priority": {
+ "type": "boolean",
+ },
+ "cursor": {
+ "type": "string",
+ },
+ "seenAt": {
+ "type": "string",
+ "format": "datetime",
+ },
+ },
+ },
+ "output": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "required": [
+ "notifications",
+ ],
+ "properties": {
+ "cursor": {
+ "type": "string",
+ },
+ "notifications": {
+ "type": "array",
+ "items": {
+ "type": "ref",
+ "ref":
+ "lex:app.bsky.notification.listNotifications#notification",
+ },
+ },
+ "priority": {
+ "type": "boolean",
+ },
+ "seenAt": {
+ "type": "string",
+ "format": "datetime",
+ },
+ },
+ },
+ },
+ },
+ "notification": {
+ "type": "object",
+ "required": [
+ "uri",
+ "cid",
+ "author",
+ "reason",
+ "record",
+ "isRead",
+ "indexedAt",
+ ],
+ "properties": {
+ "uri": {
+ "type": "string",
+ "format": "at-uri",
+ },
+ "cid": {
+ "type": "string",
+ "format": "cid",
+ },
+ "author": {
+ "type": "ref",
+ "ref": "lex:app.bsky.actor.defs#profileView",
+ },
+ "reason": {
+ "type": "string",
+ "description":
+ "The reason why this notification was delivered - e.g. your post was liked, or you received a new follower.",
+ "knownValues": [
+ "like",
+ "repost",
+ "follow",
+ "mention",
+ "reply",
+ "quote",
+ "starterpack-joined",
+ "verified",
+ "unverified",
+ "like-via-repost",
+ "repost-via-repost",
+ "subscribed-post",
+ "contact-match",
+ ],
+ },
+ "reasonSubject": {
+ "type": "string",
+ "format": "at-uri",
+ },
+ "record": {
+ "type": "unknown",
+ },
+ "isRead": {
+ "type": "boolean",
+ },
+ "indexedAt": {
+ "type": "string",
+ "format": "datetime",
+ },
+ "labels": {
+ "type": "array",
+ "items": {
+ "type": "ref",
+ "ref": "lex:com.atproto.label.defs#label",
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyNotificationGetUnreadCount": {
+ "lexicon": 1,
+ "id": "app.bsky.notification.getUnreadCount",
+ "defs": {
+ "main": {
+ "type": "query",
+ "description":
+ "Count the number of unread notifications for the requesting account. Requires auth.",
+ "parameters": {
+ "type": "params",
+ "properties": {
+ "priority": {
+ "type": "boolean",
+ },
+ "seenAt": {
+ "type": "string",
+ "format": "datetime",
+ },
+ },
+ },
+ "output": {
+ "encoding": "application/json",
+ "schema": {
+ "type": "object",
+ "required": [
+ "count",
+ ],
+ "properties": {
+ "count": {
+ "type": "integer",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyUnspeccedGetSuggestedFeedsSkeleton": {
+ "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",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyUnspeccedSearchStarterPacksSkeleton": {
+ "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":
+ "lex:app.bsky.unspecced.defs#skeletonSearchStarterPack",
+ },
+ },
+ },
+ },
+ },
+ "errors": [
+ {
+ "name": "BadQueryString",
+ },
+ ],
+ },
+ },
+ },
+ "AppBskyUnspeccedGetSuggestedUsersForExplore": {
+ "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": "lex:app.bsky.actor.defs#profileView",
+ },
+ },
+ "recIdStr": {
+ "type": "string",
+ "description":
+ "Snowflake for this recommendation, use when submitting recommendation events.",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyUnspeccedDefs": {
+ "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",
+ },
+ "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",
+ },
+ "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": "lex:app.bsky.actor.defs#profileViewBasic",
+ },
+ },
+ },
+ },
+ "threadItemPost": {
+ "type": "object",
+ "required": [
+ "post",
+ "moreParents",
+ "moreReplies",
+ "opThread",
+ "hiddenByThreadgate",
+ "mutedByViewer",
+ ],
+ "properties": {
+ "post": {
+ "type": "ref",
+ "ref": "lex: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": "lex: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.",
+ },
+ },
+ },
+ },
+ },
+ "AppBskyUnspeccedGetOnboardingSuggestedStarterPacksSkeleton": {
+ "lexicon": 1,
+ "id": "app.bsky.unspecced.getOnboardingSuggestedStarterPacksSkeleton",
+ "defs": {
+ "main": {
+ "type": "query",
+ "description":
+ "Get a skeleton of suggested starterpacks for onboarding. Intended to be called and hydrated by app.bsky.unspecced.getOnboardingSuggestedStarterPacks",
+ "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",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyUnspeccedGetSuggestedUsersForExploreSkeleton": {
+ "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.",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyUnspeccedGetSuggestedUsers": {
+ "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": "lex: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.",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyUnspeccedGetPostThreadOtherV2": {
+ "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":
+ "lex:app.bsky.unspecced.getPostThreadOtherV2#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": [
+ "lex:app.bsky.unspecced.defs#threadItemPost",
+ ],
+ },
+ },
+ },
+ },
+ },
+ "AppBskyUnspeccedGetSuggestedStarterPacks": {
+ "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": "lex:app.bsky.graph.defs#starterPackView",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyUnspeccedGetSuggestedStarterPacksSkeleton": {
+ "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",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyUnspeccedGetOnboardingSuggestedStarterPacks": {
+ "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": "lex:app.bsky.graph.defs#starterPackView",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyUnspeccedGetSuggestedUsersSkeleton": {
+ "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.",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "AppBskyUnspeccedGetPostThreadV2": {
+ "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": "lex:app.bsky.unspecced.getPostThreadV2#threadItem",
+ },
+ },
+ "threadgate": {
+ "type": "ref",
+ "ref": "lex: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.",
},
- "completeUa": {
- "type": "string",
- "description": "The user agent used when completing the AA flow.",
+ "value": {
+ "type": "union",
+ "refs": [
+ "lex:app.bsky.unspecced.defs#threadItemPost",
+ "lex:app.bsky.unspecced.defs#threadItemNoUnauthenticated",
+ "lex:app.bsky.unspecced.defs#threadItemNotFound",
+ "lex:app.bsky.unspecced.defs#threadItemBlocked",
+ ],
},
},
},
},
},
- "AppBskyUnspeccedGetOnboardingSuggestedStarterPacksSkeleton": {
+ "AppBskyUnspeccedGetTrends": {
"lexicon": 1,
- "id": "app.bsky.unspecced.getOnboardingSuggestedStarterPacksSkeleton",
+ "id": "app.bsky.unspecced.getTrends",
"defs": {
"main": {
"type": "query",
- "description":
- "Get a skeleton of suggested starterpacks for onboarding. Intended to be called and hydrated by app.bsky.unspecced.getOnboardingSuggestedStarterPacks",
+ "description": "Get the current trends on the network",
"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,
@@ -7529,14 +9148,14 @@ export const schemaDict = {
"schema": {
"type": "object",
"required": [
- "starterPacks",
+ "trends",
],
"properties": {
- "starterPacks": {
+ "trends": {
"type": "array",
"items": {
- "type": "string",
- "format": "at-uri",
+ "type": "ref",
+ "ref": "lex:app.bsky.unspecced.defs#trendView",
},
},
},
@@ -7545,26 +9164,46 @@ export const schemaDict = {
},
},
},
- "AppBskyUnspeccedGetSuggestedUsers": {
+ "AppBskyUnspeccedSearchActorsSkeleton": {
"lexicon": 1,
- "id": "app.bsky.unspecced.getSuggestedUsers",
+ "id": "app.bsky.unspecced.searchActorsSkeleton",
"defs": {
"main": {
"type": "query",
- "description": "Get a list of suggested users",
+ "description":
+ "Backend Actors (profile) search, returns only skeleton.",
"parameters": {
"type": "params",
+ "required": [
+ "q",
+ ],
"properties": {
- "category": {
+ "q": {
"type": "string",
- "description": "Category of users to get suggestions for.",
+ "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": 50,
+ "maximum": 100,
"default": 25,
},
+ "cursor": {
+ "type": "string",
+ "description":
+ "Optional pagination mechanism; may not necessarily allow scrolling through entire result set.",
+ },
},
},
"output": {
@@ -7575,105 +9214,63 @@ export const schemaDict = {
"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": "lex:app.bsky.actor.defs#profileView",
+ "ref": "lex:app.bsky.unspecced.defs#skeletonSearchActor",
},
},
},
},
},
+ "errors": [
+ {
+ "name": "BadQueryString",
+ },
+ ],
},
},
},
- "AppBskyUnspeccedGetPostThreadOtherV2": {
+ "AppBskyUnspeccedGetSuggestionsSkeleton": {
"lexicon": 1,
- "id": "app.bsky.unspecced.getPostThreadOtherV2",
+ "id": "app.bsky.unspecced.getSuggestionsSkeleton",
"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.",
+ "Get a skeleton of suggested actors. Intended to be called and then hydrated through app.bsky.actor.getSuggestions",
"parameters": {
"type": "params",
- "required": [
- "anchor",
- ],
"properties": {
- "anchor": {
+ "viewer": {
"type": "string",
- "format": "at-uri",
+ "format": "did",
"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":
- "lex:app.bsky.unspecced.getPostThreadOtherV2#threadItem",
- },
- },
+ "DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking.",
},
- },
- },
- },
- "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": [
- "lex:app.bsky.unspecced.defs#threadItemPost",
- ],
- },
- },
- },
- },
- },
- "AppBskyUnspeccedGetSuggestedStarterPacks": {
- "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,
+ "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.",
},
},
},
@@ -7682,83 +9279,132 @@ export const schemaDict = {
"schema": {
"type": "object",
"required": [
- "starterPacks",
+ "actors",
],
"properties": {
- "starterPacks": {
+ "cursor": {
+ "type": "string",
+ },
+ "actors": {
"type": "array",
"items": {
"type": "ref",
- "ref": "lex:app.bsky.graph.defs#starterPackView",
+ "ref": "lex: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.",
+ },
},
},
},
},
},
},
- "AppBskyUnspeccedGetSuggestedStarterPacksSkeleton": {
+ "AppBskyUnspeccedSearchPostsSkeleton": {
"lexicon": 1,
- "id": "app.bsky.unspecced.getSuggestedStarterPacksSkeleton",
+ "id": "app.bsky.unspecced.searchPostsSkeleton",
"defs": {
"main": {
"type": "query",
- "description":
- "Get a skeleton of suggested starterpacks. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedStarterpacks",
+ "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).",
+ "DID of the account making the request (not included for public/unauthenticated queries). Used for 'from:me' 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",
- },
- },
+ "maximum": 100,
+ "default": 25,
},
- },
- },
- },
- },
- },
- "AppBskyUnspeccedGetOnboardingSuggestedStarterPacks": {
- "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,
+ "cursor": {
+ "type": "string",
+ "description":
+ "Optional pagination mechanism; may not necessarily allow scrolling through entire result set.",
},
},
},
@@ -7767,30 +9413,43 @@ export const schemaDict = {
"schema": {
"type": "object",
"required": [
- "starterPacks",
+ "posts",
],
"properties": {
- "starterPacks": {
+ "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": "lex:app.bsky.graph.defs#starterPackView",
+ "ref": "lex:app.bsky.unspecced.defs#skeletonSearchPost",
},
},
},
},
},
+ "errors": [
+ {
+ "name": "BadQueryString",
+ },
+ ],
},
},
},
- "AppBskyUnspeccedGetSuggestedUsersSkeleton": {
+ "AppBskyUnspeccedGetOnboardingSuggestedUsersSkeleton": {
"lexicon": 1,
- "id": "app.bsky.unspecced.getSuggestedUsersSkeleton",
+ "id": "app.bsky.unspecced.getOnboardingSuggestedUsersSkeleton",
"defs": {
"main": {
"type": "query",
"description":
- "Get a skeleton of suggested users. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedUsers",
+ "Get a skeleton of suggested users for onboarding. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedOnboardingUsers",
"parameters": {
"type": "params",
"properties": {
@@ -7827,62 +9486,43 @@ export const schemaDict = {
"format": "did",
},
},
+ "recId": {
+ "type": "string",
+ "description": "DEPRECATED: use recIdStr instead.",
+ },
+ "recIdStr": {
+ "type": "string",
+ "description":
+ "Snowflake for this recommendation, use when submitting recommendation events.",
+ },
},
},
},
},
},
},
- "AppBskyUnspeccedGetPostThreadV2": {
+ "AppBskyUnspeccedGetSuggestedUsersForDiscoverSkeleton": {
"lexicon": 1,
- "id": "app.bsky.unspecced.getPostThreadV2",
+ "id": "app.bsky.unspecced.getSuggestedUsersForDiscoverSkeleton",
"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.",
+ "Get a skeleton of suggested users for the Discover page. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedUsersForDiscover",
"parameters": {
"type": "params",
- "required": [
- "anchor",
- ],
"properties": {
- "anchor": {
+ "viewer": {
"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",
+ "format": "did",
"description":
- "How many levels of replies to include below the anchor.",
- "default": 6,
- "minimum": 0,
- "maximum": 20,
+ "DID of the account making the request (not included for public/unauthenticated queries).",
},
- "branchingFactor": {
+ "limit": {
"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",
+ "minimum": 1,
+ "maximum": 50,
+ "default": 25,
},
},
},
@@ -7891,77 +9531,42 @@ export const schemaDict = {
"schema": {
"type": "object",
"required": [
- "thread",
- "hasOtherReplies",
+ "dids",
],
"properties": {
- "thread": {
+ "dids": {
"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": "lex:app.bsky.unspecced.getPostThreadV2#threadItem",
+ "type": "string",
+ "format": "did",
},
},
- "threadgate": {
- "type": "ref",
- "ref": "lex:app.bsky.feed.defs#threadgateView",
- },
- "hasOtherReplies": {
- "type": "boolean",
+ "recIdStr": {
+ "type": "string",
"description":
- "Whether this thread has additional replies. If true, a call can be made to the `getPostThreadOtherV2` endpoint to retrieve them.",
+ "Snowflake for this recommendation, use when submitting recommendation events.",
},
},
},
},
},
- "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": [
- "lex:app.bsky.unspecced.defs#threadItemPost",
- "lex:app.bsky.unspecced.defs#threadItemNoUnauthenticated",
- "lex:app.bsky.unspecced.defs#threadItemNotFound",
- "lex:app.bsky.unspecced.defs#threadItemBlocked",
- ],
- },
- },
- },
},
},
- "AppBskyUnspeccedGetTrends": {
+ "AppBskyUnspeccedGetSuggestedUsersForDiscover": {
"lexicon": 1,
- "id": "app.bsky.unspecced.getTrends",
+ "id": "app.bsky.unspecced.getSuggestedUsersForDiscover",
"defs": {
"main": {
"type": "query",
- "description": "Get the current trends on the network",
+ "description": "Get a list of suggested users for the Discover page",
"parameters": {
"type": "params",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
- "maximum": 25,
- "default": 10,
+ "maximum": 50,
+ "default": 25,
},
},
},
@@ -7970,115 +9575,55 @@ export const schemaDict = {
"schema": {
"type": "object",
"required": [
- "trends",
+ "actors",
],
"properties": {
- "trends": {
+ "actors": {
"type": "array",
"items": {
"type": "ref",
- "ref": "lex:app.bsky.unspecced.defs#trendView",
+ "ref": "lex:app.bsky.actor.defs#profileView",
},
},
+ "recIdStr": {
+ "type": "string",
+ "description":
+ "Snowflake for this recommendation, use when submitting recommendation events.",
+ },
},
},
},
},
},
},
- "AppBskyUnspeccedSearchActorsSkeleton": {
+ "AppBskyUnspeccedGetAgeAssuranceState": {
"lexicon": 1,
- "id": "app.bsky.unspecced.searchActorsSkeleton",
+ "id": "app.bsky.unspecced.getAgeAssuranceState",
"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.",
- },
- },
- },
+ "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": "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": "lex:app.bsky.unspecced.defs#skeletonSearchActor",
- },
- },
- },
+ "type": "ref",
+ "ref": "lex:app.bsky.unspecced.defs#ageAssuranceState",
},
},
- "errors": [
- {
- "name": "BadQueryString",
- },
- ],
},
},
},
- "AppBskyUnspeccedGetSuggestionsSkeleton": {
+ "AppBskyUnspeccedGetPopularFeedGenerators": {
"lexicon": 1,
- "id": "app.bsky.unspecced.getSuggestionsSkeleton",
+ "id": "app.bsky.unspecced.getPopularFeedGenerators",
"defs": {
"main": {
"type": "query",
- "description":
- "Get a skeleton of suggested actors. Intended to be called and then hydrated through app.bsky.actor.getSuggestions",
+ "description": "An unspecced view of globally popular feed generators.",
"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,
@@ -8088,11 +9633,8 @@ export const schemaDict = {
"cursor": {
"type": "string",
},
- "relativeToDid": {
+ "query": {
"type": "string",
- "format": "did",
- "description":
- "DID of the account to get suggestions relative to. If not provided, suggestions will be based on the viewer.",
},
},
},
@@ -8101,129 +9643,45 @@ export const schemaDict = {
"schema": {
"type": "object",
"required": [
- "actors",
+ "feeds",
],
"properties": {
"cursor": {
"type": "string",
},
- "actors": {
+ "feeds": {
"type": "array",
"items": {
"type": "ref",
- "ref": "lex:app.bsky.unspecced.defs#skeletonSearchActor",
+ "ref": "lex:app.bsky.feed.defs#generatorView",
},
},
- "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":
- "Snowflake for this recommendation, use when submitting recommendation events.",
- },
},
},
},
},
},
},
- "AppBskyUnspeccedSearchPostsSkeleton": {
+ "AppBskyUnspeccedGetSuggestedOnboardingUsers": {
"lexicon": 1,
- "id": "app.bsky.unspecced.searchPostsSkeleton",
+ "id": "app.bsky.unspecced.getSuggestedOnboardingUsers",
"defs": {
"main": {
"type": "query",
- "description": "Backend Posts search, returns only skeleton",
+ "description": "Get a list of suggested users for onboarding",
"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": {
+ "category": {
"type": "string",
- "format": "did",
- "description":
- "DID of the account making the request (not included for public/unauthenticated queries). Used for 'from:me' queries.",
+ "description": "Category of users to get suggestions for.",
},
"limit": {
"type": "integer",
"minimum": 1,
- "maximum": 100,
+ "maximum": 50,
"default": 25,
},
- "cursor": {
- "type": "string",
- "description":
- "Optional pagination mechanism; may not necessarily allow scrolling through entire result set.",
- },
},
},
"output": {
@@ -8231,74 +9689,50 @@ export const schemaDict = {
"schema": {
"type": "object",
"required": [
- "posts",
+ "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.",
- },
- "posts": {
+ "actors": {
"type": "array",
"items": {
"type": "ref",
- "ref": "lex:app.bsky.unspecced.defs#skeletonSearchPost",
+ "ref": "lex: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.",
+ },
},
},
},
- "errors": [
- {
- "name": "BadQueryString",
- },
- ],
- },
- },
- },
- "AppBskyUnspeccedGetAgeAssuranceState": {
- "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": "lex:app.bsky.unspecced.defs#ageAssuranceState",
- },
- },
},
},
},
- "AppBskyUnspeccedGetPopularFeedGenerators": {
+ "AppBskyUnspeccedGetSuggestedUsersForSeeMore": {
"lexicon": 1,
- "id": "app.bsky.unspecced.getPopularFeedGenerators",
+ "id": "app.bsky.unspecced.getSuggestedUsersForSeeMore",
"defs": {
"main": {
"type": "query",
- "description": "An unspecced view of globally popular feed generators.",
+ "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": 100,
- "default": 50,
- },
- "cursor": {
- "type": "string",
- },
- "query": {
- "type": "string",
+ "maximum": 50,
+ "default": 25,
},
},
},
@@ -8307,19 +9741,21 @@ export const schemaDict = {
"schema": {
"type": "object",
"required": [
- "feeds",
+ "actors",
],
"properties": {
- "cursor": {
- "type": "string",
- },
- "feeds": {
+ "actors": {
"type": "array",
"items": {
"type": "ref",
- "ref": "lex:app.bsky.feed.defs#generatorView",
+ "ref": "lex:app.bsky.actor.defs#profileView",
},
},
+ "recIdStr": {
+ "type": "string",
+ "description":
+ "Snowflake for this recommendation, use when submitting recommendation events.",
+ },
},
},
},
@@ -8453,45 +9889,100 @@ export const schemaDict = {
"schema": {
"type": "object",
"required": [
- "suggestions",
+ "suggestions",
+ ],
+ "properties": {
+ "suggestions": {
+ "type": "array",
+ "items": {
+ "type": "ref",
+ "ref":
+ "lex:app.bsky.unspecced.getTaggedSuggestions#suggestion",
+ },
+ },
+ },
+ },
+ },
+ },
+ "suggestion": {
+ "type": "object",
+ "required": [
+ "tag",
+ "subjectType",
+ "subject",
+ ],
+ "properties": {
+ "tag": {
+ "type": "string",
+ },
+ "subjectType": {
+ "type": "string",
+ "knownValues": [
+ "actor",
+ "feed",
+ ],
+ },
+ "subject": {
+ "type": "string",
+ "format": "uri",
+ },
+ },
+ },
+ },
+ },
+ "AppBskyUnspeccedGetSuggestedUsersForSeeMoreSkeleton": {
+ "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": {
- "suggestions": {
+ "dids": {
"type": "array",
"items": {
- "type": "ref",
- "ref":
- "lex:app.bsky.unspecced.getTaggedSuggestions#suggestion",
+ "type": "string",
+ "format": "did",
},
},
+ "recIdStr": {
+ "type": "string",
+ "description":
+ "Snowflake for this recommendation, use when submitting recommendation events.",
+ },
},
},
},
},
- "suggestion": {
- "type": "object",
- "required": [
- "tag",
- "subjectType",
- "subject",
- ],
- "properties": {
- "tag": {
- "type": "string",
- },
- "subjectType": {
- "type": "string",
- "knownValues": [
- "actor",
- "feed",
- ],
- },
- "subject": {
- "type": "string",
- "format": "uri",
- },
- },
- },
},
},
"AppBskyUnspeccedGetSuggestedFeeds": {
@@ -8706,16 +10197,20 @@ export const schemaDict = {
"ref": "lex: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",
+ "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.",
},
},
},
@@ -9193,6 +10688,30 @@ export const schemaDict = {
"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",
+ },
},
},
},
@@ -10374,6 +11893,191 @@ export const schemaDict = {
},
},
},
+ "AppBskyAuthFullApp": {
+ "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",
+ ],
+ },
+ ],
+ },
+ },
+ },
+ "AppBskyAuthManageModeration": {
+ "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",
+ ],
+ },
+ ],
+ },
+ },
+ },
"AppBskyFeedGenerator": {
"lexicon": 1,
"id": "app.bsky.feed.generator",
@@ -10464,6 +12168,10 @@ export const schemaDict = {
"interactions",
],
"properties": {
+ "feed": {
+ "type": "string",
+ "format": "at-uri",
+ },
"interactions": {
"type": "array",
"items": {
@@ -12582,6 +14290,123 @@ export const schemaDict = {
},
},
},
+ "AppBskyAuthViewAll": {
+ "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",
+ ],
+ },
+ ],
+ },
+ },
+ },
+ "AppBskyAuthManageFeedDeclarations": {
+ "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",
+ ],
+ },
+ ],
+ },
+ },
+ },
"AppBskyAgeassuranceBegin": {
"lexicon": 1,
"id": "app.bsky.ageassurance.begin",
@@ -12729,6 +14554,7 @@ export const schemaDict = {
"description": "The Age Assurance configuration for a specific region.",
"required": [
"countryCode",
+ "minAccessAge",
"rules",
],
"properties": {
@@ -12742,6 +14568,11 @@ export const schemaDict = {
"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":
@@ -13033,6 +14864,36 @@ export const schemaDict = {
},
},
},
+ "AppBskyAuthManageProfile": {
+ "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",
+ ],
+ },
+ ],
+ },
+ },
+ },
"AppBskyActorSearchActorsTypeahead": {
"lexicon": 1,
"id": "app.bsky.actor.searchActorsTypeahead",
@@ -13332,6 +15193,10 @@ export const schemaDict = {
"ref":
"lex:app.bsky.actor.defs#profileAssociatedActivitySubscription",
},
+ "germ": {
+ "type": "ref",
+ "ref": "lex:app.bsky.actor.defs#profileAssociatedGerm",
+ },
},
},
"profileAssociatedChat": {
@@ -13350,6 +15215,26 @@ export const schemaDict = {
},
},
},
+ "profileAssociatedGerm": {
+ "type": "object",
+ "required": [
+ "showButtonTo",
+ "messageMeUrl",
+ ],
+ "properties": {
+ "messageMeUrl": {
+ "type": "string",
+ "format": "uri",
+ },
+ "showButtonTo": {
+ "type": "string",
+ "knownValues": [
+ "usersIFollow",
+ "everyone",
+ ],
+ },
+ },
+ },
"profileAssociatedActivitySubscription": {
"type": "object",
"required": [
@@ -13514,6 +15399,7 @@ export const schemaDict = {
"lex:app.bsky.actor.defs#savedFeedsPref",
"lex:app.bsky.actor.defs#savedFeedsPrefV2",
"lex:app.bsky.actor.defs#personalDetailsPref",
+ "lex:app.bsky.actor.defs#declaredAgePref",
"lex:app.bsky.actor.defs#feedViewPref",
"lex:app.bsky.actor.defs#threadViewPref",
"lex:app.bsky.actor.defs#interestsPref",
@@ -13523,6 +15409,7 @@ export const schemaDict = {
"lex:app.bsky.actor.defs#labelersPref",
"lex:app.bsky.actor.defs#postInteractionSettingsPref",
"lex:app.bsky.actor.defs#verificationPrefs",
+ "lex:app.bsky.actor.defs#liveEventPreferences",
],
},
},
@@ -13644,6 +15531,28 @@ export const schemaDict = {
},
},
},
+ "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": [
@@ -13916,6 +15825,25 @@ export const schemaDict = {
},
},
},
+ "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":
@@ -13958,6 +15886,14 @@ export const schemaDict = {
"record",
],
"properties": {
+ "uri": {
+ "type": "string",
+ "format": "at-uri",
+ },
+ "cid": {
+ "type": "string",
+ "format": "cid",
+ },
"status": {
"type": "string",
"description": "The status for the account.",
@@ -13975,6 +15911,13 @@ export const schemaDict = {
"lex:app.bsky.embed.external#view",
],
},
+ "labels": {
+ "type": "array",
+ "items": {
+ "type": "ref",
+ "ref": "lex:com.atproto.label.defs#label",
+ },
+ },
"expiresAt": {
"type": "string",
"description":
@@ -13986,6 +15929,11 @@ export const schemaDict = {
"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.",
+ },
},
},
},
@@ -14088,6 +16036,10 @@ export const schemaDict = {
},
"recId": {
"type": "integer",
+ "description": "DEPRECATED: use recIdStr instead.",
+ },
+ "recIdStr": {
+ "type": "string",
"description":
"Snowflake for this recommendation, use when submitting recommendation events.",
},
@@ -15957,6 +17909,62 @@ export const schemaDict = {
},
},
},
+ "ChatBskyAuthFullChatClient": {
+ "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",
+ ],
+ },
+ ],
+ },
+ },
+ },
"ChatBskyModerationGetActorMetadata": {
"lexicon": 1,
"id": "chat.bsky.moderation.getActorMetadata",
@@ -23256,16 +25264,13 @@ export const schemaDict = {
"type": "string",
"knownValues": [
"!hide",
- "!no-promote",
"!warn",
"!no-unauthenticated",
- "dmca-violation",
- "doxxing",
"porn",
"sexual",
"nudity",
- "nsfl",
- "gore",
+ "graphic-media",
+ "bot",
],
},
},
@@ -23786,7 +25791,16 @@ export const schemaDict = {
"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",
+ },
+ ],
},
},
},
@@ -24035,6 +26049,9 @@ export const schemaDict = {
"type": "string",
"format": "did",
},
+ "didDoc": {
+ "type": "unknown",
+ },
"email": {
"type": "string",
},
@@ -24044,9 +26061,6 @@ export const schemaDict = {
"emailAuthFactor": {
"type": "boolean",
},
- "didDoc": {
- "type": "unknown",
- },
"active": {
"type": "boolean",
},
@@ -24102,6 +26116,15 @@ export const schemaDict = {
"didDoc": {
"type": "unknown",
},
+ "email": {
+ "type": "string",
+ },
+ "emailConfirmed": {
+ "type": "boolean",
+ },
+ "emailAuthFactor": {
+ "type": "boolean",
+ },
"active": {
"type": "boolean",
},
@@ -24122,6 +26145,12 @@ export const schemaDict = {
{
"name": "AccountTakedown",
},
+ {
+ "name": "InvalidToken",
+ },
+ {
+ "name": "ExpiredToken",
+ },
],
},
},
@@ -26910,10 +28939,27 @@ export const ids = {
ToolsOzoneModerationGetAccountTimeline:
"tools.ozone.moderation.getAccountTimeline",
ToolsOzoneModerationGetRepos: "tools.ozone.moderation.getRepos",
+ AppBskyDraftDefs: "app.bsky.draft.defs",
+ AppBskyDraftCreateDraft: "app.bsky.draft.createDraft",
+ AppBskyDraftUpdateDraft: "app.bsky.draft.updateDraft",
+ AppBskyDraftGetDrafts: "app.bsky.draft.getDrafts",
+ AppBskyDraftDeleteDraft: "app.bsky.draft.deleteDraft",
+ AppBskyAuthManageLabelerService: "app.bsky.authManageLabelerService",
AppBskyVideoUploadVideo: "app.bsky.video.uploadVideo",
AppBskyVideoDefs: "app.bsky.video.defs",
AppBskyVideoGetJobStatus: "app.bsky.video.getJobStatus",
AppBskyVideoGetUploadLimits: "app.bsky.video.getUploadLimits",
+ AppBskyContactDefs: "app.bsky.contact.defs",
+ AppBskyContactSendNotification: "app.bsky.contact.sendNotification",
+ AppBskyContactGetSyncStatus: "app.bsky.contact.getSyncStatus",
+ AppBskyContactStartPhoneVerification:
+ "app.bsky.contact.startPhoneVerification",
+ AppBskyContactGetMatches: "app.bsky.contact.getMatches",
+ AppBskyContactImportContacts: "app.bsky.contact.importContacts",
+ AppBskyContactDismissMatch: "app.bsky.contact.dismissMatch",
+ AppBskyContactRemoveData: "app.bsky.contact.removeData",
+ AppBskyContactVerifyPhone: "app.bsky.contact.verifyPhone",
+ AppBskyAuthManageNotifications: "app.bsky.authManageNotifications",
AppBskyBookmarkDefs: "app.bsky.bookmark.defs",
AppBskyBookmarkDeleteBookmark: "app.bsky.bookmark.deleteBookmark",
AppBskyBookmarkGetBookmarks: "app.bsky.bookmark.getBookmarks",
@@ -26924,6 +28970,8 @@ export const ids = {
AppBskyEmbedRecordWithMedia: "app.bsky.embed.recordWithMedia",
AppBskyEmbedVideo: "app.bsky.embed.video",
AppBskyEmbedExternal: "app.bsky.embed.external",
+ AppBskyAuthDeleteContent: "app.bsky.authDeleteContent",
+ AppBskyAuthCreatePosts: "app.bsky.authCreatePosts",
AppBskyNotificationDefs: "app.bsky.notification.defs",
AppBskyNotificationRegisterPush: "app.bsky.notification.registerPush",
AppBskyNotificationPutPreferences: "app.bsky.notification.putPreferences",
@@ -26943,9 +28991,13 @@ export const ids = {
"app.bsky.unspecced.getSuggestedFeedsSkeleton",
AppBskyUnspeccedSearchStarterPacksSkeleton:
"app.bsky.unspecced.searchStarterPacksSkeleton",
+ AppBskyUnspeccedGetSuggestedUsersForExplore:
+ "app.bsky.unspecced.getSuggestedUsersForExplore",
AppBskyUnspeccedDefs: "app.bsky.unspecced.defs",
AppBskyUnspeccedGetOnboardingSuggestedStarterPacksSkeleton:
"app.bsky.unspecced.getOnboardingSuggestedStarterPacksSkeleton",
+ AppBskyUnspeccedGetSuggestedUsersForExploreSkeleton:
+ "app.bsky.unspecced.getSuggestedUsersForExploreSkeleton",
AppBskyUnspeccedGetSuggestedUsers: "app.bsky.unspecced.getSuggestedUsers",
AppBskyUnspeccedGetPostThreadOtherV2:
"app.bsky.unspecced.getPostThreadOtherV2",
@@ -26964,14 +29016,26 @@ export const ids = {
AppBskyUnspeccedGetSuggestionsSkeleton:
"app.bsky.unspecced.getSuggestionsSkeleton",
AppBskyUnspeccedSearchPostsSkeleton: "app.bsky.unspecced.searchPostsSkeleton",
+ AppBskyUnspeccedGetOnboardingSuggestedUsersSkeleton:
+ "app.bsky.unspecced.getOnboardingSuggestedUsersSkeleton",
+ AppBskyUnspeccedGetSuggestedUsersForDiscoverSkeleton:
+ "app.bsky.unspecced.getSuggestedUsersForDiscoverSkeleton",
+ AppBskyUnspeccedGetSuggestedUsersForDiscover:
+ "app.bsky.unspecced.getSuggestedUsersForDiscover",
AppBskyUnspeccedGetAgeAssuranceState:
"app.bsky.unspecced.getAgeAssuranceState",
AppBskyUnspeccedGetPopularFeedGenerators:
"app.bsky.unspecced.getPopularFeedGenerators",
+ AppBskyUnspeccedGetSuggestedOnboardingUsers:
+ "app.bsky.unspecced.getSuggestedOnboardingUsers",
+ AppBskyUnspeccedGetSuggestedUsersForSeeMore:
+ "app.bsky.unspecced.getSuggestedUsersForSeeMore",
AppBskyUnspeccedInitAgeAssurance: "app.bsky.unspecced.initAgeAssurance",
AppBskyUnspeccedGetTrendingTopics: "app.bsky.unspecced.getTrendingTopics",
AppBskyUnspeccedGetTaggedSuggestions:
"app.bsky.unspecced.getTaggedSuggestions",
+ AppBskyUnspeccedGetSuggestedUsersForSeeMoreSkeleton:
+ "app.bsky.unspecced.getSuggestedUsersForSeeMoreSkeleton",
AppBskyUnspeccedGetSuggestedFeeds: "app.bsky.unspecced.getSuggestedFeeds",
AppBskyUnspeccedGetTrendsSkeleton: "app.bsky.unspecced.getTrendsSkeleton",
AppBskyUnspeccedGetConfig: "app.bsky.unspecced.getConfig",
@@ -27008,6 +29072,8 @@ export const ids = {
AppBskyGraphGetRelationships: "app.bsky.graph.getRelationships",
AppBskyGraphUnmuteActor: "app.bsky.graph.unmuteActor",
AppBskyGraphGetList: "app.bsky.graph.getList",
+ AppBskyAuthFullApp: "app.bsky.authFullApp",
+ AppBskyAuthManageModeration: "app.bsky.authManageModeration",
AppBskyFeedGenerator: "app.bsky.feed.generator",
AppBskyFeedSendInteractions: "app.bsky.feed.sendInteractions",
AppBskyFeedDefs: "app.bsky.feed.defs",
@@ -27034,10 +29100,13 @@ export const ids = {
AppBskyFeedGetActorFeeds: "app.bsky.feed.getActorFeeds",
AppBskyFeedPost: "app.bsky.feed.post",
AppBskyRichtextFacet: "app.bsky.richtext.facet",
+ AppBskyAuthViewAll: "app.bsky.authViewAll",
+ AppBskyAuthManageFeedDeclarations: "app.bsky.authManageFeedDeclarations",
AppBskyAgeassuranceBegin: "app.bsky.ageassurance.begin",
AppBskyAgeassuranceDefs: "app.bsky.ageassurance.defs",
AppBskyAgeassuranceGetState: "app.bsky.ageassurance.getState",
AppBskyAgeassuranceGetConfig: "app.bsky.ageassurance.getConfig",
+ AppBskyAuthManageProfile: "app.bsky.authManageProfile",
AppBskyActorSearchActorsTypeahead: "app.bsky.actor.searchActorsTypeahead",
AppBskyActorDefs: "app.bsky.actor.defs",
AppBskyActorPutPreferences: "app.bsky.actor.putPreferences",
@@ -27073,6 +29142,7 @@ export const ids = {
ChatBskyActorDeclaration: "chat.bsky.actor.declaration",
ChatBskyActorExportAccountData: "chat.bsky.actor.exportAccountData",
ChatBskyActorDeleteAccount: "chat.bsky.actor.deleteAccount",
+ ChatBskyAuthFullChatClient: "chat.bsky.authFullChatClient",
ChatBskyModerationGetActorMetadata: "chat.bsky.moderation.getActorMetadata",
ChatBskyModerationGetMessageContext: "chat.bsky.moderation.getMessageContext",
ChatBskyModerationUpdateActorAccess: "chat.bsky.moderation.updateActorAccess",
diff --git a/lex/types/app/bsky/actor/defs.ts b/lex/types/app/bsky/actor/defs.ts
index efeb816..8b04eff 100644
--- a/lex/types/app/bsky/actor/defs.ts
+++ b/lex/types/app/bsky/actor/defs.ts
@@ -2,6 +2,7 @@
* GENERATED CODE - DO NOT MODIFY
*/
import { validate as _validate } from "../../../../lexicons.ts";
+import type { ValidationResult } from "@atp/lexicon";
import { type $Typed, is$typed as _is$typed } from "../../../../util.ts";
import type * as ComAtprotoLabelDefs from "../../../com/atproto/label/defs.ts";
import type * as AppBskyGraphDefs from "../graph/defs.ts";
@@ -33,11 +34,13 @@ export interface ProfileViewBasic {
const hashProfileViewBasic = "profileViewBasic";
-export function isProfileViewBasic(v: V) {
+export function isProfileViewBasic(v: V): v is ProfileViewBasic & V {
return is$typed(v, id, hashProfileViewBasic);
}
-export function validateProfileViewBasic(v: V) {
+export function validateProfileViewBasic(
+ v: V,
+): ValidationResult {
return validate(v, id, hashProfileViewBasic);
}
@@ -62,11 +65,13 @@ export interface ProfileView {
const hashProfileView = "profileView";
-export function isProfileView(v: V) {
+export function isProfileView(v: V): v is ProfileView & V {
return is$typed(v, id, hashProfileView);
}
-export function validateProfileView(v: V) {
+export function validateProfileView(
+ v: V,
+): ValidationResult {
return validate(v, id, hashProfileView);
}
@@ -98,11 +103,13 @@ export interface ProfileViewDetailed {
const hashProfileViewDetailed = "profileViewDetailed";
-export function isProfileViewDetailed(v: V) {
+export function isProfileViewDetailed(v: V): v is ProfileViewDetailed & V {
return is$typed(v, id, hashProfileViewDetailed);
}
-export function validateProfileViewDetailed(v: V) {
+export function validateProfileViewDetailed(
+ v: V,
+): ValidationResult {
return validate(v, id, hashProfileViewDetailed);
}
@@ -114,15 +121,18 @@ export interface ProfileAssociated {
labeler?: boolean;
chat?: ProfileAssociatedChat;
activitySubscription?: ProfileAssociatedActivitySubscription;
+ germ?: ProfileAssociatedGerm;
}
const hashProfileAssociated = "profileAssociated";
-export function isProfileAssociated(v: V) {
+export function isProfileAssociated(v: V): v is ProfileAssociated & V {
return is$typed(v, id, hashProfileAssociated);
}
-export function validateProfileAssociated(v: V) {
+export function validateProfileAssociated(
+ v: V,
+): ValidationResult {
return validate(v, id, hashProfileAssociated);
}
@@ -137,14 +147,41 @@ export interface ProfileAssociatedChat {
const hashProfileAssociatedChat = "profileAssociatedChat";
-export function isProfileAssociatedChat(v: V) {
+export function isProfileAssociatedChat(
+ v: V,
+): v is ProfileAssociatedChat & V {
return is$typed(v, id, hashProfileAssociatedChat);
}
-export function validateProfileAssociatedChat(v: V) {
+export function validateProfileAssociatedChat(
+ v: V,
+): ValidationResult {
return validate(v, id, hashProfileAssociatedChat);
}
+export interface ProfileAssociatedGerm {
+ $type?: "app.bsky.actor.defs#profileAssociatedGerm";
+ messageMeUrl: string;
+ showButtonTo:
+ | "usersIFollow"
+ | "everyone"
+ | (string & globalThis.Record);
+}
+
+const hashProfileAssociatedGerm = "profileAssociatedGerm";
+
+export function isProfileAssociatedGerm(
+ v: V,
+): v is ProfileAssociatedGerm & V {
+ return is$typed(v, id, hashProfileAssociatedGerm);
+}
+
+export function validateProfileAssociatedGerm(
+ v: V,
+): ValidationResult {
+ return validate(v, id, hashProfileAssociatedGerm);
+}
+
export interface ProfileAssociatedActivitySubscription {
$type?: "app.bsky.actor.defs#profileAssociatedActivitySubscription";
allowSubscriptions:
@@ -157,11 +194,15 @@ export interface ProfileAssociatedActivitySubscription {
const hashProfileAssociatedActivitySubscription =
"profileAssociatedActivitySubscription";
-export function isProfileAssociatedActivitySubscription(v: V) {
+export function isProfileAssociatedActivitySubscription(
+ v: V,
+): v is ProfileAssociatedActivitySubscription & V {
return is$typed(v, id, hashProfileAssociatedActivitySubscription);
}
-export function validateProfileAssociatedActivitySubscription(v: V) {
+export function validateProfileAssociatedActivitySubscription(
+ v: V,
+): ValidationResult {
return validate(
v,
id,
@@ -185,11 +226,13 @@ export interface ViewerState {
const hashViewerState = "viewerState";
-export function isViewerState(v: V) {
+export function isViewerState(v: V): v is ViewerState & V {
return is$typed(v, id, hashViewerState);
}
-export function validateViewerState(v: V) {
+export function validateViewerState(
+ v: V,
+): ValidationResult {
return validate(v, id, hashViewerState);
}
@@ -202,11 +245,13 @@ export interface KnownFollowers {
const hashKnownFollowers = "knownFollowers";
-export function isKnownFollowers(v: V) {
+export function isKnownFollowers(v: V): v is KnownFollowers & V {
return is$typed(v, id, hashKnownFollowers);
}
-export function validateKnownFollowers(v: V) {
+export function validateKnownFollowers(
+ v: V,
+): ValidationResult {
return validate(v, id, hashKnownFollowers);
}
@@ -231,11 +276,13 @@ export interface VerificationState {
const hashVerificationState = "verificationState";
-export function isVerificationState(v: V) {
+export function isVerificationState(v: V): v is VerificationState & V {
return is$typed(v, id, hashVerificationState);
}
-export function validateVerificationState(v: V) {
+export function validateVerificationState(
+ v: V,
+): ValidationResult {
return validate(v, id, hashVerificationState);
}
@@ -254,11 +301,13 @@ export interface VerificationView {
const hashVerificationView = "verificationView";
-export function isVerificationView(v: V) {
+export function isVerificationView(v: V): v is VerificationView & V {
return is$typed(v, id, hashVerificationView);
}
-export function validateVerificationView(v: V) {
+export function validateVerificationView(
+ v: V,
+): ValidationResult {
return validate(v, id, hashVerificationView);
}
@@ -268,6 +317,7 @@ export type Preferences = (
| $Typed
| $Typed
| $Typed
+ | $Typed
| $Typed
| $Typed
| $Typed
@@ -277,6 +327,7 @@ export type Preferences = (
| $Typed
| $Typed
| $Typed
+ | $Typed
| { $type: string }
)[];
@@ -287,11 +338,13 @@ export interface AdultContentPref {
const hashAdultContentPref = "adultContentPref";
-export function isAdultContentPref(v: V) {
+export function isAdultContentPref(v: V): v is AdultContentPref & V {
return is$typed(v, id, hashAdultContentPref);
}
-export function validateAdultContentPref(v: V) {
+export function validateAdultContentPref(
+ v: V,
+): ValidationResult {
return validate(v, id, hashAdultContentPref);
}
@@ -310,11 +363,13 @@ export interface ContentLabelPref {
const hashContentLabelPref = "contentLabelPref";
-export function isContentLabelPref(v: V) {
+export function isContentLabelPref(v: V): v is ContentLabelPref & V {
return is$typed(v, id, hashContentLabelPref);
}
-export function validateContentLabelPref(v: V) {
+export function validateContentLabelPref(
+ v: V,
+): ValidationResult {
return validate(v, id, hashContentLabelPref);
}
@@ -332,11 +387,11 @@ export interface SavedFeed {
const hashSavedFeed = "savedFeed";
-export function isSavedFeed(v: V) {
+export function isSavedFeed(v: V): v is SavedFeed & V {
return is$typed(v, id, hashSavedFeed);
}
-export function validateSavedFeed(v: V) {
+export function validateSavedFeed(v: V): ValidationResult {
return validate(v, id, hashSavedFeed);
}
@@ -347,11 +402,13 @@ export interface SavedFeedsPrefV2 {
const hashSavedFeedsPrefV2 = "savedFeedsPrefV2";
-export function isSavedFeedsPrefV2(v: V) {
+export function isSavedFeedsPrefV2(v: V): v is SavedFeedsPrefV2 & V {
return is$typed(v, id, hashSavedFeedsPrefV2);
}
-export function validateSavedFeedsPrefV2(v: V) {
+export function validateSavedFeedsPrefV2(
+ v: V,
+): ValidationResult {
return validate(v, id, hashSavedFeedsPrefV2);
}
@@ -364,11 +421,13 @@ export interface SavedFeedsPref {
const hashSavedFeedsPref = "savedFeedsPref";
-export function isSavedFeedsPref(v: V) {
+export function isSavedFeedsPref(v: V): v is SavedFeedsPref & V {
return is$typed(v, id, hashSavedFeedsPref);
}
-export function validateSavedFeedsPref(v: V) {
+export function validateSavedFeedsPref(
+ v: V,
+): ValidationResult {
return validate(v, id, hashSavedFeedsPref);
}
@@ -380,14 +439,39 @@ export interface PersonalDetailsPref {
const hashPersonalDetailsPref = "personalDetailsPref";
-export function isPersonalDetailsPref(v: V) {
+export function isPersonalDetailsPref(v: V): v is PersonalDetailsPref & V {
return is$typed(v, id, hashPersonalDetailsPref);
}
-export function validatePersonalDetailsPref(v: V) {
+export function validatePersonalDetailsPref(
+ v: V,
+): ValidationResult {
return validate(v, id, hashPersonalDetailsPref);
}
+/** 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. */
+export interface DeclaredAgePref {
+ $type?: "app.bsky.actor.defs#declaredAgePref";
+ /** Indicates if the user has declared that they are over 13 years of age. */
+ isOverAge13?: boolean;
+ /** Indicates if the user has declared that they are over 16 years of age. */
+ isOverAge16?: boolean;
+ /** Indicates if the user has declared that they are over 18 years of age. */
+ isOverAge18?: boolean;
+}
+
+const hashDeclaredAgePref = "declaredAgePref";
+
+export function isDeclaredAgePref(v: V): v is DeclaredAgePref & V {
+ return is$typed(v, id, hashDeclaredAgePref);
+}
+
+export function validateDeclaredAgePref(
+ v: V,
+): ValidationResult {
+ return validate(v, id, hashDeclaredAgePref);
+}
+
export interface FeedViewPref {
$type?: "app.bsky.actor.defs#feedViewPref";
/** The URI of the feed, or an identifier which describes the feed. */
@@ -406,11 +490,13 @@ export interface FeedViewPref {
const hashFeedViewPref = "feedViewPref";
-export function isFeedViewPref(v: V) {
+export function isFeedViewPref(v: V): v is FeedViewPref & V {
return is$typed(v, id, hashFeedViewPref);
}
-export function validateFeedViewPref(v: V) {
+export function validateFeedViewPref(
+ v: V,
+): ValidationResult {
return validate(v, id, hashFeedViewPref);
}
@@ -428,11 +514,13 @@ export interface ThreadViewPref {
const hashThreadViewPref = "threadViewPref";
-export function isThreadViewPref(v: V) {
+export function isThreadViewPref(v: V): v is ThreadViewPref & V {
return is$typed(v, id, hashThreadViewPref);
}
-export function validateThreadViewPref(v: V) {
+export function validateThreadViewPref(
+ v: V,
+): ValidationResult {
return validate(v, id, hashThreadViewPref);
}
@@ -444,11 +532,13 @@ export interface InterestsPref {
const hashInterestsPref = "interestsPref";
-export function isInterestsPref(v: V) {
+export function isInterestsPref(v: V): v is InterestsPref & V {
return is$typed(v, id, hashInterestsPref);
}
-export function validateInterestsPref(v: V) {
+export function validateInterestsPref(
+ v: V,
+): ValidationResult {
return validate(v, id, hashInterestsPref);
}
@@ -476,11 +566,11 @@ export interface MutedWord {
const hashMutedWord = "mutedWord";
-export function isMutedWord(v: V) {
+export function isMutedWord(v: V): v is MutedWord & V {
return is$typed(v, id, hashMutedWord);
}
-export function validateMutedWord(v: V) {
+export function validateMutedWord(v: V): ValidationResult {
return validate(v, id, hashMutedWord);
}
@@ -492,11 +582,13 @@ export interface MutedWordsPref {
const hashMutedWordsPref = "mutedWordsPref";
-export function isMutedWordsPref(v: V) {
+export function isMutedWordsPref(v: V): v is MutedWordsPref & V {
return is$typed(v, id, hashMutedWordsPref);
}
-export function validateMutedWordsPref(v: V) {
+export function validateMutedWordsPref(
+ v: V,
+): ValidationResult {
return validate(v, id, hashMutedWordsPref);
}
@@ -508,11 +600,13 @@ export interface HiddenPostsPref {
const hashHiddenPostsPref = "hiddenPostsPref";
-export function isHiddenPostsPref(v: V) {
+export function isHiddenPostsPref(v: V): v is HiddenPostsPref & V {
return is$typed(v, id, hashHiddenPostsPref);
}
-export function validateHiddenPostsPref(v: V) {
+export function validateHiddenPostsPref(
+ v: V,
+): ValidationResult {
return validate(v, id, hashHiddenPostsPref);
}
@@ -523,11 +617,13 @@ export interface LabelersPref {
const hashLabelersPref = "labelersPref";
-export function isLabelersPref(v: V) {
+export function isLabelersPref(v: V): v is LabelersPref & V {
return is$typed(v, id, hashLabelersPref);
}
-export function validateLabelersPref(v: V) {
+export function validateLabelersPref(
+ v: V,
+): ValidationResult {
return validate(v, id, hashLabelersPref);
}
@@ -538,11 +634,13 @@ export interface LabelerPrefItem {
const hashLabelerPrefItem = "labelerPrefItem";
-export function isLabelerPrefItem(v: V) {
+export function isLabelerPrefItem(v: V): v is LabelerPrefItem & V {
return is$typed(v, id, hashLabelerPrefItem);
}
-export function validateLabelerPrefItem(v: V) {
+export function validateLabelerPrefItem(
+ v: V,
+): ValidationResult {
return validate(v, id, hashLabelerPrefItem);
}
@@ -558,11 +656,13 @@ export interface BskyAppStatePref {
const hashBskyAppStatePref = "bskyAppStatePref";
-export function isBskyAppStatePref(v: V) {
+export function isBskyAppStatePref(v: V): v is BskyAppStatePref & V {
return is$typed(v, id, hashBskyAppStatePref);
}
-export function validateBskyAppStatePref(v: V) {
+export function validateBskyAppStatePref(
+ v: V,
+): ValidationResult {
return validate(v, id, hashBskyAppStatePref);
}
@@ -574,11 +674,13 @@ export interface BskyAppProgressGuide {
const hashBskyAppProgressGuide = "bskyAppProgressGuide";
-export function isBskyAppProgressGuide(v: V) {
+export function isBskyAppProgressGuide(v: V): v is BskyAppProgressGuide & V {
return is$typed(v, id, hashBskyAppProgressGuide);
}
-export function validateBskyAppProgressGuide(v: V) {
+export function validateBskyAppProgressGuide(
+ v: V,
+): ValidationResult {
return validate(v, id, hashBskyAppProgressGuide);
}
@@ -595,11 +697,11 @@ export interface Nux {
const hashNux = "nux";
-export function isNux(v: V) {
+export function isNux(v: V): v is Nux & V {
return is$typed(v, id, hashNux);
}
-export function validateNux(v: V) {
+export function validateNux(v: V): ValidationResult {
return validate(v, id, hashNux);
}
@@ -612,14 +714,37 @@ export interface VerificationPrefs {
const hashVerificationPrefs = "verificationPrefs";
-export function isVerificationPrefs(v: V) {
+export function isVerificationPrefs(v: V): v is VerificationPrefs & V {
return is$typed(v, id, hashVerificationPrefs);
}
-export function validateVerificationPrefs(v: V) {
+export function validateVerificationPrefs(
+ v: V,
+): ValidationResult {
return validate(v, id, hashVerificationPrefs);
}
+/** Preferences for live events. */
+export interface LiveEventPreferences {
+ $type?: "app.bsky.actor.defs#liveEventPreferences";
+ /** A list of feed IDs that the user has hidden from live events. */
+ hiddenFeedIds?: (string)[];
+ /** Whether to hide all feeds from live events. */
+ hideAllFeeds: boolean;
+}
+
+const hashLiveEventPreferences = "liveEventPreferences";
+
+export function isLiveEventPreferences(v: V): v is LiveEventPreferences & V {
+ return is$typed(v, id, hashLiveEventPreferences);
+}
+
+export function validateLiveEventPreferences(
+ v: V,
+): ValidationResult {
+ return validate(v, id, hashLiveEventPreferences);
+}
+
/** 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. */
export interface PostInteractionSettingsPref {
$type?: "app.bsky.actor.defs#postInteractionSettingsPref";
@@ -638,11 +763,15 @@ export interface PostInteractionSettingsPref {
const hashPostInteractionSettingsPref = "postInteractionSettingsPref";
-export function isPostInteractionSettingsPref(v: V) {
+export function isPostInteractionSettingsPref(
+ v: V,
+): v is PostInteractionSettingsPref & V {
return is$typed(v, id, hashPostInteractionSettingsPref);
}
-export function validatePostInteractionSettingsPref(v: V) {
+export function validatePostInteractionSettingsPref(
+ v: V,
+): ValidationResult {
return validate(
v,
id,
@@ -652,24 +781,29 @@ export function validatePostInteractionSettingsPref(v: V) {
export interface StatusView {
$type?: "app.bsky.actor.defs#statusView";
+ uri?: string;
+ cid?: string;
/** The status for the account. */
status:
| "app.bsky.actor.status#live"
| (string & globalThis.Record);
record: { [_ in string]: unknown };
embed?: $Typed | { $type: string };
+ labels?: (ComAtprotoLabelDefs.Label)[];
/** The date when this status will expire. The application might choose to no longer return the status after expiration. */
expiresAt?: string;
/** True if the status is not expired, false if it is expired. Only present if expiration was set. */
isActive?: boolean;
+ /** True if the user's go-live access has been disabled by a moderator, false otherwise. */
+ isDisabled?: boolean;
}
const hashStatusView = "statusView";
-export function isStatusView(v: V) {
+export function isStatusView(v: V): v is StatusView & V {
return is$typed(v, id, hashStatusView);
}
-export function validateStatusView(v: V) {
+export function validateStatusView(v: V): ValidationResult {
return validate(v, id, hashStatusView);
}
diff --git a/lex/types/app/bsky/actor/getSuggestions.ts b/lex/types/app/bsky/actor/getSuggestions.ts
index cc816c4..7c7c592 100644
--- a/lex/types/app/bsky/actor/getSuggestions.ts
+++ b/lex/types/app/bsky/actor/getSuggestions.ts
@@ -12,8 +12,10 @@ export type InputSchema = undefined;
export interface OutputSchema {
cursor?: string;
actors: (AppBskyActorDefs.ProfileView)[];
- /** Snowflake for this recommendation, use when submitting recommendation events. */
+ /** DEPRECATED: use recIdStr instead. */
recId?: number;
+ /** Snowflake for this recommendation, use when submitting recommendation events. */
+ recIdStr?: string;
}
export type HandlerInput = void;
diff --git a/lex/types/app/bsky/actor/profile.ts b/lex/types/app/bsky/actor/profile.ts
index 874b304..c3da286 100644
--- a/lex/types/app/bsky/actor/profile.ts
+++ b/lex/types/app/bsky/actor/profile.ts
@@ -3,6 +3,7 @@
*/
import type { BlobRef } from "@atp/lexicon";
import { validate as _validate } from "../../../../lexicons.ts";
+import type { ValidationResult } from "@atp/lexicon";
import { type $Typed, is$typed as _is$typed } from "../../../../util.ts";
import type * as ComAtprotoLabelDefs from "../../../com/atproto/label/defs.ts";
import type * as ComAtprotoRepoStrongRef from "../../../com/atproto/repo/strongRef.ts";
@@ -31,11 +32,11 @@ export interface Record {
const hashRecord = "main";
-export function isRecord(v: V) {
+export function isRecord(v: V): v is Record & V {
return is$typed(v, id, hashRecord);
}
-export function validateRecord(v: V) {
+export function validateRecord(v: V): ValidationResult {
return validate(v, id, hashRecord, true);
}
diff --git a/lex/types/app/bsky/actor/status.ts b/lex/types/app/bsky/actor/status.ts
index d45238f..099bfe6 100644
--- a/lex/types/app/bsky/actor/status.ts
+++ b/lex/types/app/bsky/actor/status.ts
@@ -2,6 +2,7 @@
* GENERATED CODE - DO NOT MODIFY
*/
import { validate as _validate } from "../../../../lexicons.ts";
+import type { ValidationResult } from "@atp/lexicon";
import { type $Typed, is$typed as _is$typed } from "../../../../util.ts";
import type * as AppBskyEmbedExternal from "../embed/external.ts";
@@ -23,15 +24,15 @@ export interface Record {
const hashRecord = "main";
-export function isRecord(v: V) {
+export function isRecord(v: V): v is Record & V {
return is$typed(v, id, hashRecord);
}
-export function validateRecord(v: V) {
+export function validateRecord(v: V): ValidationResult {
return validate(v, id, hashRecord, true);
}
export type Main = Record;
/** Advertises an account as currently offering live content. */
-export const LIVE = `${id}#live`;
+export const LIVE: string = `${id}#live`;
diff --git a/lex/types/app/bsky/ageassurance/defs.ts b/lex/types/app/bsky/ageassurance/defs.ts
index 169529b..0fa0b3b 100644
--- a/lex/types/app/bsky/ageassurance/defs.ts
+++ b/lex/types/app/bsky/ageassurance/defs.ts
@@ -2,6 +2,7 @@
* GENERATED CODE - DO NOT MODIFY
*/
import { validate as _validate } from "../../../../lexicons.ts";
+import type { ValidationResult } from "@atp/lexicon";
import { type $Typed, is$typed as _is$typed } from "../../../../util.ts";
const is$typed = _is$typed, validate = _validate;
@@ -33,11 +34,11 @@ export interface State {
const hashState = "state";
-export function isState(v: V) {
+export function isState(v: V): v is State & V {
return is$typed(v, id, hashState);
}
-export function validateState(v: V) {
+export function validateState(v: V): ValidationResult {
return validate(v, id, hashState);
}
@@ -50,11 +51,13 @@ export interface StateMetadata {
const hashStateMetadata = "stateMetadata";
-export function isStateMetadata(v: V) {
+export function isStateMetadata(v: V): v is StateMetadata & V {
return is$typed(v, id, hashStateMetadata);
}
-export function validateStateMetadata(v: V) {
+export function validateStateMetadata(
+ v: V,
+): ValidationResult {
return validate(v, id, hashStateMetadata);
}
@@ -66,11 +69,11 @@ export interface Config {
const hashConfig = "config";
-export function isConfig(v: V) {
+export function isConfig(v: V): v is Config & V {
return is$typed(v, id, hashConfig);
}
-export function validateConfig(v: V) {
+export function validateConfig(v: V): ValidationResult {
return validate(v, id, hashConfig);
}
@@ -81,6 +84,8 @@ export interface ConfigRegion {
countryCode: string;
/** The ISO 3166-2 region code this configuration applies to. If omitted, the configuration applies to the entire country. */
regionCode?: string;
+ /** The minimum age (as a whole integer) required to use Bluesky in this region. */
+ minAccessAge: number;
/** 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. */
rules: (
| $Typed
@@ -96,11 +101,13 @@ export interface ConfigRegion {
const hashConfigRegion = "configRegion";
-export function isConfigRegion(v: V) {
+export function isConfigRegion(v: V): v is ConfigRegion & V {
return is$typed(v, id, hashConfigRegion);
}
-export function validateConfigRegion(v: V) {
+export function validateConfigRegion(
+ v: V,
+): ValidationResult {
return validate(v, id, hashConfigRegion);
}
@@ -112,11 +119,15 @@ export interface ConfigRegionRuleDefault {
const hashConfigRegionRuleDefault = "configRegionRuleDefault";
-export function isConfigRegionRuleDefault(v: V) {
+export function isConfigRegionRuleDefault(
+ v: V,
+): v is ConfigRegionRuleDefault & V {
return is$typed(v, id, hashConfigRegionRuleDefault);
}
-export function validateConfigRegionRuleDefault(v: V) {
+export function validateConfigRegionRuleDefault(
+ v: V,
+): ValidationResult {
return validate(
v,
id,
@@ -135,11 +146,15 @@ export interface ConfigRegionRuleIfDeclaredOverAge {
const hashConfigRegionRuleIfDeclaredOverAge =
"configRegionRuleIfDeclaredOverAge";
-export function isConfigRegionRuleIfDeclaredOverAge(v: V) {
+export function isConfigRegionRuleIfDeclaredOverAge(
+ v: V,
+): v is ConfigRegionRuleIfDeclaredOverAge & V {
return is$typed(v, id, hashConfigRegionRuleIfDeclaredOverAge);
}
-export function validateConfigRegionRuleIfDeclaredOverAge(v: V) {
+export function validateConfigRegionRuleIfDeclaredOverAge