Copy disabled (too large)
Download .txt
Showing preview only (18,446K chars total). Download the full file to get everything.
Repository: bluesky-social/atproto
Branch: main
Commit: 57ca2109f30f
Files: 4261
Total size: 16.8 MB
Directory structure:
gitextract_m_xioowf/
├── .changeset/
│ ├── README.md
│ ├── config.json
│ ├── giant-goats-repeat.md
│ └── nine-eyes-switch.md
├── .dockerignore
├── .eslintignore
├── .eslintrc
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ └── workflows/
│ ├── build-and-push-bsky-aws.yaml
│ ├── build-and-push-bsky-ghcr.yaml
│ ├── build-and-push-bsync-aws.yaml
│ ├── build-and-push-bsync-ghcr.yaml
│ ├── build-and-push-ozone-aws.yaml
│ ├── build-and-push-ozone-ghcr.yaml
│ ├── build-and-push-pds-aws.yaml
│ ├── build-and-push-pds-ghcr.yaml
│ ├── claude.yaml
│ ├── publish.yaml
│ ├── repo.yaml
│ └── sync-internal.yaml
├── .gitignore
├── .npmrc
├── .nvmrc
├── .prettierignore
├── .prettierrc
├── .vscode/
│ ├── extensions.json
│ └── settings.json
├── CONTRIBUTORS.md
├── LICENSE-APACHE.txt
├── LICENSE-MIT.txt
├── LICENSE.txt
├── Makefile
├── README.md
├── SECURITY.md
├── interop-test-files/
│ ├── README.md
│ ├── crypto/
│ │ ├── signature-fixtures.json
│ │ ├── w3c_didkey_K256.json
│ │ └── w3c_didkey_P256.json
│ └── syntax/
│ ├── atidentifier_syntax_invalid.txt
│ ├── atidentifier_syntax_valid.txt
│ ├── aturi_syntax_invalid.txt
│ ├── aturi_syntax_valid.txt
│ ├── datetime_parse_invalid.txt
│ ├── datetime_syntax_invalid.txt
│ ├── datetime_syntax_valid.txt
│ ├── did_syntax_invalid.txt
│ ├── did_syntax_valid.txt
│ ├── handle_syntax_invalid.txt
│ ├── handle_syntax_valid.txt
│ ├── nsid_syntax_invalid.txt
│ ├── nsid_syntax_valid.txt
│ ├── recordkey_syntax_invalid.txt
│ ├── recordkey_syntax_valid.txt
│ ├── tid_syntax_invalid.txt
│ └── tid_syntax_valid.txt
├── jest.config.js
├── jest.setup.ts
├── lexicons/
│ ├── app/
│ │ └── bsky/
│ │ ├── actor/
│ │ │ ├── defs.json
│ │ │ ├── getPreferences.json
│ │ │ ├── getProfile.json
│ │ │ ├── getProfiles.json
│ │ │ ├── getSuggestions.json
│ │ │ ├── profile.json
│ │ │ ├── putPreferences.json
│ │ │ ├── searchActors.json
│ │ │ ├── searchActorsTypeahead.json
│ │ │ └── status.json
│ │ ├── ageassurance/
│ │ │ ├── begin.json
│ │ │ ├── defs.json
│ │ │ ├── getConfig.json
│ │ │ └── getState.json
│ │ ├── authCreatePosts.json
│ │ ├── authDeleteContent.json
│ │ ├── authFullApp.json
│ │ ├── authManageFeedDeclarations.json
│ │ ├── authManageLabelerService.json
│ │ ├── authManageModeration.json
│ │ ├── authManageNotifications.json
│ │ ├── authManageProfile.json
│ │ ├── authViewAll.json
│ │ ├── bookmark/
│ │ │ ├── createBookmark.json
│ │ │ ├── defs.json
│ │ │ ├── deleteBookmark.json
│ │ │ └── getBookmarks.json
│ │ ├── contact/
│ │ │ ├── defs.json
│ │ │ ├── dismissMatch.json
│ │ │ ├── getMatches.json
│ │ │ ├── getSyncStatus.json
│ │ │ ├── importContacts.json
│ │ │ ├── removeData.json
│ │ │ ├── sendNotification.json
│ │ │ ├── startPhoneVerification.json
│ │ │ └── verifyPhone.json
│ │ ├── draft/
│ │ │ ├── createDraft.json
│ │ │ ├── defs.json
│ │ │ ├── deleteDraft.json
│ │ │ ├── getDrafts.json
│ │ │ └── updateDraft.json
│ │ ├── embed/
│ │ │ ├── defs.json
│ │ │ ├── external.json
│ │ │ ├── images.json
│ │ │ ├── record.json
│ │ │ ├── recordWithMedia.json
│ │ │ └── video.json
│ │ ├── feed/
│ │ │ ├── defs.json
│ │ │ ├── describeFeedGenerator.json
│ │ │ ├── generator.json
│ │ │ ├── getActorFeeds.json
│ │ │ ├── getActorLikes.json
│ │ │ ├── getAuthorFeed.json
│ │ │ ├── getFeed.json
│ │ │ ├── getFeedGenerator.json
│ │ │ ├── getFeedGenerators.json
│ │ │ ├── getFeedSkeleton.json
│ │ │ ├── getLikes.json
│ │ │ ├── getListFeed.json
│ │ │ ├── getPostThread.json
│ │ │ ├── getPosts.json
│ │ │ ├── getQuotes.json
│ │ │ ├── getRepostedBy.json
│ │ │ ├── getSuggestedFeeds.json
│ │ │ ├── getTimeline.json
│ │ │ ├── like.json
│ │ │ ├── post.json
│ │ │ ├── postgate.json
│ │ │ ├── repost.json
│ │ │ ├── searchPosts.json
│ │ │ ├── sendInteractions.json
│ │ │ └── threadgate.json
│ │ ├── graph/
│ │ │ ├── block.json
│ │ │ ├── defs.json
│ │ │ ├── follow.json
│ │ │ ├── getActorStarterPacks.json
│ │ │ ├── getBlocks.json
│ │ │ ├── getFollowers.json
│ │ │ ├── getFollows.json
│ │ │ ├── getKnownFollowers.json
│ │ │ ├── getList.json
│ │ │ ├── getListBlocks.json
│ │ │ ├── getListMutes.json
│ │ │ ├── getLists.json
│ │ │ ├── getListsWithMembership.json
│ │ │ ├── getMutes.json
│ │ │ ├── getRelationships.json
│ │ │ ├── getStarterPack.json
│ │ │ ├── getStarterPacks.json
│ │ │ ├── getStarterPacksWithMembership.json
│ │ │ ├── getSuggestedFollowsByActor.json
│ │ │ ├── list.json
│ │ │ ├── listblock.json
│ │ │ ├── listitem.json
│ │ │ ├── muteActor.json
│ │ │ ├── muteActorList.json
│ │ │ ├── muteThread.json
│ │ │ ├── searchStarterPacks.json
│ │ │ ├── starterpack.json
│ │ │ ├── unmuteActor.json
│ │ │ ├── unmuteActorList.json
│ │ │ ├── unmuteThread.json
│ │ │ └── verification.json
│ │ ├── labeler/
│ │ │ ├── defs.json
│ │ │ ├── getServices.json
│ │ │ └── service.json
│ │ ├── notification/
│ │ │ ├── declaration.json
│ │ │ ├── defs.json
│ │ │ ├── getPreferences.json
│ │ │ ├── getUnreadCount.json
│ │ │ ├── listActivitySubscriptions.json
│ │ │ ├── listNotifications.json
│ │ │ ├── putActivitySubscription.json
│ │ │ ├── putPreferences.json
│ │ │ ├── putPreferencesV2.json
│ │ │ ├── registerPush.json
│ │ │ ├── unregisterPush.json
│ │ │ └── updateSeen.json
│ │ ├── richtext/
│ │ │ └── facet.json
│ │ ├── unspecced/
│ │ │ ├── defs.json
│ │ │ ├── getAgeAssuranceState.json
│ │ │ ├── getConfig.json
│ │ │ ├── getOnboardingSuggestedStarterPacks.json
│ │ │ ├── getOnboardingSuggestedStarterPacksSkeleton.json
│ │ │ ├── getOnboardingSuggestedUsersSkeleton.json
│ │ │ ├── getPopularFeedGenerators.json
│ │ │ ├── getPostThreadOtherV2.json
│ │ │ ├── getPostThreadV2.json
│ │ │ ├── getSuggestedFeeds.json
│ │ │ ├── getSuggestedFeedsSkeleton.json
│ │ │ ├── getSuggestedOnboardingUsers.json
│ │ │ ├── getSuggestedStarterPacks.json
│ │ │ ├── getSuggestedStarterPacksSkeleton.json
│ │ │ ├── getSuggestedUsers.json
│ │ │ ├── getSuggestedUsersSkeleton.json
│ │ │ ├── getSuggestionsSkeleton.json
│ │ │ ├── getTaggedSuggestions.json
│ │ │ ├── getTrendingTopics.json
│ │ │ ├── getTrends.json
│ │ │ ├── getTrendsSkeleton.json
│ │ │ ├── initAgeAssurance.json
│ │ │ ├── searchActorsSkeleton.json
│ │ │ ├── searchPostsSkeleton.json
│ │ │ └── searchStarterPacksSkeleton.json
│ │ └── video/
│ │ ├── defs.json
│ │ ├── getJobStatus.json
│ │ ├── getUploadLimits.json
│ │ └── uploadVideo.json
│ ├── chat/
│ │ └── bsky/
│ │ ├── actor/
│ │ │ ├── declaration.json
│ │ │ ├── defs.json
│ │ │ ├── deleteAccount.json
│ │ │ └── exportAccountData.json
│ │ ├── authFullChatClient.json
│ │ ├── convo/
│ │ │ ├── acceptConvo.json
│ │ │ ├── addReaction.json
│ │ │ ├── defs.json
│ │ │ ├── deleteMessageForSelf.json
│ │ │ ├── getConvo.json
│ │ │ ├── getConvoAvailability.json
│ │ │ ├── getConvoForMembers.json
│ │ │ ├── getLog.json
│ │ │ ├── getMessages.json
│ │ │ ├── leaveConvo.json
│ │ │ ├── listConvos.json
│ │ │ ├── muteConvo.json
│ │ │ ├── removeReaction.json
│ │ │ ├── sendMessage.json
│ │ │ ├── sendMessageBatch.json
│ │ │ ├── unmuteConvo.json
│ │ │ ├── updateAllRead.json
│ │ │ └── updateRead.json
│ │ └── moderation/
│ │ ├── getActorMetadata.json
│ │ ├── getMessageContext.json
│ │ └── updateActorAccess.json
│ ├── com/
│ │ ├── atproto/
│ │ │ ├── admin/
│ │ │ │ ├── defs.json
│ │ │ │ ├── deleteAccount.json
│ │ │ │ ├── disableAccountInvites.json
│ │ │ │ ├── disableInviteCodes.json
│ │ │ │ ├── enableAccountInvites.json
│ │ │ │ ├── getAccountInfo.json
│ │ │ │ ├── getAccountInfos.json
│ │ │ │ ├── getInviteCodes.json
│ │ │ │ ├── getSubjectStatus.json
│ │ │ │ ├── searchAccounts.json
│ │ │ │ ├── sendEmail.json
│ │ │ │ ├── updateAccountEmail.json
│ │ │ │ ├── updateAccountHandle.json
│ │ │ │ ├── updateAccountPassword.json
│ │ │ │ ├── updateAccountSigningKey.json
│ │ │ │ └── updateSubjectStatus.json
│ │ │ ├── identity/
│ │ │ │ ├── defs.json
│ │ │ │ ├── getRecommendedDidCredentials.json
│ │ │ │ ├── refreshIdentity.json
│ │ │ │ ├── requestPlcOperationSignature.json
│ │ │ │ ├── resolveDid.json
│ │ │ │ ├── resolveHandle.json
│ │ │ │ ├── resolveIdentity.json
│ │ │ │ ├── signPlcOperation.json
│ │ │ │ ├── submitPlcOperation.json
│ │ │ │ └── updateHandle.json
│ │ │ ├── label/
│ │ │ │ ├── defs.json
│ │ │ │ ├── queryLabels.json
│ │ │ │ └── subscribeLabels.json
│ │ │ ├── lexicon/
│ │ │ │ ├── resolveLexicon.json
│ │ │ │ └── schema.json
│ │ │ ├── moderation/
│ │ │ │ ├── createReport.json
│ │ │ │ └── defs.json
│ │ │ ├── repo/
│ │ │ │ ├── applyWrites.json
│ │ │ │ ├── createRecord.json
│ │ │ │ ├── defs.json
│ │ │ │ ├── deleteRecord.json
│ │ │ │ ├── describeRepo.json
│ │ │ │ ├── getRecord.json
│ │ │ │ ├── importRepo.json
│ │ │ │ ├── listMissingBlobs.json
│ │ │ │ ├── listRecords.json
│ │ │ │ ├── putRecord.json
│ │ │ │ ├── strongRef.json
│ │ │ │ └── uploadBlob.json
│ │ │ ├── server/
│ │ │ │ ├── activateAccount.json
│ │ │ │ ├── checkAccountStatus.json
│ │ │ │ ├── confirmEmail.json
│ │ │ │ ├── createAccount.json
│ │ │ │ ├── createAppPassword.json
│ │ │ │ ├── createInviteCode.json
│ │ │ │ ├── createInviteCodes.json
│ │ │ │ ├── createSession.json
│ │ │ │ ├── deactivateAccount.json
│ │ │ │ ├── defs.json
│ │ │ │ ├── deleteAccount.json
│ │ │ │ ├── deleteSession.json
│ │ │ │ ├── describeServer.json
│ │ │ │ ├── getAccountInviteCodes.json
│ │ │ │ ├── getServiceAuth.json
│ │ │ │ ├── getSession.json
│ │ │ │ ├── listAppPasswords.json
│ │ │ │ ├── refreshSession.json
│ │ │ │ ├── requestAccountDelete.json
│ │ │ │ ├── requestEmailConfirmation.json
│ │ │ │ ├── requestEmailUpdate.json
│ │ │ │ ├── requestPasswordReset.json
│ │ │ │ ├── reserveSigningKey.json
│ │ │ │ ├── resetPassword.json
│ │ │ │ ├── revokeAppPassword.json
│ │ │ │ └── updateEmail.json
│ │ │ ├── sync/
│ │ │ │ ├── defs.json
│ │ │ │ ├── getBlob.json
│ │ │ │ ├── getBlocks.json
│ │ │ │ ├── getCheckout.json
│ │ │ │ ├── getHead.json
│ │ │ │ ├── getHostStatus.json
│ │ │ │ ├── getLatestCommit.json
│ │ │ │ ├── getRecord.json
│ │ │ │ ├── getRepo.json
│ │ │ │ ├── getRepoStatus.json
│ │ │ │ ├── listBlobs.json
│ │ │ │ ├── listHosts.json
│ │ │ │ ├── listRepos.json
│ │ │ │ ├── listReposByCollection.json
│ │ │ │ ├── notifyOfUpdate.json
│ │ │ │ ├── requestCrawl.json
│ │ │ │ └── subscribeRepos.json
│ │ │ └── temp/
│ │ │ ├── addReservedHandle.json
│ │ │ ├── checkHandleAvailability.json
│ │ │ ├── checkSignupQueue.json
│ │ │ ├── dereferenceScope.json
│ │ │ ├── fetchLabels.json
│ │ │ ├── requestPhoneVerification.json
│ │ │ └── revokeAccountCredentials.json
│ │ └── germnetwork/
│ │ └── declaration.json
│ └── tools/
│ └── ozone/
│ ├── communication/
│ │ ├── createTemplate.json
│ │ ├── defs.json
│ │ ├── deleteTemplate.json
│ │ ├── listTemplates.json
│ │ └── updateTemplate.json
│ ├── hosting/
│ │ └── getAccountHistory.json
│ ├── moderation/
│ │ ├── cancelScheduledActions.json
│ │ ├── defs.json
│ │ ├── emitEvent.json
│ │ ├── getAccountTimeline.json
│ │ ├── getEvent.json
│ │ ├── getRecord.json
│ │ ├── getRecords.json
│ │ ├── getRepo.json
│ │ ├── getReporterStats.json
│ │ ├── getRepos.json
│ │ ├── getSubjects.json
│ │ ├── listScheduledActions.json
│ │ ├── queryEvents.json
│ │ ├── queryStatuses.json
│ │ ├── scheduleAction.json
│ │ └── searchRepos.json
│ ├── report/
│ │ └── defs.json
│ ├── safelink/
│ │ ├── addRule.json
│ │ ├── defs.json
│ │ ├── queryEvents.json
│ │ ├── queryRules.json
│ │ ├── removeRule.json
│ │ └── updateRule.json
│ ├── server/
│ │ └── getConfig.json
│ ├── set/
│ │ ├── addValues.json
│ │ ├── defs.json
│ │ ├── deleteSet.json
│ │ ├── deleteValues.json
│ │ ├── getValues.json
│ │ ├── querySets.json
│ │ └── upsertSet.json
│ ├── setting/
│ │ ├── defs.json
│ │ ├── listOptions.json
│ │ ├── removeOptions.json
│ │ └── upsertOption.json
│ ├── signature/
│ │ ├── defs.json
│ │ ├── findCorrelation.json
│ │ ├── findRelatedAccounts.json
│ │ └── searchAccounts.json
│ ├── team/
│ │ ├── addMember.json
│ │ ├── defs.json
│ │ ├── deleteMember.json
│ │ ├── listMembers.json
│ │ └── updateMember.json
│ └── verification/
│ ├── defs.json
│ ├── grantVerifications.json
│ ├── listVerifications.json
│ └── revokeVerifications.json
├── package.json
├── packages/
│ ├── README.md
│ ├── api/
│ │ ├── CHANGELOG.md
│ │ ├── OAUTH.md
│ │ ├── README.md
│ │ ├── definitions/
│ │ │ └── labels.json
│ │ ├── docs/
│ │ │ └── moderation.md
│ │ ├── jest.config.js
│ │ ├── jest.d.ts
│ │ ├── jest.setup.ts
│ │ ├── package.json
│ │ ├── scripts/
│ │ │ ├── code/
│ │ │ │ └── labels.mjs
│ │ │ └── generate-code.mjs
│ │ ├── src/
│ │ │ ├── age-assurance.test.ts
│ │ │ ├── age-assurance.ts
│ │ │ ├── agent.ts
│ │ │ ├── atp-agent.ts
│ │ │ ├── bsky-agent.ts
│ │ │ ├── client/
│ │ │ │ ├── index.ts
│ │ │ │ ├── lexicons.ts
│ │ │ │ ├── types/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── bsky/
│ │ │ │ │ │ ├── actor/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getPreferences.ts
│ │ │ │ │ │ │ ├── getProfile.ts
│ │ │ │ │ │ │ ├── getProfiles.ts
│ │ │ │ │ │ │ ├── getSuggestions.ts
│ │ │ │ │ │ │ ├── profile.ts
│ │ │ │ │ │ │ ├── putPreferences.ts
│ │ │ │ │ │ │ ├── searchActors.ts
│ │ │ │ │ │ │ ├── searchActorsTypeahead.ts
│ │ │ │ │ │ │ └── status.ts
│ │ │ │ │ │ ├── ageassurance/
│ │ │ │ │ │ │ ├── begin.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getConfig.ts
│ │ │ │ │ │ │ └── getState.ts
│ │ │ │ │ │ ├── bookmark/
│ │ │ │ │ │ │ ├── createBookmark.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteBookmark.ts
│ │ │ │ │ │ │ └── getBookmarks.ts
│ │ │ │ │ │ ├── contact/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── dismissMatch.ts
│ │ │ │ │ │ │ ├── getMatches.ts
│ │ │ │ │ │ │ ├── getSyncStatus.ts
│ │ │ │ │ │ │ ├── importContacts.ts
│ │ │ │ │ │ │ ├── removeData.ts
│ │ │ │ │ │ │ ├── sendNotification.ts
│ │ │ │ │ │ │ ├── startPhoneVerification.ts
│ │ │ │ │ │ │ └── verifyPhone.ts
│ │ │ │ │ │ ├── draft/
│ │ │ │ │ │ │ ├── createDraft.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteDraft.ts
│ │ │ │ │ │ │ ├── getDrafts.ts
│ │ │ │ │ │ │ └── updateDraft.ts
│ │ │ │ │ │ ├── embed/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── external.ts
│ │ │ │ │ │ │ ├── images.ts
│ │ │ │ │ │ │ ├── record.ts
│ │ │ │ │ │ │ ├── recordWithMedia.ts
│ │ │ │ │ │ │ └── video.ts
│ │ │ │ │ │ ├── feed/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── describeFeedGenerator.ts
│ │ │ │ │ │ │ ├── generator.ts
│ │ │ │ │ │ │ ├── getActorFeeds.ts
│ │ │ │ │ │ │ ├── getActorLikes.ts
│ │ │ │ │ │ │ ├── getAuthorFeed.ts
│ │ │ │ │ │ │ ├── getFeed.ts
│ │ │ │ │ │ │ ├── getFeedGenerator.ts
│ │ │ │ │ │ │ ├── getFeedGenerators.ts
│ │ │ │ │ │ │ ├── getFeedSkeleton.ts
│ │ │ │ │ │ │ ├── getLikes.ts
│ │ │ │ │ │ │ ├── getListFeed.ts
│ │ │ │ │ │ │ ├── getPostThread.ts
│ │ │ │ │ │ │ ├── getPosts.ts
│ │ │ │ │ │ │ ├── getQuotes.ts
│ │ │ │ │ │ │ ├── getRepostedBy.ts
│ │ │ │ │ │ │ ├── getSuggestedFeeds.ts
│ │ │ │ │ │ │ ├── getTimeline.ts
│ │ │ │ │ │ │ ├── like.ts
│ │ │ │ │ │ │ ├── post.ts
│ │ │ │ │ │ │ ├── postgate.ts
│ │ │ │ │ │ │ ├── repost.ts
│ │ │ │ │ │ │ ├── searchPosts.ts
│ │ │ │ │ │ │ ├── sendInteractions.ts
│ │ │ │ │ │ │ └── threadgate.ts
│ │ │ │ │ │ ├── graph/
│ │ │ │ │ │ │ ├── block.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── follow.ts
│ │ │ │ │ │ │ ├── getActorStarterPacks.ts
│ │ │ │ │ │ │ ├── getBlocks.ts
│ │ │ │ │ │ │ ├── getFollowers.ts
│ │ │ │ │ │ │ ├── getFollows.ts
│ │ │ │ │ │ │ ├── getKnownFollowers.ts
│ │ │ │ │ │ │ ├── getList.ts
│ │ │ │ │ │ │ ├── getListBlocks.ts
│ │ │ │ │ │ │ ├── getListMutes.ts
│ │ │ │ │ │ │ ├── getLists.ts
│ │ │ │ │ │ │ ├── getListsWithMembership.ts
│ │ │ │ │ │ │ ├── getMutes.ts
│ │ │ │ │ │ │ ├── getRelationships.ts
│ │ │ │ │ │ │ ├── getStarterPack.ts
│ │ │ │ │ │ │ ├── getStarterPacks.ts
│ │ │ │ │ │ │ ├── getStarterPacksWithMembership.ts
│ │ │ │ │ │ │ ├── getSuggestedFollowsByActor.ts
│ │ │ │ │ │ │ ├── list.ts
│ │ │ │ │ │ │ ├── listblock.ts
│ │ │ │ │ │ │ ├── listitem.ts
│ │ │ │ │ │ │ ├── muteActor.ts
│ │ │ │ │ │ │ ├── muteActorList.ts
│ │ │ │ │ │ │ ├── muteThread.ts
│ │ │ │ │ │ │ ├── searchStarterPacks.ts
│ │ │ │ │ │ │ ├── starterpack.ts
│ │ │ │ │ │ │ ├── unmuteActor.ts
│ │ │ │ │ │ │ ├── unmuteActorList.ts
│ │ │ │ │ │ │ ├── unmuteThread.ts
│ │ │ │ │ │ │ └── verification.ts
│ │ │ │ │ │ ├── labeler/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getServices.ts
│ │ │ │ │ │ │ └── service.ts
│ │ │ │ │ │ ├── notification/
│ │ │ │ │ │ │ ├── declaration.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getPreferences.ts
│ │ │ │ │ │ │ ├── getUnreadCount.ts
│ │ │ │ │ │ │ ├── listActivitySubscriptions.ts
│ │ │ │ │ │ │ ├── listNotifications.ts
│ │ │ │ │ │ │ ├── putActivitySubscription.ts
│ │ │ │ │ │ │ ├── putPreferences.ts
│ │ │ │ │ │ │ ├── putPreferencesV2.ts
│ │ │ │ │ │ │ ├── registerPush.ts
│ │ │ │ │ │ │ ├── unregisterPush.ts
│ │ │ │ │ │ │ └── updateSeen.ts
│ │ │ │ │ │ ├── richtext/
│ │ │ │ │ │ │ └── facet.ts
│ │ │ │ │ │ ├── unspecced/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getAgeAssuranceState.ts
│ │ │ │ │ │ │ ├── getConfig.ts
│ │ │ │ │ │ │ ├── getOnboardingSuggestedStarterPacks.ts
│ │ │ │ │ │ │ ├── getOnboardingSuggestedStarterPacksSkeleton.ts
│ │ │ │ │ │ │ ├── getOnboardingSuggestedUsersSkeleton.ts
│ │ │ │ │ │ │ ├── getPopularFeedGenerators.ts
│ │ │ │ │ │ │ ├── getPostThreadOtherV2.ts
│ │ │ │ │ │ │ ├── getPostThreadV2.ts
│ │ │ │ │ │ │ ├── getSuggestedFeeds.ts
│ │ │ │ │ │ │ ├── getSuggestedFeedsSkeleton.ts
│ │ │ │ │ │ │ ├── getSuggestedOnboardingUsers.ts
│ │ │ │ │ │ │ ├── getSuggestedStarterPacks.ts
│ │ │ │ │ │ │ ├── getSuggestedStarterPacksSkeleton.ts
│ │ │ │ │ │ │ ├── getSuggestedUsers.ts
│ │ │ │ │ │ │ ├── getSuggestedUsersSkeleton.ts
│ │ │ │ │ │ │ ├── getSuggestionsSkeleton.ts
│ │ │ │ │ │ │ ├── getTaggedSuggestions.ts
│ │ │ │ │ │ │ ├── getTrendingTopics.ts
│ │ │ │ │ │ │ ├── getTrends.ts
│ │ │ │ │ │ │ ├── getTrendsSkeleton.ts
│ │ │ │ │ │ │ ├── initAgeAssurance.ts
│ │ │ │ │ │ │ ├── searchActorsSkeleton.ts
│ │ │ │ │ │ │ ├── searchPostsSkeleton.ts
│ │ │ │ │ │ │ └── searchStarterPacksSkeleton.ts
│ │ │ │ │ │ └── video/
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── getJobStatus.ts
│ │ │ │ │ │ ├── getUploadLimits.ts
│ │ │ │ │ │ └── uploadVideo.ts
│ │ │ │ │ ├── chat/
│ │ │ │ │ │ └── bsky/
│ │ │ │ │ │ ├── actor/
│ │ │ │ │ │ │ ├── declaration.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteAccount.ts
│ │ │ │ │ │ │ └── exportAccountData.ts
│ │ │ │ │ │ ├── convo/
│ │ │ │ │ │ │ ├── acceptConvo.ts
│ │ │ │ │ │ │ ├── addReaction.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteMessageForSelf.ts
│ │ │ │ │ │ │ ├── getConvo.ts
│ │ │ │ │ │ │ ├── getConvoAvailability.ts
│ │ │ │ │ │ │ ├── getConvoForMembers.ts
│ │ │ │ │ │ │ ├── getLog.ts
│ │ │ │ │ │ │ ├── getMessages.ts
│ │ │ │ │ │ │ ├── leaveConvo.ts
│ │ │ │ │ │ │ ├── listConvos.ts
│ │ │ │ │ │ │ ├── muteConvo.ts
│ │ │ │ │ │ │ ├── removeReaction.ts
│ │ │ │ │ │ │ ├── sendMessage.ts
│ │ │ │ │ │ │ ├── sendMessageBatch.ts
│ │ │ │ │ │ │ ├── unmuteConvo.ts
│ │ │ │ │ │ │ ├── updateAllRead.ts
│ │ │ │ │ │ │ └── updateRead.ts
│ │ │ │ │ │ └── moderation/
│ │ │ │ │ │ ├── getActorMetadata.ts
│ │ │ │ │ │ ├── getMessageContext.ts
│ │ │ │ │ │ └── updateActorAccess.ts
│ │ │ │ │ ├── com/
│ │ │ │ │ │ ├── atproto/
│ │ │ │ │ │ │ ├── admin/
│ │ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ │ ├── deleteAccount.ts
│ │ │ │ │ │ │ │ ├── disableAccountInvites.ts
│ │ │ │ │ │ │ │ ├── disableInviteCodes.ts
│ │ │ │ │ │ │ │ ├── enableAccountInvites.ts
│ │ │ │ │ │ │ │ ├── getAccountInfo.ts
│ │ │ │ │ │ │ │ ├── getAccountInfos.ts
│ │ │ │ │ │ │ │ ├── getInviteCodes.ts
│ │ │ │ │ │ │ │ ├── getSubjectStatus.ts
│ │ │ │ │ │ │ │ ├── searchAccounts.ts
│ │ │ │ │ │ │ │ ├── sendEmail.ts
│ │ │ │ │ │ │ │ ├── updateAccountEmail.ts
│ │ │ │ │ │ │ │ ├── updateAccountHandle.ts
│ │ │ │ │ │ │ │ ├── updateAccountPassword.ts
│ │ │ │ │ │ │ │ ├── updateAccountSigningKey.ts
│ │ │ │ │ │ │ │ └── updateSubjectStatus.ts
│ │ │ │ │ │ │ ├── identity/
│ │ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ │ ├── getRecommendedDidCredentials.ts
│ │ │ │ │ │ │ │ ├── refreshIdentity.ts
│ │ │ │ │ │ │ │ ├── requestPlcOperationSignature.ts
│ │ │ │ │ │ │ │ ├── resolveDid.ts
│ │ │ │ │ │ │ │ ├── resolveHandle.ts
│ │ │ │ │ │ │ │ ├── resolveIdentity.ts
│ │ │ │ │ │ │ │ ├── signPlcOperation.ts
│ │ │ │ │ │ │ │ ├── submitPlcOperation.ts
│ │ │ │ │ │ │ │ └── updateHandle.ts
│ │ │ │ │ │ │ ├── label/
│ │ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ │ ├── queryLabels.ts
│ │ │ │ │ │ │ │ └── subscribeLabels.ts
│ │ │ │ │ │ │ ├── lexicon/
│ │ │ │ │ │ │ │ ├── resolveLexicon.ts
│ │ │ │ │ │ │ │ └── schema.ts
│ │ │ │ │ │ │ ├── moderation/
│ │ │ │ │ │ │ │ ├── createReport.ts
│ │ │ │ │ │ │ │ └── defs.ts
│ │ │ │ │ │ │ ├── repo/
│ │ │ │ │ │ │ │ ├── applyWrites.ts
│ │ │ │ │ │ │ │ ├── createRecord.ts
│ │ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ │ ├── deleteRecord.ts
│ │ │ │ │ │ │ │ ├── describeRepo.ts
│ │ │ │ │ │ │ │ ├── getRecord.ts
│ │ │ │ │ │ │ │ ├── importRepo.ts
│ │ │ │ │ │ │ │ ├── listMissingBlobs.ts
│ │ │ │ │ │ │ │ ├── listRecords.ts
│ │ │ │ │ │ │ │ ├── putRecord.ts
│ │ │ │ │ │ │ │ ├── strongRef.ts
│ │ │ │ │ │ │ │ └── uploadBlob.ts
│ │ │ │ │ │ │ ├── server/
│ │ │ │ │ │ │ │ ├── activateAccount.ts
│ │ │ │ │ │ │ │ ├── checkAccountStatus.ts
│ │ │ │ │ │ │ │ ├── confirmEmail.ts
│ │ │ │ │ │ │ │ ├── createAccount.ts
│ │ │ │ │ │ │ │ ├── createAppPassword.ts
│ │ │ │ │ │ │ │ ├── createInviteCode.ts
│ │ │ │ │ │ │ │ ├── createInviteCodes.ts
│ │ │ │ │ │ │ │ ├── createSession.ts
│ │ │ │ │ │ │ │ ├── deactivateAccount.ts
│ │ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ │ ├── deleteAccount.ts
│ │ │ │ │ │ │ │ ├── deleteSession.ts
│ │ │ │ │ │ │ │ ├── describeServer.ts
│ │ │ │ │ │ │ │ ├── getAccountInviteCodes.ts
│ │ │ │ │ │ │ │ ├── getServiceAuth.ts
│ │ │ │ │ │ │ │ ├── getSession.ts
│ │ │ │ │ │ │ │ ├── listAppPasswords.ts
│ │ │ │ │ │ │ │ ├── refreshSession.ts
│ │ │ │ │ │ │ │ ├── requestAccountDelete.ts
│ │ │ │ │ │ │ │ ├── requestEmailConfirmation.ts
│ │ │ │ │ │ │ │ ├── requestEmailUpdate.ts
│ │ │ │ │ │ │ │ ├── requestPasswordReset.ts
│ │ │ │ │ │ │ │ ├── reserveSigningKey.ts
│ │ │ │ │ │ │ │ ├── resetPassword.ts
│ │ │ │ │ │ │ │ ├── revokeAppPassword.ts
│ │ │ │ │ │ │ │ └── updateEmail.ts
│ │ │ │ │ │ │ ├── sync/
│ │ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ │ ├── getBlob.ts
│ │ │ │ │ │ │ │ ├── getBlocks.ts
│ │ │ │ │ │ │ │ ├── getCheckout.ts
│ │ │ │ │ │ │ │ ├── getHead.ts
│ │ │ │ │ │ │ │ ├── getHostStatus.ts
│ │ │ │ │ │ │ │ ├── getLatestCommit.ts
│ │ │ │ │ │ │ │ ├── getRecord.ts
│ │ │ │ │ │ │ │ ├── getRepo.ts
│ │ │ │ │ │ │ │ ├── getRepoStatus.ts
│ │ │ │ │ │ │ │ ├── listBlobs.ts
│ │ │ │ │ │ │ │ ├── listHosts.ts
│ │ │ │ │ │ │ │ ├── listRepos.ts
│ │ │ │ │ │ │ │ ├── listReposByCollection.ts
│ │ │ │ │ │ │ │ ├── notifyOfUpdate.ts
│ │ │ │ │ │ │ │ ├── requestCrawl.ts
│ │ │ │ │ │ │ │ └── subscribeRepos.ts
│ │ │ │ │ │ │ └── temp/
│ │ │ │ │ │ │ ├── addReservedHandle.ts
│ │ │ │ │ │ │ ├── checkHandleAvailability.ts
│ │ │ │ │ │ │ ├── checkSignupQueue.ts
│ │ │ │ │ │ │ ├── dereferenceScope.ts
│ │ │ │ │ │ │ ├── fetchLabels.ts
│ │ │ │ │ │ │ ├── requestPhoneVerification.ts
│ │ │ │ │ │ │ └── revokeAccountCredentials.ts
│ │ │ │ │ │ └── germnetwork/
│ │ │ │ │ │ └── declaration.ts
│ │ │ │ │ └── tools/
│ │ │ │ │ └── ozone/
│ │ │ │ │ ├── communication/
│ │ │ │ │ │ ├── createTemplate.ts
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── deleteTemplate.ts
│ │ │ │ │ │ ├── listTemplates.ts
│ │ │ │ │ │ └── updateTemplate.ts
│ │ │ │ │ ├── hosting/
│ │ │ │ │ │ └── getAccountHistory.ts
│ │ │ │ │ ├── moderation/
│ │ │ │ │ │ ├── cancelScheduledActions.ts
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── emitEvent.ts
│ │ │ │ │ │ ├── getAccountTimeline.ts
│ │ │ │ │ │ ├── getEvent.ts
│ │ │ │ │ │ ├── getRecord.ts
│ │ │ │ │ │ ├── getRecords.ts
│ │ │ │ │ │ ├── getRepo.ts
│ │ │ │ │ │ ├── getReporterStats.ts
│ │ │ │ │ │ ├── getRepos.ts
│ │ │ │ │ │ ├── getSubjects.ts
│ │ │ │ │ │ ├── listScheduledActions.ts
│ │ │ │ │ │ ├── queryEvents.ts
│ │ │ │ │ │ ├── queryStatuses.ts
│ │ │ │ │ │ ├── scheduleAction.ts
│ │ │ │ │ │ └── searchRepos.ts
│ │ │ │ │ ├── report/
│ │ │ │ │ │ └── defs.ts
│ │ │ │ │ ├── safelink/
│ │ │ │ │ │ ├── addRule.ts
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── queryEvents.ts
│ │ │ │ │ │ ├── queryRules.ts
│ │ │ │ │ │ ├── removeRule.ts
│ │ │ │ │ │ └── updateRule.ts
│ │ │ │ │ ├── server/
│ │ │ │ │ │ └── getConfig.ts
│ │ │ │ │ ├── set/
│ │ │ │ │ │ ├── addValues.ts
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── deleteSet.ts
│ │ │ │ │ │ ├── deleteValues.ts
│ │ │ │ │ │ ├── getValues.ts
│ │ │ │ │ │ ├── querySets.ts
│ │ │ │ │ │ └── upsertSet.ts
│ │ │ │ │ ├── setting/
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── listOptions.ts
│ │ │ │ │ │ ├── removeOptions.ts
│ │ │ │ │ │ └── upsertOption.ts
│ │ │ │ │ ├── signature/
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── findCorrelation.ts
│ │ │ │ │ │ ├── findRelatedAccounts.ts
│ │ │ │ │ │ └── searchAccounts.ts
│ │ │ │ │ ├── team/
│ │ │ │ │ │ ├── addMember.ts
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── deleteMember.ts
│ │ │ │ │ │ ├── listMembers.ts
│ │ │ │ │ │ └── updateMember.ts
│ │ │ │ │ └── verification/
│ │ │ │ │ ├── defs.ts
│ │ │ │ │ ├── grantVerifications.ts
│ │ │ │ │ ├── listVerifications.ts
│ │ │ │ │ └── revokeVerifications.ts
│ │ │ │ └── util.ts
│ │ │ ├── const.ts
│ │ │ ├── index.ts
│ │ │ ├── mocker.ts
│ │ │ ├── moderation/
│ │ │ │ ├── const/
│ │ │ │ │ └── labels.ts
│ │ │ │ ├── decision.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── mutewords.ts
│ │ │ │ ├── subjects/
│ │ │ │ │ ├── account.ts
│ │ │ │ │ ├── feed-generator.ts
│ │ │ │ │ ├── notification.ts
│ │ │ │ │ ├── post.ts
│ │ │ │ │ ├── profile.ts
│ │ │ │ │ └── user-list.ts
│ │ │ │ ├── types.ts
│ │ │ │ ├── ui.ts
│ │ │ │ └── util.ts
│ │ │ ├── predicate.ts
│ │ │ ├── rich-text/
│ │ │ │ ├── detection.ts
│ │ │ │ ├── rich-text.ts
│ │ │ │ ├── sanitization.ts
│ │ │ │ ├── unicode.ts
│ │ │ │ └── util.ts
│ │ │ ├── session-manager.ts
│ │ │ ├── types.ts
│ │ │ └── util.ts
│ │ ├── tests/
│ │ │ ├── atp-agent.test.ts
│ │ │ ├── dispatcher.test.ts
│ │ │ ├── errors.test.ts
│ │ │ ├── moderation-behaviors.test.ts
│ │ │ ├── moderation-custom-labels.test.ts
│ │ │ ├── moderation-mutewords.test.ts
│ │ │ ├── moderation-prefs.test.ts
│ │ │ ├── moderation-quoteposts.test.ts
│ │ │ ├── moderation.test.ts
│ │ │ ├── rich-text-detection.test.ts
│ │ │ ├── rich-text-sanitization.test.ts
│ │ │ ├── rich-text.test.ts
│ │ │ └── util/
│ │ │ ├── echo-server.ts
│ │ │ └── moderation-behavior.ts
│ │ ├── tsconfig.build.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.tests.json
│ ├── aws/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── bunny.ts
│ │ │ ├── cloudfront.ts
│ │ │ ├── index.ts
│ │ │ ├── kms.ts
│ │ │ ├── s3.ts
│ │ │ ├── types.ts
│ │ │ └── util.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── bsky/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── bin/
│ │ │ └── migration-create.ts
│ │ ├── buf.gen.yaml
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── proto/
│ │ │ ├── bsky.proto
│ │ │ ├── courier.proto
│ │ │ └── rolodex.proto
│ │ ├── src/
│ │ │ ├── api/
│ │ │ │ ├── age-assurance/
│ │ │ │ │ ├── const.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── kws/
│ │ │ │ │ │ ├── age-verified.ts
│ │ │ │ │ │ ├── const.ts
│ │ │ │ │ │ ├── external-payload.test.ts
│ │ │ │ │ │ └── external-payload.ts
│ │ │ │ │ ├── redirects/
│ │ │ │ │ │ └── kws-age-verified.ts
│ │ │ │ │ ├── stash.ts
│ │ │ │ │ ├── types.ts
│ │ │ │ │ ├── util.ts
│ │ │ │ │ └── webhooks/
│ │ │ │ │ └── kws-age-verified.ts
│ │ │ │ ├── app/
│ │ │ │ │ └── bsky/
│ │ │ │ │ ├── actor/
│ │ │ │ │ │ ├── getProfile.ts
│ │ │ │ │ │ ├── getProfiles.ts
│ │ │ │ │ │ ├── getSuggestions.ts
│ │ │ │ │ │ ├── searchActors.ts
│ │ │ │ │ │ └── searchActorsTypeahead.ts
│ │ │ │ │ ├── ageassurance/
│ │ │ │ │ │ ├── begin.ts
│ │ │ │ │ │ ├── getConfig.ts
│ │ │ │ │ │ └── getState.ts
│ │ │ │ │ ├── bookmark/
│ │ │ │ │ │ ├── createBookmark.ts
│ │ │ │ │ │ ├── deleteBookmark.ts
│ │ │ │ │ │ ├── getBookmarks.ts
│ │ │ │ │ │ └── util.ts
│ │ │ │ │ ├── contact/
│ │ │ │ │ │ ├── dismissMatch.ts
│ │ │ │ │ │ ├── getMatches.ts
│ │ │ │ │ │ ├── getSyncStatus.ts
│ │ │ │ │ │ ├── importContacts.ts
│ │ │ │ │ │ ├── removeData.ts
│ │ │ │ │ │ ├── sendNotification.ts
│ │ │ │ │ │ ├── startPhoneVerification.ts
│ │ │ │ │ │ ├── util.ts
│ │ │ │ │ │ └── verifyPhone.ts
│ │ │ │ │ ├── draft/
│ │ │ │ │ │ ├── createDraft.ts
│ │ │ │ │ │ ├── deleteDraft.ts
│ │ │ │ │ │ ├── getDrafts.ts
│ │ │ │ │ │ └── updateDraft.ts
│ │ │ │ │ ├── feed/
│ │ │ │ │ │ ├── getActorFeeds.ts
│ │ │ │ │ │ ├── getActorLikes.ts
│ │ │ │ │ │ ├── getAuthorFeed.ts
│ │ │ │ │ │ ├── getFeed.ts
│ │ │ │ │ │ ├── getFeedGenerator.ts
│ │ │ │ │ │ ├── getFeedGenerators.ts
│ │ │ │ │ │ ├── getLikes.ts
│ │ │ │ │ │ ├── getListFeed.ts
│ │ │ │ │ │ ├── getPostThread.ts
│ │ │ │ │ │ ├── getPosts.ts
│ │ │ │ │ │ ├── getQuotes.ts
│ │ │ │ │ │ ├── getRepostedBy.ts
│ │ │ │ │ │ ├── getSuggestedFeeds.ts
│ │ │ │ │ │ ├── getTimeline.ts
│ │ │ │ │ │ └── searchPosts.ts
│ │ │ │ │ ├── graph/
│ │ │ │ │ │ ├── getActorStarterPacks.ts
│ │ │ │ │ │ ├── getBlocks.ts
│ │ │ │ │ │ ├── getFollowers.ts
│ │ │ │ │ │ ├── getFollows.ts
│ │ │ │ │ │ ├── getKnownFollowers.ts
│ │ │ │ │ │ ├── getList.ts
│ │ │ │ │ │ ├── getListBlocks.ts
│ │ │ │ │ │ ├── getListMutes.ts
│ │ │ │ │ │ ├── getLists.ts
│ │ │ │ │ │ ├── getListsWithMembership.ts
│ │ │ │ │ │ ├── getMutes.ts
│ │ │ │ │ │ ├── getRelationships.ts
│ │ │ │ │ │ ├── getStarterPack.ts
│ │ │ │ │ │ ├── getStarterPacks.ts
│ │ │ │ │ │ ├── getStarterPacksWithMembership.ts
│ │ │ │ │ │ ├── getSuggestedFollowsByActor.ts
│ │ │ │ │ │ ├── muteActor.ts
│ │ │ │ │ │ ├── muteActorList.ts
│ │ │ │ │ │ ├── muteThread.ts
│ │ │ │ │ │ ├── searchStarterPacks.ts
│ │ │ │ │ │ ├── unmuteActor.ts
│ │ │ │ │ │ ├── unmuteActorList.ts
│ │ │ │ │ │ └── unmuteThread.ts
│ │ │ │ │ ├── labeler/
│ │ │ │ │ │ └── getServices.ts
│ │ │ │ │ ├── notification/
│ │ │ │ │ │ ├── getPreferences.ts
│ │ │ │ │ │ ├── getUnreadCount.ts
│ │ │ │ │ │ ├── listActivitySubscriptions.ts
│ │ │ │ │ │ ├── listNotifications.ts
│ │ │ │ │ │ ├── putActivitySubscription.ts
│ │ │ │ │ │ ├── putPreferences.ts
│ │ │ │ │ │ ├── putPreferencesV2.ts
│ │ │ │ │ │ ├── registerPush.ts
│ │ │ │ │ │ ├── unregisterPush.ts
│ │ │ │ │ │ ├── updateSeen.ts
│ │ │ │ │ │ └── util.ts
│ │ │ │ │ └── unspecced/
│ │ │ │ │ ├── getAgeAssuranceState.ts
│ │ │ │ │ ├── getConfig.ts
│ │ │ │ │ ├── getOnboardingSuggestedStarterPacks.ts
│ │ │ │ │ ├── getPopularFeedGenerators.ts
│ │ │ │ │ ├── getPostThreadOtherV2.ts
│ │ │ │ │ ├── getPostThreadV2.ts
│ │ │ │ │ ├── getSuggestedFeeds.ts
│ │ │ │ │ ├── getSuggestedOnboardingUsers.ts
│ │ │ │ │ ├── getSuggestedStarterPacks.ts
│ │ │ │ │ ├── getSuggestedUsers.ts
│ │ │ │ │ ├── getTaggedSuggestions.ts
│ │ │ │ │ ├── getTrendingTopics.ts
│ │ │ │ │ ├── getTrends.ts
│ │ │ │ │ └── initAgeAssurance.ts
│ │ │ │ ├── blob-dispatcher.ts
│ │ │ │ ├── blob-resolver.ts
│ │ │ │ ├── com/
│ │ │ │ │ └── atproto/
│ │ │ │ │ ├── admin/
│ │ │ │ │ │ ├── getAccountInfos.ts
│ │ │ │ │ │ ├── getSubjectStatus.ts
│ │ │ │ │ │ └── updateSubjectStatus.ts
│ │ │ │ │ ├── identity/
│ │ │ │ │ │ └── resolveHandle.ts
│ │ │ │ │ ├── label/
│ │ │ │ │ │ └── queryLabels.ts
│ │ │ │ │ ├── repo/
│ │ │ │ │ │ └── getRecord.ts
│ │ │ │ │ └── temp/
│ │ │ │ │ └── fetchLabels.ts
│ │ │ │ ├── external.ts
│ │ │ │ ├── health.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── kws/
│ │ │ │ │ ├── api.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── types.ts
│ │ │ │ │ ├── util.ts
│ │ │ │ │ └── webhook.ts
│ │ │ │ ├── sitemap.ts
│ │ │ │ ├── util.ts
│ │ │ │ └── well-known.ts
│ │ │ ├── auth-verifier.ts
│ │ │ ├── bsync.ts
│ │ │ ├── cache/
│ │ │ │ └── read-through.ts
│ │ │ ├── config.ts
│ │ │ ├── context.ts
│ │ │ ├── courier.ts
│ │ │ ├── data-plane/
│ │ │ │ ├── bsync/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── client/
│ │ │ │ │ ├── hosts.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── util.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── server/
│ │ │ │ ├── background.ts
│ │ │ │ ├── db/
│ │ │ │ │ ├── database-schema.ts
│ │ │ │ │ ├── db.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── migrations/
│ │ │ │ │ │ ├── 20230309T045948368Z-init.ts
│ │ │ │ │ │ ├── 20230408T152211201Z-notification-init.ts
│ │ │ │ │ │ ├── 20230417T210628672Z-moderation-init.ts
│ │ │ │ │ │ ├── 20230420T211446071Z-did-cache.ts
│ │ │ │ │ │ ├── 20230427T194702079Z-notif-record-index.ts
│ │ │ │ │ │ ├── 20230605T144730094Z-post-profile-aggs.ts
│ │ │ │ │ │ ├── 20230607T211442112Z-feed-generator-init.ts
│ │ │ │ │ │ ├── 20230608T155101190Z-algo-whats-hot-view.ts
│ │ │ │ │ │ ├── 20230608T201813132Z-mute-lists.ts
│ │ │ │ │ │ ├── 20230608T205147239Z-mutes.ts
│ │ │ │ │ │ ├── 20230609T153623961Z-blocks.ts
│ │ │ │ │ │ ├── 20230609T232122649Z-actor-deletion-indexes.ts
│ │ │ │ │ │ ├── 20230610T203555962Z-suggested-follows.ts
│ │ │ │ │ │ ├── 20230611T215300060Z-actor-state.ts
│ │ │ │ │ │ ├── 20230620T161134972Z-post-langs.ts
│ │ │ │ │ │ ├── 20230627T212437895Z-optional-handle.ts
│ │ │ │ │ │ ├── 20230629T220835893Z-remove-post-hierarchy.ts
│ │ │ │ │ │ ├── 20230703T045536691Z-feed-and-label-indices.ts
│ │ │ │ │ │ ├── 20230720T164800037Z-posts-cursor-idx.ts
│ │ │ │ │ │ ├── 20230807T035309811Z-feed-item-delete-invite-for-user-idx.ts
│ │ │ │ │ │ ├── 20230808T172902639Z-repo-rev.ts
│ │ │ │ │ │ ├── 20230810T203349843Z-action-duration.ts
│ │ │ │ │ │ ├── 20230817T195936007Z-native-notifications.ts
│ │ │ │ │ │ ├── 20230830T205507322Z-suggested-feeds.ts
│ │ │ │ │ │ ├── 20230904T211011773Z-block-lists.ts
│ │ │ │ │ │ ├── 20230906T222220386Z-thread-gating.ts
│ │ │ │ │ │ ├── 20230920T213858047Z-add-tags-to-post.ts
│ │ │ │ │ │ ├── 20230929T192920807Z-record-cursor-indexes.ts
│ │ │ │ │ │ ├── 20231003T202833377Z-create-moderation-subject-status.ts
│ │ │ │ │ │ ├── 20231220T225126090Z-blob-takedowns.ts
│ │ │ │ │ │ ├── 20240124T023719200Z-tagged-suggestions.ts
│ │ │ │ │ │ ├── 20240226T225725627Z-labelers.ts
│ │ │ │ │ │ ├── 20240530T170337073Z-account-deactivation.ts
│ │ │ │ │ │ ├── 20240606T171229898Z-thread-mutes.ts
│ │ │ │ │ │ ├── 20240606T222548219Z-starter-packs.ts
│ │ │ │ │ │ ├── 20240719T203853939Z-priority-notifs.ts
│ │ │ │ │ │ ├── 20240723T220700077Z-quotes-post-aggs.ts
│ │ │ │ │ │ ├── 20240723T220703655Z-quotes.ts
│ │ │ │ │ │ ├── 20240801T193939827Z-post-gate.ts
│ │ │ │ │ │ ├── 20240808T224251220Z-post-gate-flags.ts
│ │ │ │ │ │ ├── 20240829T211238293Z-simplify-actor-sync.ts
│ │ │ │ │ │ ├── 20240831T134810923Z-pinned-posts.ts
│ │ │ │ │ │ ├── 20241114T153108102Z-add-starter-packs-name.ts
│ │ │ │ │ │ ├── 20250116T222618297Z-post-embed-video.ts
│ │ │ │ │ │ ├── 20250207T174822012Z-add-label-exp.ts
│ │ │ │ │ │ ├── 20250404T163421487Z-verifications.ts
│ │ │ │ │ │ ├── 20250526T023712742Z-like-repost-via.ts
│ │ │ │ │ │ ├── 20250528T221913281Z-add-record-tags.ts
│ │ │ │ │ │ ├── 20250602T190357447Z-add-private-data.ts
│ │ │ │ │ │ ├── 20250611T140649895Z-add-activity-subscription.ts
│ │ │ │ │ │ ├── 20250627T025331240Z-add-actor-age-assurance-columns.ts
│ │ │ │ │ │ ├── 20250812T183735692Z-add-bookmarks.ts
│ │ │ │ │ │ ├── 20250813T174955711Z-add-post-agg-bookmarks.ts
│ │ │ │ │ │ ├── 20251120T004738098Z-update-actor-age-assurance-v2.ts
│ │ │ │ │ │ ├── 20260112T133951271Z-add-drafts.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── provider.ts
│ │ │ │ │ ├── pagination.ts
│ │ │ │ │ ├── tables/
│ │ │ │ │ │ ├── activity-subscription.ts
│ │ │ │ │ │ ├── actor-block.ts
│ │ │ │ │ │ ├── actor-state.ts
│ │ │ │ │ │ ├── actor-sync.ts
│ │ │ │ │ │ ├── actor.ts
│ │ │ │ │ │ ├── algo.ts
│ │ │ │ │ │ ├── blob-takedown.ts
│ │ │ │ │ │ ├── bookmark.ts
│ │ │ │ │ │ ├── did-cache.ts
│ │ │ │ │ │ ├── draft.ts
│ │ │ │ │ │ ├── duplicate-record.ts
│ │ │ │ │ │ ├── feed-generator.ts
│ │ │ │ │ │ ├── feed-item.ts
│ │ │ │ │ │ ├── follow.ts
│ │ │ │ │ │ ├── label.ts
│ │ │ │ │ │ ├── labeler.ts
│ │ │ │ │ │ ├── like.ts
│ │ │ │ │ │ ├── list-block.ts
│ │ │ │ │ │ ├── list-item.ts
│ │ │ │ │ │ ├── list-mute.ts
│ │ │ │ │ │ ├── list.ts
│ │ │ │ │ │ ├── mute.ts
│ │ │ │ │ │ ├── notification-push-token.ts
│ │ │ │ │ │ ├── notification.ts
│ │ │ │ │ │ ├── post-agg.ts
│ │ │ │ │ │ ├── post-embed.ts
│ │ │ │ │ │ ├── post-gate.ts
│ │ │ │ │ │ ├── post.ts
│ │ │ │ │ │ ├── private-data.ts
│ │ │ │ │ │ ├── profile-agg.ts
│ │ │ │ │ │ ├── profile.ts
│ │ │ │ │ │ ├── quote.ts
│ │ │ │ │ │ ├── record.ts
│ │ │ │ │ │ ├── repost.ts
│ │ │ │ │ │ ├── starter-pack.ts
│ │ │ │ │ │ ├── subscription.ts
│ │ │ │ │ │ ├── suggested-feed.ts
│ │ │ │ │ │ ├── suggested-follow.ts
│ │ │ │ │ │ ├── tagged-suggestion.ts
│ │ │ │ │ │ ├── thread-gate.ts
│ │ │ │ │ │ ├── thread-mute.ts
│ │ │ │ │ │ ├── verification.ts
│ │ │ │ │ │ └── view-param.ts
│ │ │ │ │ ├── types.ts
│ │ │ │ │ └── util.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── indexing/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── plugins/
│ │ │ │ │ │ ├── block.ts
│ │ │ │ │ │ ├── chat-declaration.ts
│ │ │ │ │ │ ├── feed-generator.ts
│ │ │ │ │ │ ├── follow.ts
│ │ │ │ │ │ ├── germ-declaration.ts
│ │ │ │ │ │ ├── labeler.ts
│ │ │ │ │ │ ├── like.ts
│ │ │ │ │ │ ├── list-block.ts
│ │ │ │ │ │ ├── list-item.ts
│ │ │ │ │ │ ├── list.ts
│ │ │ │ │ │ ├── notif-declaration.ts
│ │ │ │ │ │ ├── post-gate.ts
│ │ │ │ │ │ ├── post.ts
│ │ │ │ │ │ ├── profile.ts
│ │ │ │ │ │ ├── repost.ts
│ │ │ │ │ │ ├── starter-pack.ts
│ │ │ │ │ │ ├── status.ts
│ │ │ │ │ │ ├── thread-gate.ts
│ │ │ │ │ │ └── verification.ts
│ │ │ │ │ └── processor.ts
│ │ │ │ ├── routes/
│ │ │ │ │ ├── activity-subscription.ts
│ │ │ │ │ ├── blocks.ts
│ │ │ │ │ ├── bookmarks.ts
│ │ │ │ │ ├── drafts.ts
│ │ │ │ │ ├── feed-gens.ts
│ │ │ │ │ ├── feeds.ts
│ │ │ │ │ ├── follows.ts
│ │ │ │ │ ├── identity.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── interactions.ts
│ │ │ │ │ ├── labels.ts
│ │ │ │ │ ├── likes.ts
│ │ │ │ │ ├── lists.ts
│ │ │ │ │ ├── moderation.ts
│ │ │ │ │ ├── mutes.ts
│ │ │ │ │ ├── notifs.ts
│ │ │ │ │ ├── profile.ts
│ │ │ │ │ ├── quotes.ts
│ │ │ │ │ ├── records.ts
│ │ │ │ │ ├── relationships.ts
│ │ │ │ │ ├── reposts.ts
│ │ │ │ │ ├── search.ts
│ │ │ │ │ ├── sitemap.ts
│ │ │ │ │ ├── starter-packs.ts
│ │ │ │ │ ├── suggestions.ts
│ │ │ │ │ ├── sync.ts
│ │ │ │ │ └── threads.ts
│ │ │ │ ├── subscription.ts
│ │ │ │ └── util.ts
│ │ │ ├── error.ts
│ │ │ ├── etcd.ts
│ │ │ ├── feature-gates/
│ │ │ │ ├── README.md
│ │ │ │ ├── gates.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── metrics.test.ts
│ │ │ │ ├── metrics.ts
│ │ │ │ ├── types.ts
│ │ │ │ ├── utils.test.ts
│ │ │ │ └── utils.ts
│ │ │ ├── hydration/
│ │ │ │ ├── actor.ts
│ │ │ │ ├── feed.ts
│ │ │ │ ├── graph.ts
│ │ │ │ ├── hydrator.ts
│ │ │ │ ├── label.ts
│ │ │ │ └── util.ts
│ │ │ ├── image/
│ │ │ │ ├── index.ts
│ │ │ │ ├── invalidator.ts
│ │ │ │ ├── logger.ts
│ │ │ │ ├── server.ts
│ │ │ │ ├── sharp.ts
│ │ │ │ ├── uri.ts
│ │ │ │ └── util.ts
│ │ │ ├── index.ts
│ │ │ ├── kws.ts
│ │ │ ├── lexicon/
│ │ │ │ ├── index.ts
│ │ │ │ ├── lexicons.ts
│ │ │ │ ├── types/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── bsky/
│ │ │ │ │ │ ├── actor/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getPreferences.ts
│ │ │ │ │ │ │ ├── getProfile.ts
│ │ │ │ │ │ │ ├── getProfiles.ts
│ │ │ │ │ │ │ ├── getSuggestions.ts
│ │ │ │ │ │ │ ├── profile.ts
│ │ │ │ │ │ │ ├── putPreferences.ts
│ │ │ │ │ │ │ ├── searchActors.ts
│ │ │ │ │ │ │ ├── searchActorsTypeahead.ts
│ │ │ │ │ │ │ └── status.ts
│ │ │ │ │ │ ├── ageassurance/
│ │ │ │ │ │ │ ├── begin.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getConfig.ts
│ │ │ │ │ │ │ └── getState.ts
│ │ │ │ │ │ ├── bookmark/
│ │ │ │ │ │ │ ├── createBookmark.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteBookmark.ts
│ │ │ │ │ │ │ └── getBookmarks.ts
│ │ │ │ │ │ ├── contact/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── dismissMatch.ts
│ │ │ │ │ │ │ ├── getMatches.ts
│ │ │ │ │ │ │ ├── getSyncStatus.ts
│ │ │ │ │ │ │ ├── importContacts.ts
│ │ │ │ │ │ │ ├── removeData.ts
│ │ │ │ │ │ │ ├── sendNotification.ts
│ │ │ │ │ │ │ ├── startPhoneVerification.ts
│ │ │ │ │ │ │ └── verifyPhone.ts
│ │ │ │ │ │ ├── draft/
│ │ │ │ │ │ │ ├── createDraft.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteDraft.ts
│ │ │ │ │ │ │ ├── getDrafts.ts
│ │ │ │ │ │ │ └── updateDraft.ts
│ │ │ │ │ │ ├── embed/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── external.ts
│ │ │ │ │ │ │ ├── images.ts
│ │ │ │ │ │ │ ├── record.ts
│ │ │ │ │ │ │ ├── recordWithMedia.ts
│ │ │ │ │ │ │ └── video.ts
│ │ │ │ │ │ ├── feed/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── describeFeedGenerator.ts
│ │ │ │ │ │ │ ├── generator.ts
│ │ │ │ │ │ │ ├── getActorFeeds.ts
│ │ │ │ │ │ │ ├── getActorLikes.ts
│ │ │ │ │ │ │ ├── getAuthorFeed.ts
│ │ │ │ │ │ │ ├── getFeed.ts
│ │ │ │ │ │ │ ├── getFeedGenerator.ts
│ │ │ │ │ │ │ ├── getFeedGenerators.ts
│ │ │ │ │ │ │ ├── getFeedSkeleton.ts
│ │ │ │ │ │ │ ├── getLikes.ts
│ │ │ │ │ │ │ ├── getListFeed.ts
│ │ │ │ │ │ │ ├── getPostThread.ts
│ │ │ │ │ │ │ ├── getPosts.ts
│ │ │ │ │ │ │ ├── getQuotes.ts
│ │ │ │ │ │ │ ├── getRepostedBy.ts
│ │ │ │ │ │ │ ├── getSuggestedFeeds.ts
│ │ │ │ │ │ │ ├── getTimeline.ts
│ │ │ │ │ │ │ ├── like.ts
│ │ │ │ │ │ │ ├── post.ts
│ │ │ │ │ │ │ ├── postgate.ts
│ │ │ │ │ │ │ ├── repost.ts
│ │ │ │ │ │ │ ├── searchPosts.ts
│ │ │ │ │ │ │ ├── sendInteractions.ts
│ │ │ │ │ │ │ └── threadgate.ts
│ │ │ │ │ │ ├── graph/
│ │ │ │ │ │ │ ├── block.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── follow.ts
│ │ │ │ │ │ │ ├── getActorStarterPacks.ts
│ │ │ │ │ │ │ ├── getBlocks.ts
│ │ │ │ │ │ │ ├── getFollowers.ts
│ │ │ │ │ │ │ ├── getFollows.ts
│ │ │ │ │ │ │ ├── getKnownFollowers.ts
│ │ │ │ │ │ │ ├── getList.ts
│ │ │ │ │ │ │ ├── getListBlocks.ts
│ │ │ │ │ │ │ ├── getListMutes.ts
│ │ │ │ │ │ │ ├── getLists.ts
│ │ │ │ │ │ │ ├── getListsWithMembership.ts
│ │ │ │ │ │ │ ├── getMutes.ts
│ │ │ │ │ │ │ ├── getRelationships.ts
│ │ │ │ │ │ │ ├── getStarterPack.ts
│ │ │ │ │ │ │ ├── getStarterPacks.ts
│ │ │ │ │ │ │ ├── getStarterPacksWithMembership.ts
│ │ │ │ │ │ │ ├── getSuggestedFollowsByActor.ts
│ │ │ │ │ │ │ ├── list.ts
│ │ │ │ │ │ │ ├── listblock.ts
│ │ │ │ │ │ │ ├── listitem.ts
│ │ │ │ │ │ │ ├── muteActor.ts
│ │ │ │ │ │ │ ├── muteActorList.ts
│ │ │ │ │ │ │ ├── muteThread.ts
│ │ │ │ │ │ │ ├── searchStarterPacks.ts
│ │ │ │ │ │ │ ├── starterpack.ts
│ │ │ │ │ │ │ ├── unmuteActor.ts
│ │ │ │ │ │ │ ├── unmuteActorList.ts
│ │ │ │ │ │ │ ├── unmuteThread.ts
│ │ │ │ │ │ │ └── verification.ts
│ │ │ │ │ │ ├── labeler/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getServices.ts
│ │ │ │ │ │ │ └── service.ts
│ │ │ │ │ │ ├── notification/
│ │ │ │ │ │ │ ├── declaration.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getPreferences.ts
│ │ │ │ │ │ │ ├── getUnreadCount.ts
│ │ │ │ │ │ │ ├── listActivitySubscriptions.ts
│ │ │ │ │ │ │ ├── listNotifications.ts
│ │ │ │ │ │ │ ├── putActivitySubscription.ts
│ │ │ │ │ │ │ ├── putPreferences.ts
│ │ │ │ │ │ │ ├── putPreferencesV2.ts
│ │ │ │ │ │ │ ├── registerPush.ts
│ │ │ │ │ │ │ ├── unregisterPush.ts
│ │ │ │ │ │ │ └── updateSeen.ts
│ │ │ │ │ │ ├── richtext/
│ │ │ │ │ │ │ └── facet.ts
│ │ │ │ │ │ ├── unspecced/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getAgeAssuranceState.ts
│ │ │ │ │ │ │ ├── getConfig.ts
│ │ │ │ │ │ │ ├── getOnboardingSuggestedStarterPacks.ts
│ │ │ │ │ │ │ ├── getOnboardingSuggestedStarterPacksSkeleton.ts
│ │ │ │ │ │ │ ├── getOnboardingSuggestedUsersSkeleton.ts
│ │ │ │ │ │ │ ├── getPopularFeedGenerators.ts
│ │ │ │ │ │ │ ├── getPostThreadOtherV2.ts
│ │ │ │ │ │ │ ├── getPostThreadV2.ts
│ │ │ │ │ │ │ ├── getSuggestedFeeds.ts
│ │ │ │ │ │ │ ├── getSuggestedFeedsSkeleton.ts
│ │ │ │ │ │ │ ├── getSuggestedOnboardingUsers.ts
│ │ │ │ │ │ │ ├── getSuggestedStarterPacks.ts
│ │ │ │ │ │ │ ├── getSuggestedStarterPacksSkeleton.ts
│ │ │ │ │ │ │ ├── getSuggestedUsers.ts
│ │ │ │ │ │ │ ├── getSuggestedUsersSkeleton.ts
│ │ │ │ │ │ │ ├── getSuggestionsSkeleton.ts
│ │ │ │ │ │ │ ├── getTaggedSuggestions.ts
│ │ │ │ │ │ │ ├── getTrendingTopics.ts
│ │ │ │ │ │ │ ├── getTrends.ts
│ │ │ │ │ │ │ ├── getTrendsSkeleton.ts
│ │ │ │ │ │ │ ├── initAgeAssurance.ts
│ │ │ │ │ │ │ ├── searchActorsSkeleton.ts
│ │ │ │ │ │ │ ├── searchPostsSkeleton.ts
│ │ │ │ │ │ │ └── searchStarterPacksSkeleton.ts
│ │ │ │ │ │ └── video/
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── getJobStatus.ts
│ │ │ │ │ │ ├── getUploadLimits.ts
│ │ │ │ │ │ └── uploadVideo.ts
│ │ │ │ │ ├── chat/
│ │ │ │ │ │ └── bsky/
│ │ │ │ │ │ ├── actor/
│ │ │ │ │ │ │ ├── declaration.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteAccount.ts
│ │ │ │ │ │ │ └── exportAccountData.ts
│ │ │ │ │ │ ├── convo/
│ │ │ │ │ │ │ ├── acceptConvo.ts
│ │ │ │ │ │ │ ├── addReaction.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteMessageForSelf.ts
│ │ │ │ │ │ │ ├── getConvo.ts
│ │ │ │ │ │ │ ├── getConvoAvailability.ts
│ │ │ │ │ │ │ ├── getConvoForMembers.ts
│ │ │ │ │ │ │ ├── getLog.ts
│ │ │ │ │ │ │ ├── getMessages.ts
│ │ │ │ │ │ │ ├── leaveConvo.ts
│ │ │ │ │ │ │ ├── listConvos.ts
│ │ │ │ │ │ │ ├── muteConvo.ts
│ │ │ │ │ │ │ ├── removeReaction.ts
│ │ │ │ │ │ │ ├── sendMessage.ts
│ │ │ │ │ │ │ ├── sendMessageBatch.ts
│ │ │ │ │ │ │ ├── unmuteConvo.ts
│ │ │ │ │ │ │ ├── updateAllRead.ts
│ │ │ │ │ │ │ └── updateRead.ts
│ │ │ │ │ │ └── moderation/
│ │ │ │ │ │ ├── getActorMetadata.ts
│ │ │ │ │ │ ├── getMessageContext.ts
│ │ │ │ │ │ └── updateActorAccess.ts
│ │ │ │ │ └── com/
│ │ │ │ │ ├── atproto/
│ │ │ │ │ │ ├── admin/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteAccount.ts
│ │ │ │ │ │ │ ├── disableAccountInvites.ts
│ │ │ │ │ │ │ ├── disableInviteCodes.ts
│ │ │ │ │ │ │ ├── enableAccountInvites.ts
│ │ │ │ │ │ │ ├── getAccountInfo.ts
│ │ │ │ │ │ │ ├── getAccountInfos.ts
│ │ │ │ │ │ │ ├── getInviteCodes.ts
│ │ │ │ │ │ │ ├── getSubjectStatus.ts
│ │ │ │ │ │ │ ├── searchAccounts.ts
│ │ │ │ │ │ │ ├── sendEmail.ts
│ │ │ │ │ │ │ ├── updateAccountEmail.ts
│ │ │ │ │ │ │ ├── updateAccountHandle.ts
│ │ │ │ │ │ │ ├── updateAccountPassword.ts
│ │ │ │ │ │ │ ├── updateAccountSigningKey.ts
│ │ │ │ │ │ │ └── updateSubjectStatus.ts
│ │ │ │ │ │ ├── identity/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getRecommendedDidCredentials.ts
│ │ │ │ │ │ │ ├── refreshIdentity.ts
│ │ │ │ │ │ │ ├── requestPlcOperationSignature.ts
│ │ │ │ │ │ │ ├── resolveDid.ts
│ │ │ │ │ │ │ ├── resolveHandle.ts
│ │ │ │ │ │ │ ├── resolveIdentity.ts
│ │ │ │ │ │ │ ├── signPlcOperation.ts
│ │ │ │ │ │ │ ├── submitPlcOperation.ts
│ │ │ │ │ │ │ └── updateHandle.ts
│ │ │ │ │ │ ├── label/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── queryLabels.ts
│ │ │ │ │ │ │ └── subscribeLabels.ts
│ │ │ │ │ │ ├── lexicon/
│ │ │ │ │ │ │ ├── resolveLexicon.ts
│ │ │ │ │ │ │ └── schema.ts
│ │ │ │ │ │ ├── moderation/
│ │ │ │ │ │ │ ├── createReport.ts
│ │ │ │ │ │ │ └── defs.ts
│ │ │ │ │ │ ├── repo/
│ │ │ │ │ │ │ ├── applyWrites.ts
│ │ │ │ │ │ │ ├── createRecord.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteRecord.ts
│ │ │ │ │ │ │ ├── describeRepo.ts
│ │ │ │ │ │ │ ├── getRecord.ts
│ │ │ │ │ │ │ ├── importRepo.ts
│ │ │ │ │ │ │ ├── listMissingBlobs.ts
│ │ │ │ │ │ │ ├── listRecords.ts
│ │ │ │ │ │ │ ├── putRecord.ts
│ │ │ │ │ │ │ ├── strongRef.ts
│ │ │ │ │ │ │ └── uploadBlob.ts
│ │ │ │ │ │ ├── server/
│ │ │ │ │ │ │ ├── activateAccount.ts
│ │ │ │ │ │ │ ├── checkAccountStatus.ts
│ │ │ │ │ │ │ ├── confirmEmail.ts
│ │ │ │ │ │ │ ├── createAccount.ts
│ │ │ │ │ │ │ ├── createAppPassword.ts
│ │ │ │ │ │ │ ├── createInviteCode.ts
│ │ │ │ │ │ │ ├── createInviteCodes.ts
│ │ │ │ │ │ │ ├── createSession.ts
│ │ │ │ │ │ │ ├── deactivateAccount.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteAccount.ts
│ │ │ │ │ │ │ ├── deleteSession.ts
│ │ │ │ │ │ │ ├── describeServer.ts
│ │ │ │ │ │ │ ├── getAccountInviteCodes.ts
│ │ │ │ │ │ │ ├── getServiceAuth.ts
│ │ │ │ │ │ │ ├── getSession.ts
│ │ │ │ │ │ │ ├── listAppPasswords.ts
│ │ │ │ │ │ │ ├── refreshSession.ts
│ │ │ │ │ │ │ ├── requestAccountDelete.ts
│ │ │ │ │ │ │ ├── requestEmailConfirmation.ts
│ │ │ │ │ │ │ ├── requestEmailUpdate.ts
│ │ │ │ │ │ │ ├── requestPasswordReset.ts
│ │ │ │ │ │ │ ├── reserveSigningKey.ts
│ │ │ │ │ │ │ ├── resetPassword.ts
│ │ │ │ │ │ │ ├── revokeAppPassword.ts
│ │ │ │ │ │ │ └── updateEmail.ts
│ │ │ │ │ │ ├── sync/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getBlob.ts
│ │ │ │ │ │ │ ├── getBlocks.ts
│ │ │ │ │ │ │ ├── getCheckout.ts
│ │ │ │ │ │ │ ├── getHead.ts
│ │ │ │ │ │ │ ├── getHostStatus.ts
│ │ │ │ │ │ │ ├── getLatestCommit.ts
│ │ │ │ │ │ │ ├── getRecord.ts
│ │ │ │ │ │ │ ├── getRepo.ts
│ │ │ │ │ │ │ ├── getRepoStatus.ts
│ │ │ │ │ │ │ ├── listBlobs.ts
│ │ │ │ │ │ │ ├── listHosts.ts
│ │ │ │ │ │ │ ├── listRepos.ts
│ │ │ │ │ │ │ ├── listReposByCollection.ts
│ │ │ │ │ │ │ ├── notifyOfUpdate.ts
│ │ │ │ │ │ │ ├── requestCrawl.ts
│ │ │ │ │ │ │ └── subscribeRepos.ts
│ │ │ │ │ │ └── temp/
│ │ │ │ │ │ ├── addReservedHandle.ts
│ │ │ │ │ │ ├── checkHandleAvailability.ts
│ │ │ │ │ │ ├── checkSignupQueue.ts
│ │ │ │ │ │ ├── dereferenceScope.ts
│ │ │ │ │ │ ├── fetchLabels.ts
│ │ │ │ │ │ ├── requestPhoneVerification.ts
│ │ │ │ │ │ └── revokeAccountCredentials.ts
│ │ │ │ │ └── germnetwork/
│ │ │ │ │ └── declaration.ts
│ │ │ │ └── util.ts
│ │ │ ├── logger.ts
│ │ │ ├── pipeline.ts
│ │ │ ├── proto/
│ │ │ │ ├── bsky_connect.ts
│ │ │ │ ├── bsky_pb.ts
│ │ │ │ ├── bsync_connect.ts
│ │ │ │ ├── bsync_pb.ts
│ │ │ │ ├── courier_connect.ts
│ │ │ │ ├── courier_pb.ts
│ │ │ │ ├── rolodex_connect.ts
│ │ │ │ └── rolodex_pb.ts
│ │ │ ├── redis.ts
│ │ │ ├── rolodex.ts
│ │ │ ├── stash.ts
│ │ │ ├── util/
│ │ │ │ ├── debug.ts
│ │ │ │ ├── http.ts
│ │ │ │ ├── retry.ts
│ │ │ │ └── uris.ts
│ │ │ ├── util.ts
│ │ │ └── views/
│ │ │ ├── index.ts
│ │ │ ├── threads-v2.ts
│ │ │ ├── types.ts
│ │ │ └── util.ts
│ │ ├── test.env
│ │ ├── tests/
│ │ │ ├── __snapshots__/
│ │ │ │ └── feed-generation.test.ts.snap
│ │ │ ├── _util.ts
│ │ │ ├── admin/
│ │ │ │ ├── admin-auth.test.ts
│ │ │ │ └── moderation.test.ts
│ │ │ ├── auth.test.ts
│ │ │ ├── blob-resolver.test.ts
│ │ │ ├── data-plane/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── indexing.test.ts.snap
│ │ │ │ ├── db.test.ts
│ │ │ │ ├── duplicate-records.test.ts
│ │ │ │ ├── handle-invalidation.test.ts
│ │ │ │ ├── indexing.test.ts
│ │ │ │ ├── subscription.test.ts
│ │ │ │ └── thread-mutes.test.ts
│ │ │ ├── entryway-auth.test.ts
│ │ │ ├── etcd.test.ts
│ │ │ ├── feed-generation.test.ts
│ │ │ ├── hydration/
│ │ │ │ └── util.test.ts
│ │ │ ├── image/
│ │ │ │ ├── server.test.ts
│ │ │ │ ├── sharp.test.ts
│ │ │ │ └── uri.test.ts
│ │ │ ├── label-hydration.test.ts
│ │ │ ├── postgates.test.ts
│ │ │ ├── query-labels.test.ts
│ │ │ ├── redis-cache.test.ts
│ │ │ ├── seed/
│ │ │ │ ├── feed-hidden-replies.ts
│ │ │ │ ├── get-suggested-starter-packs.ts
│ │ │ │ ├── get-trends.ts
│ │ │ │ ├── known-followers.ts
│ │ │ │ └── postgates.ts
│ │ │ ├── server.test.ts
│ │ │ ├── sitemap.test.ts
│ │ │ ├── stash.test.ts
│ │ │ ├── utils.test.ts
│ │ │ └── views/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── actor-search.test.ts.snap
│ │ │ │ ├── author-feed.test.ts.snap
│ │ │ │ ├── block-lists.test.ts.snap
│ │ │ │ ├── blocks.test.ts.snap
│ │ │ │ ├── bookmarks.test.ts.snap
│ │ │ │ ├── follows.test.ts.snap
│ │ │ │ ├── labeler-service.test.ts.snap
│ │ │ │ ├── likes.test.ts.snap
│ │ │ │ ├── list-feed.test.ts.snap
│ │ │ │ ├── lists.test.ts.snap
│ │ │ │ ├── mute-lists.test.ts.snap
│ │ │ │ ├── mutes.test.ts.snap
│ │ │ │ ├── notifications.test.ts.snap
│ │ │ │ ├── posts.test.ts.snap
│ │ │ │ ├── profile.test.ts.snap
│ │ │ │ ├── quotes.test.ts.snap
│ │ │ │ ├── reposts.test.ts.snap
│ │ │ │ ├── starter-packs.test.ts.snap
│ │ │ │ ├── thread-v2.test.ts.snap
│ │ │ │ ├── thread.test.ts.snap
│ │ │ │ ├── threadgating.test.ts.snap
│ │ │ │ └── timeline.test.ts.snap
│ │ │ ├── account-deactivation.test.ts
│ │ │ ├── actor-likes.test.ts
│ │ │ ├── actor-search.test.ts
│ │ │ ├── age-assurance-v2.test.ts
│ │ │ ├── age-assurance.test.ts
│ │ │ ├── author-feed.test.ts
│ │ │ ├── block-lists.test.ts
│ │ │ ├── blocks.test.ts
│ │ │ ├── bookmarks.test.ts
│ │ │ ├── drafts.test.ts
│ │ │ ├── feed-hidden-replies.test.ts
│ │ │ ├── feed-view-post.test.ts
│ │ │ ├── follows.test.ts
│ │ │ ├── get-config.test.ts
│ │ │ ├── get-suggested-onboarding-users.test.ts
│ │ │ ├── get-suggested-starter-packs.test.ts
│ │ │ ├── get-trends.test.ts
│ │ │ ├── known-followers.test.ts
│ │ │ ├── labeler-service.test.ts
│ │ │ ├── labels-needs-review.test.ts
│ │ │ ├── labels-takedown.test.ts
│ │ │ ├── likes.test.ts
│ │ │ ├── list-feed.test.ts
│ │ │ ├── lists.test.ts
│ │ │ ├── mute-lists.test.ts
│ │ │ ├── mutes.test.ts
│ │ │ ├── notifications.test.ts
│ │ │ ├── post-search.test.ts
│ │ │ ├── posts-debug.test.ts
│ │ │ ├── posts.test.ts
│ │ │ ├── profile-debug.test.ts
│ │ │ ├── profile.test.ts
│ │ │ ├── quotes.test.ts
│ │ │ ├── reposts.test.ts
│ │ │ ├── starter-packs.test.ts
│ │ │ ├── suggestions.test.ts
│ │ │ ├── thread-v2.test.ts
│ │ │ ├── thread.test.ts
│ │ │ ├── threadgating.test.ts
│ │ │ ├── timeline.test.ts
│ │ │ └── verification.test.ts
│ │ ├── tsconfig.build.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.tests.json
│ ├── bsync/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── bin/
│ │ │ └── migration-create.ts
│ │ ├── buf.gen.yaml
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── proto/
│ │ │ └── bsync.proto
│ │ ├── src/
│ │ │ ├── client.ts
│ │ │ ├── config.ts
│ │ │ ├── context.ts
│ │ │ ├── db/
│ │ │ │ ├── index.ts
│ │ │ │ ├── migrations/
│ │ │ │ │ ├── 20240108T220751294Z-init.ts
│ │ │ │ │ ├── 20240717T224303472Z-notif-ops.ts
│ │ │ │ │ ├── 20250527T022203400Z-add-operation.ts
│ │ │ │ │ ├── 20250603T163446567Z-alter-operation.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── provider.ts
│ │ │ │ ├── schema/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── mute_item.ts
│ │ │ │ │ ├── mute_op.ts
│ │ │ │ │ ├── notif_item.ts
│ │ │ │ │ ├── notif_op.ts
│ │ │ │ │ └── operation.ts
│ │ │ │ └── types.ts
│ │ │ ├── index.ts
│ │ │ ├── logger.ts
│ │ │ ├── proto/
│ │ │ │ ├── bsync_connect.ts
│ │ │ │ └── bsync_pb.ts
│ │ │ └── routes/
│ │ │ ├── add-mute-operation.ts
│ │ │ ├── add-notif-operation.ts
│ │ │ ├── auth.ts
│ │ │ ├── delete-operations.ts
│ │ │ ├── index.ts
│ │ │ ├── put-operation.ts
│ │ │ ├── scan-mute-operations.ts
│ │ │ ├── scan-notif-operations.ts
│ │ │ ├── scan-operations.ts
│ │ │ └── util.ts
│ │ ├── tests/
│ │ │ ├── delete-operations.test.ts
│ │ │ ├── mutes.test.ts
│ │ │ ├── notifications.test.ts
│ │ │ └── operations.test.ts
│ │ ├── tsconfig.build.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.tests.json
│ ├── common/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── buffers.ts
│ │ │ ├── dates.ts
│ │ │ ├── env.ts
│ │ │ ├── fs.ts
│ │ │ ├── index.ts
│ │ │ ├── ipld-multi.ts
│ │ │ ├── ipld.ts
│ │ │ ├── logger.ts
│ │ │ ├── obfuscate.ts
│ │ │ └── streams.ts
│ │ ├── tests/
│ │ │ ├── ipld-multi.test.ts
│ │ │ ├── ipld-vectors.ts
│ │ │ ├── ipld.test.ts
│ │ │ └── streams.test.ts
│ │ ├── tsconfig.build.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.tests.json
│ ├── common-web/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── arrays.ts
│ │ │ ├── async.ts
│ │ │ ├── check.ts
│ │ │ ├── did-doc.ts
│ │ │ ├── index.ts
│ │ │ ├── ipld.ts
│ │ │ ├── retry.ts
│ │ │ ├── strings.ts
│ │ │ ├── tid.ts
│ │ │ ├── times.ts
│ │ │ ├── types.ts
│ │ │ └── util.ts
│ │ ├── tests/
│ │ │ ├── check.test.ts
│ │ │ ├── retry.test.ts
│ │ │ ├── tid.test.ts
│ │ │ └── util.test.ts
│ │ ├── tsconfig.build.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.tests.json
│ ├── crypto/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── const.ts
│ │ │ ├── did.ts
│ │ │ ├── index.ts
│ │ │ ├── multibase.ts
│ │ │ ├── p256/
│ │ │ │ ├── encoding.ts
│ │ │ │ ├── keypair.ts
│ │ │ │ ├── operations.ts
│ │ │ │ └── plugin.ts
│ │ │ ├── plugins.ts
│ │ │ ├── random.ts
│ │ │ ├── secp256k1/
│ │ │ │ ├── encoding.ts
│ │ │ │ ├── keypair.ts
│ │ │ │ ├── operations.ts
│ │ │ │ └── plugin.ts
│ │ │ ├── sha.ts
│ │ │ ├── types.ts
│ │ │ ├── utils.ts
│ │ │ └── verify.ts
│ │ ├── tests/
│ │ │ ├── did.test.ts
│ │ │ ├── key-compression.test.ts
│ │ │ ├── keypairs.test.ts
│ │ │ ├── random.test.ts
│ │ │ └── signatures.test.ts
│ │ ├── tsconfig.build.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.tests.json
│ ├── dev-env/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── bin.ts
│ │ │ ├── bsky.ts
│ │ │ ├── bsync.ts
│ │ │ ├── const.ts
│ │ │ ├── env.ts
│ │ │ ├── feed-gen.ts
│ │ │ ├── index.ts
│ │ │ ├── introspect.ts
│ │ │ ├── mock/
│ │ │ │ ├── data.ts
│ │ │ │ ├── img/
│ │ │ │ │ ├── blur-hash-avatar-b64.ts
│ │ │ │ │ └── labeled-img-b64.ts
│ │ │ │ └── index.ts
│ │ │ ├── moderator-client.ts
│ │ │ ├── network-no-appview.ts
│ │ │ ├── network.ts
│ │ │ ├── ozone.ts
│ │ │ ├── pds.ts
│ │ │ ├── plc.ts
│ │ │ ├── seed/
│ │ │ │ ├── author-feed.ts
│ │ │ │ ├── basic.ts
│ │ │ │ ├── client.ts
│ │ │ │ ├── follows.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── likes.ts
│ │ │ │ ├── quotes.ts
│ │ │ │ ├── reposts.ts
│ │ │ │ ├── thread-v2.ts
│ │ │ │ ├── users-bulk.ts
│ │ │ │ ├── users.ts
│ │ │ │ └── verifications.ts
│ │ │ ├── service-profile-lexicon.ts
│ │ │ ├── service-profile-ozone.ts
│ │ │ ├── service-profile.ts
│ │ │ ├── types.ts
│ │ │ └── util.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── dev-infra/
│ │ ├── README.md
│ │ ├── _common.sh
│ │ ├── docker-compose.yaml
│ │ ├── with-test-db.sh
│ │ └── with-test-redis-and-db.sh
│ ├── did/
│ │ ├── CHANGELOG.md
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── atproto.ts
│ │ │ ├── did-document.ts
│ │ │ ├── did-error.ts
│ │ │ ├── did.ts
│ │ │ ├── index.ts
│ │ │ ├── lib/
│ │ │ │ └── uri.ts
│ │ │ ├── methods/
│ │ │ │ ├── plc.ts
│ │ │ │ └── web.ts
│ │ │ ├── methods.ts
│ │ │ └── utils.ts
│ │ ├── tests/
│ │ │ └── methods/
│ │ │ ├── plc.test.ts
│ │ │ └── web.test.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── identity/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── did/
│ │ │ │ ├── atproto-data.ts
│ │ │ │ ├── base-resolver.ts
│ │ │ │ ├── did-resolver.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── memory-cache.ts
│ │ │ │ ├── plc-resolver.ts
│ │ │ │ ├── util.ts
│ │ │ │ └── web-resolver.ts
│ │ │ ├── errors.ts
│ │ │ ├── handle/
│ │ │ │ └── index.ts
│ │ │ ├── id-resolver.ts
│ │ │ ├── index.ts
│ │ │ └── types.ts
│ │ ├── test.env
│ │ ├── tests/
│ │ │ ├── did-cache.test.ts
│ │ │ ├── did-document.test.ts
│ │ │ ├── did-resolver.test.ts
│ │ │ ├── handle-resolver.test.ts
│ │ │ └── web/
│ │ │ ├── db.ts
│ │ │ └── server.ts
│ │ ├── tsconfig.build.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.tests.json
│ ├── internal/
│ │ ├── did-resolver/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── create-did-resolver.ts
│ │ │ │ ├── did-cache-memory.ts
│ │ │ │ ├── did-cache.ts
│ │ │ │ ├── did-method.ts
│ │ │ │ ├── did-resolver-base.ts
│ │ │ │ ├── did-resolver-common.ts
│ │ │ │ ├── did-resolver.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── methods/
│ │ │ │ │ ├── plc.ts
│ │ │ │ │ └── web.ts
│ │ │ │ ├── methods.ts
│ │ │ │ └── util.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── fetch/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── fetch-error.ts
│ │ │ │ ├── fetch-request.ts
│ │ │ │ ├── fetch-response.ts
│ │ │ │ ├── fetch-wrap.ts
│ │ │ │ ├── fetch.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── transformed-response.ts
│ │ │ │ └── util.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── fetch-node/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ ├── safe.ts
│ │ │ │ ├── unicast.ts
│ │ │ │ └── util.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── handle-resolver/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── atproto-doh-handle-resolver.ts
│ │ │ │ ├── atproto-handle-resolver.ts
│ │ │ │ ├── cached-handle-resolver.ts
│ │ │ │ ├── create-handle-resolver.ts
│ │ │ │ ├── handle-resolver-error.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── internal-resolvers/
│ │ │ │ │ ├── dns-handle-resolver.ts
│ │ │ │ │ └── well-known-handler-resolver.ts
│ │ │ │ ├── types.ts
│ │ │ │ └── xrpc-handle-resolver.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── handle-resolver-node/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── atproto-handle-resolver-node.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── node-resolve-txt-factory.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── identity-resolver/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── atproto-identity-resolver.ts
│ │ │ │ ├── constants.ts
│ │ │ │ ├── create-identity-resolver.ts
│ │ │ │ ├── identity-resolver-error.ts
│ │ │ │ ├── identity-resolver.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── util.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── pipe/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ ├── pipe.ts
│ │ │ │ └── type.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── rollup-plugin-bundle-manifest/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── simple-store/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── cached-getter.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── simple-store.ts
│ │ │ │ └── util.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── simple-store-memory/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── util.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── simple-store-redis/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ └── xrpc-utils/
│ │ ├── CHANGELOG.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── accept.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── lex/
│ │ ├── lex/
│ │ │ ├── .gitignore
│ │ │ ├── CHANGELOG.md
│ │ │ ├── README.md
│ │ │ ├── bin/
│ │ │ │ └── lex
│ │ │ ├── lexicons/
│ │ │ │ └── com/
│ │ │ │ └── example/
│ │ │ │ ├── 4-2/
│ │ │ │ │ └── unsafeDefs.json
│ │ │ │ ├── arrayLength.json
│ │ │ │ ├── atIdentifier.json
│ │ │ │ ├── atUri.json
│ │ │ │ ├── boolConst.json
│ │ │ │ ├── byteLength.json
│ │ │ │ ├── cid.json
│ │ │ │ ├── datetime.json
│ │ │ │ ├── default.json
│ │ │ │ ├── did.json
│ │ │ │ ├── handle.json
│ │ │ │ ├── integerConst.json
│ │ │ │ ├── integerEnum.json
│ │ │ │ ├── integerRange.json
│ │ │ │ ├── kitchenSink.json
│ │ │ │ ├── language.json
│ │ │ │ ├── nsid.json
│ │ │ │ ├── optional.json
│ │ │ │ ├── parametersEnum.json
│ │ │ │ ├── procedure.json
│ │ │ │ ├── procedureKnownValues.json
│ │ │ │ ├── query.json
│ │ │ │ ├── stringConst.json
│ │ │ │ ├── stringEnum.json
│ │ │ │ ├── stringKnownValues.json
│ │ │ │ ├── stringLength.json
│ │ │ │ ├── stringLengthGrapheme.json
│ │ │ │ ├── stringLengthNoMinLength.json
│ │ │ │ ├── subscription.json
│ │ │ │ ├── token.json
│ │ │ │ ├── union.json
│ │ │ │ ├── unknown.json
│ │ │ │ └── uri.json
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ └── index.ts
│ │ │ ├── tests/
│ │ │ │ ├── array.test.ts
│ │ │ │ ├── boolean.test.ts
│ │ │ │ ├── byte.test.ts
│ │ │ │ ├── defaults.test.ts
│ │ │ │ ├── integer.test.ts
│ │ │ │ ├── parameters.test.ts
│ │ │ │ ├── procedure.test.ts
│ │ │ │ ├── query.test.ts
│ │ │ │ ├── string.test.ts
│ │ │ │ ├── token.test.ts
│ │ │ │ ├── union.test.ts
│ │ │ │ ├── unknown.test.ts
│ │ │ │ └── unsafe.test.ts
│ │ │ ├── tsconfig.build.json
│ │ │ ├── tsconfig.json
│ │ │ ├── tsconfig.tests.json
│ │ │ └── vitest.config.ts
│ │ ├── lex-builder/
│ │ │ ├── .gitignore
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── filter.ts
│ │ │ │ ├── filtered-indexer.test.ts
│ │ │ │ ├── filtered-indexer.ts
│ │ │ │ ├── formatter.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── lex-builder.ts
│ │ │ │ ├── lex-def-builder.ts
│ │ │ │ ├── lexicon-directory-indexer.ts
│ │ │ │ ├── polyfill.ts
│ │ │ │ ├── ref-resolver.test.ts
│ │ │ │ ├── ref-resolver.ts
│ │ │ │ ├── ts-lang.ts
│ │ │ │ └── util.ts
│ │ │ ├── tsconfig.build.json
│ │ │ ├── tsconfig.json
│ │ │ ├── tsconfig.tests.json
│ │ │ └── vitest.config.ts
│ │ ├── lex-cbor/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── encoding.ts
│ │ │ │ └── index.ts
│ │ │ ├── tests/
│ │ │ │ ├── codec.test.ts
│ │ │ │ ├── dag-cbor.test.ts
│ │ │ │ ├── data-model-fixtures.json
│ │ │ │ ├── fixtures.test.ts
│ │ │ │ ├── vectors.test.ts
│ │ │ │ └── vectors.ts
│ │ │ ├── tsconfig.build.json
│ │ │ ├── tsconfig.json
│ │ │ ├── tsconfig.tests.json
│ │ │ ├── vite.config.mts
│ │ │ └── vitest.config.ts
│ │ ├── lex-client/
│ │ │ ├── .gitignore
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── scripts/
│ │ │ │ └── lex-build.mjs
│ │ │ ├── src/
│ │ │ │ ├── agent.test.ts
│ │ │ │ ├── agent.ts
│ │ │ │ ├── client.ts
│ │ │ │ ├── errors.test.ts
│ │ │ │ ├── errors.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── response.ts
│ │ │ │ ├── types.ts
│ │ │ │ ├── util.test.ts
│ │ │ │ ├── util.ts
│ │ │ │ ├── www-authenticate.test.ts
│ │ │ │ ├── www-authenticate.ts
│ │ │ │ ├── xrpc.test.ts
│ │ │ │ └── xrpc.ts
│ │ │ ├── tests/
│ │ │ │ └── client.test.ts
│ │ │ ├── tsconfig.build.json
│ │ │ ├── tsconfig.json
│ │ │ ├── tsconfig.tests.json
│ │ │ └── vitest.config.ts
│ │ ├── lex-data/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── blob.test.ts
│ │ │ │ ├── blob.ts
│ │ │ │ ├── cid-implementation.test.ts
│ │ │ │ ├── cid.test.ts
│ │ │ │ ├── cid.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── lex-equals.test.ts
│ │ │ │ ├── lex-equals.ts
│ │ │ │ ├── lex-error.test.ts
│ │ │ │ ├── lex-error.ts
│ │ │ │ ├── lex.test.ts
│ │ │ │ ├── lex.ts
│ │ │ │ ├── lib/
│ │ │ │ │ ├── nodejs-buffer.ts
│ │ │ │ │ ├── util.test.ts
│ │ │ │ │ └── util.ts
│ │ │ │ ├── object.test.ts
│ │ │ │ ├── object.ts
│ │ │ │ ├── uint8array-base64.ts
│ │ │ │ ├── uint8array-concat.test.ts
│ │ │ │ ├── uint8array-concat.ts
│ │ │ │ ├── uint8array-from-base64.test.ts
│ │ │ │ ├── uint8array-from-base64.ts
│ │ │ │ ├── uint8array-to-base64.test.ts
│ │ │ │ ├── uint8array-to-base64.ts
│ │ │ │ ├── uint8array.test.ts
│ │ │ │ ├── uint8array.ts
│ │ │ │ ├── utf8-from-base64.test.ts
│ │ │ │ ├── utf8-from-base64.ts
│ │ │ │ ├── utf8-grapheme-len.test.ts
│ │ │ │ ├── utf8-grapheme-len.ts
│ │ │ │ ├── utf8-len.test.ts
│ │ │ │ ├── utf8-len.ts
│ │ │ │ ├── utf8-to-base64.test.ts
│ │ │ │ ├── utf8-to-base64.ts
│ │ │ │ └── utf8.ts
│ │ │ ├── tsconfig.build.json
│ │ │ ├── tsconfig.json
│ │ │ ├── tsconfig.tests.json
│ │ │ └── vitest.config.ts
│ │ ├── lex-document/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ ├── lexicon-document.test.ts
│ │ │ │ ├── lexicon-document.ts
│ │ │ │ ├── lexicon-indexer.ts
│ │ │ │ ├── lexicon-iterable-indexer.ts
│ │ │ │ ├── lexicon-schema-builder.test.ts
│ │ │ │ └── lexicon-schema-builder.ts
│ │ │ ├── tests/
│ │ │ │ ├── fixtures.test.ts
│ │ │ │ ├── lexicon-invalid.json
│ │ │ │ └── lexicon-valid.json
│ │ │ ├── tsconfig.build.json
│ │ │ ├── tsconfig.json
│ │ │ ├── tsconfig.tests.json
│ │ │ └── vitest.config.ts
│ │ ├── lex-installer/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── fs.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── lex-installer.ts
│ │ │ │ ├── lexicons-manifest.test.ts
│ │ │ │ ├── lexicons-manifest.ts
│ │ │ │ ├── nsid-map.ts
│ │ │ │ └── nsid-set.ts
│ │ │ ├── tsconfig.build.json
│ │ │ ├── tsconfig.json
│ │ │ ├── tsconfig.tests.json
│ │ │ └── vitest.config.ts
│ │ ├── lex-json/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── blob.ts
│ │ │ │ ├── bytes.test.ts
│ │ │ │ ├── bytes.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── json.ts
│ │ │ │ ├── lex-json.test.ts
│ │ │ │ ├── lex-json.ts
│ │ │ │ └── link.ts
│ │ │ ├── tests/
│ │ │ │ ├── data-model-invalid.json
│ │ │ │ ├── data-model-valid.json
│ │ │ │ └── fixtures.test.ts
│ │ │ ├── tsconfig.build.json
│ │ │ ├── tsconfig.json
│ │ │ ├── tsconfig.tests.json
│ │ │ └── vitest.config.ts
│ │ ├── lex-password-session/
│ │ │ ├── .gitignore
│ │ │ ├── CHANGELOG.md
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── scripts/
│ │ │ │ └── lex-build.mjs
│ │ │ ├── src/
│ │ │ │ ├── error.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── password-session-utils.test.ts
│ │ │ │ ├── password-session.test.ts
│ │ │ │ ├── password-session.ts
│ │ │ │ └── util.ts
│ │ │ ├── tsconfig.build.json
│ │ │ ├── tsconfig.json
│ │ │ ├── tsconfig.tests.json
│ │ │ └── vitest.config.ts
│ │ ├── lex-resolver/
│ │ │ ├── .gitignore
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── scripts/
│ │ │ │ └── lex-build.mjs
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ ├── lex-resolver-error.ts
│ │ │ │ └── lex-resolver.ts
│ │ │ ├── tests/
│ │ │ │ └── index.test.ts
│ │ │ ├── tsconfig.build.json
│ │ │ ├── tsconfig.json
│ │ │ ├── tsconfig.tests.json
│ │ │ └── vitest.config.ts
│ │ ├── lex-schema/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── core/
│ │ │ │ │ ├── $type.test.ts
│ │ │ │ │ ├── $type.ts
│ │ │ │ │ ├── record-key.ts
│ │ │ │ │ ├── result.ts
│ │ │ │ │ ├── schema.ts
│ │ │ │ │ ├── standard-schema.test.ts
│ │ │ │ │ ├── standard-schema.ts
│ │ │ │ │ ├── string-format.ts
│ │ │ │ │ ├── types.ts
│ │ │ │ │ ├── validation-error.ts
│ │ │ │ │ ├── validation-issue.ts
│ │ │ │ │ └── validator.ts
│ │ │ │ ├── core.ts
│ │ │ │ ├── external.ts
│ │ │ │ ├── helpers.test.ts
│ │ │ │ ├── helpers.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── schema/
│ │ │ │ │ ├── array.test.ts
│ │ │ │ │ ├── array.ts
│ │ │ │ │ ├── blob.test.ts
│ │ │ │ │ ├── blob.ts
│ │ │ │ │ ├── boolean.test.ts
│ │ │ │ │ ├── boolean.ts
│ │ │ │ │ ├── bytes.test.ts
│ │ │ │ │ ├── bytes.ts
│ │ │ │ │ ├── cid.test.ts
│ │ │ │ │ ├── cid.ts
│ │ │ │ │ ├── custom.test.ts
│ │ │ │ │ ├── custom.ts
│ │ │ │ │ ├── dict.test.ts
│ │ │ │ │ ├── dict.ts
│ │ │ │ │ ├── discriminated-union.test.ts
│ │ │ │ │ ├── discriminated-union.ts
│ │ │ │ │ ├── enum.test.ts
│ │ │ │ │ ├── enum.ts
│ │ │ │ │ ├── integer.test.ts
│ │ │ │ │ ├── integer.ts
│ │ │ │ │ ├── intersection.test.ts
│ │ │ │ │ ├── intersection.ts
│ │ │ │ │ ├── lex-map.test.ts
│ │ │ │ │ ├── lex-map.ts
│ │ │ │ │ ├── lex-value.test.ts
│ │ │ │ │ ├── lex-value.ts
│ │ │ │ │ ├── literal.test.ts
│ │ │ │ │ ├── literal.ts
│ │ │ │ │ ├── never.test.ts
│ │ │ │ │ ├── never.ts
│ │ │ │ │ ├── null.test.ts
│ │ │ │ │ ├── null.ts
│ │ │ │ │ ├── nullable.test.ts
│ │ │ │ │ ├── nullable.ts
│ │ │ │ │ ├── object.test.ts
│ │ │ │ │ ├── object.ts
│ │ │ │ │ ├── optional.test.ts
│ │ │ │ │ ├── optional.ts
│ │ │ │ │ ├── params.test.ts
│ │ │ │ │ ├── params.ts
│ │ │ │ │ ├── payload.test.ts
│ │ │ │ │ ├── payload.ts
│ │ │ │ │ ├── permission-set.test.ts
│ │ │ │ │ ├── permission-set.ts
│ │ │ │ │ ├── permission.test.ts
│ │ │ │ │ ├── permission.ts
│ │ │ │ │ ├── procedure.test.ts
│ │ │ │ │ ├── procedure.ts
│ │ │ │ │ ├── query.test.ts
│ │ │ │ │ ├── query.ts
│ │ │ │ │ ├── record.test.ts
│ │ │ │ │ ├── record.ts
│ │ │ │ │ ├── ref.test.ts
│ │ │ │ │ ├── ref.ts
│ │ │ │ │ ├── refine.test.ts
│ │ │ │ │ ├── refine.ts
│ │ │ │ │ ├── regexp.test.ts
│ │ │ │ │ ├── regexp.ts
│ │ │ │ │ ├── string.test.ts
│ │ │ │ │ ├── string.ts
│ │ │ │ │ ├── subscription.test.ts
│ │ │ │ │ ├── subscription.ts
│ │ │ │ │ ├── token.test.ts
│ │ │ │ │ ├── token.ts
│ │ │ │ │ ├── typed-object.test.ts
│ │ │ │ │ ├── typed-object.ts
│ │ │ │ │ ├── typed-ref.test.ts
│ │ │ │ │ ├── typed-ref.ts
│ │ │ │ │ ├── typed-union.test.ts
│ │ │ │ │ ├── typed-union.ts
│ │ │ │ │ ├── union.test.ts
│ │ │ │ │ ├── union.ts
│ │ │ │ │ ├── unknown.test.ts
│ │ │ │ │ ├── unknown.ts
│ │ │ │ │ └── with-default.ts
│ │ │ │ ├── schema.ts
│ │ │ │ └── util/
│ │ │ │ ├── array-agg.test.ts
│ │ │ │ ├── array-agg.ts
│ │ │ │ ├── assertion-util.ts
│ │ │ │ ├── if-any.ts
│ │ │ │ ├── lazy-property.ts
│ │ │ │ └── memoize.ts
│ │ │ ├── tests/
│ │ │ │ └── l.test.ts
│ │ │ ├── tsconfig.build.json
│ │ │ ├── tsconfig.json
│ │ │ ├── tsconfig.tests.json
│ │ │ └── vitest.config.ts
│ │ └── lex-server/
│ │ ├── .npmignore
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── examples/
│ │ │ └── subscription.mjs
│ │ ├── nodejs.d.ts
│ │ ├── nodejs.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── errors.test.ts
│ │ │ ├── errors.ts
│ │ │ ├── index.ts
│ │ │ ├── lex-router.test.ts
│ │ │ ├── lex-router.ts
│ │ │ ├── lib/
│ │ │ │ ├── drain-websocket.ts
│ │ │ │ ├── sleep.ts
│ │ │ │ ├── www-authenticate.test.ts
│ │ │ │ └── www-authenticate.ts
│ │ │ ├── nodejs.test.ts
│ │ │ ├── nodejs.ts
│ │ │ └── service-auth.ts
│ │ ├── tsconfig.build.json
│ │ ├── tsconfig.examples.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.tests.json
│ │ └── vitest.config.ts
│ ├── lex-cli/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── codegen/
│ │ │ │ ├── client.ts
│ │ │ │ ├── common.ts
│ │ │ │ ├── lex-gen.ts
│ │ │ │ ├── server.ts
│ │ │ │ └── util.ts
│ │ │ ├── index.ts
│ │ │ ├── mdgen/
│ │ │ │ └── index.ts
│ │ │ ├── types.ts
│ │ │ └── util.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── lexicon/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── blob-refs.ts
│ │ │ ├── index.ts
│ │ │ ├── lexicons.ts
│ │ │ ├── serialize.ts
│ │ │ ├── types.ts
│ │ │ ├── util.ts
│ │ │ ├── validation.ts
│ │ │ └── validators/
│ │ │ ├── blob.ts
│ │ │ ├── complex.ts
│ │ │ ├── formats.ts
│ │ │ ├── primitives.ts
│ │ │ └── xrpc.ts
│ │ ├── tests/
│ │ │ ├── _scaffolds/
│ │ │ │ └── lexicons.ts
│ │ │ └── general.test.ts
│ │ ├── tsconfig.build.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.tests.json
│ ├── lexicon-resolver/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ ├── lexicon.ts
│ │ │ ├── lexicons/
│ │ │ │ ├── com/
│ │ │ │ │ ├── atproto/
│ │ │ │ │ │ ├── lexicon/
│ │ │ │ │ │ │ ├── schema.defs.ts
│ │ │ │ │ │ │ └── schema.ts
│ │ │ │ │ │ ├── lexicon.ts
│ │ │ │ │ │ ├── sync/
│ │ │ │ │ │ │ ├── getRecord.defs.ts
│ │ │ │ │ │ │ └── getRecord.ts
│ │ │ │ │ │ └── sync.ts
│ │ │ │ │ └── atproto.ts
│ │ │ │ ├── com.ts
│ │ │ │ └── index.ts
│ │ │ ├── record.ts
│ │ │ └── util.ts
│ │ ├── tests/
│ │ │ ├── lexicon.test.ts
│ │ │ └── record.test.ts
│ │ ├── tsconfig.build.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.tests.json
│ ├── oauth/
│ │ ├── jwk/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── alg.ts
│ │ │ │ ├── errors.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── jwk.ts
│ │ │ │ ├── jwks.ts
│ │ │ │ ├── jwt-decode.ts
│ │ │ │ ├── jwt-verify.ts
│ │ │ │ ├── jwt.ts
│ │ │ │ ├── key.ts
│ │ │ │ ├── keyset.ts
│ │ │ │ └── util.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── jwk-jose/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ ├── jose-key.ts
│ │ │ │ └── util.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── jwk-webcrypto/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ ├── util.ts
│ │ │ │ └── webcrypto-key.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── oauth-client/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── constants.ts
│ │ │ │ ├── errors/
│ │ │ │ │ ├── auth-method-unsatisfiable-error.ts
│ │ │ │ │ ├── token-invalid-error.ts
│ │ │ │ │ ├── token-refresh-error.ts
│ │ │ │ │ └── token-revoked-error.ts
│ │ │ │ ├── fetch-dpop.ts
│ │ │ │ ├── identity-resolver.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── lock.ts
│ │ │ │ ├── oauth-authorization-server-metadata-resolver.ts
│ │ │ │ ├── oauth-callback-error.ts
│ │ │ │ ├── oauth-client-auth.ts
│ │ │ │ ├── oauth-client.ts
│ │ │ │ ├── oauth-protected-resource-metadata-resolver.ts
│ │ │ │ ├── oauth-resolver-error.ts
│ │ │ │ ├── oauth-resolver.ts
│ │ │ │ ├── oauth-response-error.ts
│ │ │ │ ├── oauth-server-agent.ts
│ │ │ │ ├── oauth-server-factory.ts
│ │ │ │ ├── oauth-session.ts
│ │ │ │ ├── runtime-implementation.ts
│ │ │ │ ├── runtime.ts
│ │ │ │ ├── session-getter.ts
│ │ │ │ ├── state-store.ts
│ │ │ │ ├── types.ts
│ │ │ │ ├── util.ts
│ │ │ │ └── validate-client-metadata.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── oauth-client-browser/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── browser-oauth-client.ts
│ │ │ │ ├── browser-oauth-database.ts
│ │ │ │ ├── browser-runtime-implementation.ts
│ │ │ │ ├── errors.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── indexed-db/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── db-index.ts
│ │ │ │ │ ├── db-object-store.ts
│ │ │ │ │ ├── db-transaction.ts
│ │ │ │ │ ├── db.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── schema.ts
│ │ │ │ │ └── util.ts
│ │ │ │ ├── indexed-db-store.ts
│ │ │ │ └── util.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── oauth-client-browser-example/
│ │ │ ├── .gitignore
│ │ │ ├── CHANGELOG.md
│ │ │ ├── index.html
│ │ │ ├── package.json
│ │ │ ├── server.js
│ │ │ ├── src/
│ │ │ │ ├── App.tsx
│ │ │ │ ├── Home.tsx
│ │ │ │ ├── components/
│ │ │ │ │ ├── AtmosphereSignInDialog.tsx
│ │ │ │ │ ├── AtmosphereSignInForm.tsx
│ │ │ │ │ ├── Button.tsx
│ │ │ │ │ ├── ButtonDropdown.tsx
│ │ │ │ │ ├── Icons.tsx
│ │ │ │ │ ├── JsonQueryResult.tsx
│ │ │ │ │ ├── Layout.tsx
│ │ │ │ │ ├── ProfileInfo.tsx
│ │ │ │ │ ├── SessionInfo.tsx
│ │ │ │ │ ├── Spinner.tsx
│ │ │ │ │ ├── TokenInfo.tsx
│ │ │ │ │ └── UserMenu.tsx
│ │ │ │ ├── constants.ts
│ │ │ │ ├── index.css
│ │ │ │ ├── index.tsx
│ │ │ │ ├── lexicons.ts
│ │ │ │ ├── lib/
│ │ │ │ │ ├── use-abortable-effect.ts
│ │ │ │ │ ├── use-blob-url.ts
│ │ │ │ │ ├── use-click-outside.ts
│ │ │ │ │ ├── use-escape-key.ts
│ │ │ │ │ └── use-random-string.ts
│ │ │ │ ├── oauthClient.ts
│ │ │ │ ├── providers/
│ │ │ │ │ ├── AuthenticationProvider.tsx
│ │ │ │ │ ├── BskyClientProvider.tsx
│ │ │ │ │ └── OAuthProvider.tsx
│ │ │ │ └── queries/
│ │ │ │ ├── use-get-token-info-query.ts
│ │ │ │ ├── use-lex-query.ts
│ │ │ │ └── use-lex-record.ts
│ │ │ ├── tsconfig.build.json
│ │ │ ├── tsconfig.json
│ │ │ ├── tsconfig.tools.json
│ │ │ └── vite.config.mjs
│ │ ├── oauth-client-expo/
│ │ │ ├── .gitignore
│ │ │ ├── CHANGELOG.md
│ │ │ ├── README.md
│ │ │ ├── android/
│ │ │ │ ├── .editorconfig
│ │ │ │ ├── build.gradle
│ │ │ │ └── src/
│ │ │ │ └── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ └── java/
│ │ │ │ └── expo/
│ │ │ │ └── modules/
│ │ │ │ └── atprotooauthclient/
│ │ │ │ ├── Crypto.kt
│ │ │ │ ├── ExpoAtprotoOAuthClientModule.kt
│ │ │ │ ├── Jose.kt
│ │ │ │ └── Records.kt
│ │ │ ├── expo-module.config.json
│ │ │ ├── ios/
│ │ │ │ ├── Crypto.swift
│ │ │ │ ├── ExpoAtprotoOAuthClient.podspec
│ │ │ │ ├── ExpoAtprotoOAuthClientModule.swift
│ │ │ │ ├── Jose.swift
│ │ │ │ └── Records.swift
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── ExpoAtprotoOAuthClientModule.ts
│ │ │ │ ├── ExpoAtprotoOAuthClientModule.types.ts
│ │ │ │ ├── expo-oauth-client-interface.ts
│ │ │ │ ├── expo-oauth-client-options.ts
│ │ │ │ ├── expo-oauth-client.d.ts
│ │ │ │ ├── expo-oauth-client.native.ts
│ │ │ │ ├── expo-oauth-client.web.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── polyfill.d.ts
│ │ │ │ ├── polyfill.native.ts
│ │ │ │ ├── polyfill.web.ts
│ │ │ │ └── utils/
│ │ │ │ ├── expo-key.ts
│ │ │ │ ├── mmkv-simple-store-ttl.ts
│ │ │ │ ├── mmkv-simple-store.ts
│ │ │ │ └── stores.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── oauth-client-node/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ ├── node-dpop-store.ts
│ │ │ │ ├── node-oauth-client.ts
│ │ │ │ └── util.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── oauth-provider/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── access-token/
│ │ │ │ │ └── access-token-mode.ts
│ │ │ │ ├── account/
│ │ │ │ │ ├── account-manager.ts
│ │ │ │ │ ├── account-store.ts
│ │ │ │ │ ├── sign-in-data.ts
│ │ │ │ │ └── sign-up-input.ts
│ │ │ │ ├── client/
│ │ │ │ │ ├── client-auth.ts
│ │ │ │ │ ├── client-data.ts
│ │ │ │ │ ├── client-id.ts
│ │ │ │ │ ├── client-info.ts
│ │ │ │ │ ├── client-manager.ts
│ │ │ │ │ ├── client-store.ts
│ │ │ │ │ ├── client-utils.ts
│ │ │ │ │ └── client.ts
│ │ │ │ ├── constants.ts
│ │ │ │ ├── customization/
│ │ │ │ │ ├── branding.ts
│ │ │ │ │ ├── build-customization-css.ts
│ │ │ │ │ ├── build-customization-data.ts
│ │ │ │ │ ├── colors.ts
│ │ │ │ │ ├── customization.ts
│ │ │ │ │ └── links.ts
│ │ │ │ ├── device/
│ │ │ │ │ ├── device-data.ts
│ │ │ │ │ ├── device-id.ts
│ │ │ │ │ ├── device-manager.ts
│ │ │ │ │ ├── device-store.ts
│ │ │ │ │ └── session-id.ts
│ │ │ │ ├── dpop/
│ │ │ │ │ ├── dpop-manager.ts
│ │ │ │ │ ├── dpop-nonce.ts
│ │ │ │ │ └── dpop-proof.ts
│ │ │ │ ├── errors/
│ │ │ │ │ ├── access-denied-error.ts
│ │ │ │ │ ├── account-selection-required-error.ts
│ │ │ │ │ ├── authorization-error.ts
│ │ │ │ │ ├── consent-required-error.ts
│ │ │ │ │ ├── error-parser.ts
│ │ │ │ │ ├── handle-unavailable-error.ts
│ │ │ │ │ ├── invalid-authorization-details-error.ts
│ │ │ │ │ ├── invalid-client-error.ts
│ │ │ │ │ ├── invalid-client-id-error.ts
│ │ │ │ │ ├── invalid-client-metadata-error.ts
│ │ │ │ │ ├── invalid-dpop-key-binding-error.ts
│ │ │ │ │ ├── invalid-dpop-proof-error.ts
│ │ │ │ │ ├── invalid-grant-error.ts
│ │ │ │ │ ├── invalid-invite-code-error.ts
│ │ │ │ │ ├── invalid-redirect-uri-error.ts
│ │ │ │ │ ├── invalid-request-error.ts
│ │ │ │ │ ├── invalid-scope-error.ts
│ │ │ │ │ ├── invalid-token-error.ts
│ │ │ │ │ ├── login-required-error.ts
│ │ │ │ │ ├── oauth-error.ts
│ │ │ │ │ ├── second-authentication-factor-required-error.ts
│ │ │ │ │ ├── unauthorized-client-error.ts
│ │ │ │ │ ├── use-dpop-nonce-error.ts
│ │ │ │ │ └── www-authenticate-error.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── lexicon/
│ │ │ │ │ ├── lexicon-data.ts
│ │ │ │ │ ├── lexicon-getter.ts
│ │ │ │ │ ├── lexicon-manager.ts
│ │ │ │ │ └── lexicon-store.ts
│ │ │ │ ├── lib/
│ │ │ │ │ ├── csp/
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── hcaptcha.ts
│ │ │ │ │ ├── html/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── build-document.ts
│ │ │ │ │ │ ├── escapers.ts
│ │ │ │ │ │ ├── html.ts
│ │ │ │ │ │ ├── hydration-data.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── tags.ts
│ │ │ │ │ │ └── util.ts
│ │ │ │ │ ├── http/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── accept.ts
│ │ │ │ │ │ ├── context.ts
│ │ │ │ │ │ ├── headers.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── method.ts
│ │ │ │ │ │ ├── middleware.ts
│ │ │ │ │ │ ├── parser.ts
│ │ │ │ │ │ ├── path.ts
│ │ │ │ │ │ ├── request.ts
│ │ │ │ │ │ ├── response.ts
│ │ │ │ │ │ ├── route.ts
│ │ │ │ │ │ ├── router.ts
│ │ │ │ │ │ ├── security-headers.ts
│ │ │ │ │ │ ├── stream.ts
│ │ │ │ │ │ ├── types.ts
│ │ │ │ │ │ └── url.ts
│ │ │ │ │ ├── nsid.ts
│ │ │ │ │ ├── redis.ts
│ │ │ │ │ ├── util/
│ │ │ │ │ │ ├── authorization-header.ts
│ │ │ │ │ │ ├── cast.ts
│ │ │ │ │ │ ├── color.ts
│ │ │ │ │ │ ├── crypto.ts
│ │ │ │ │ │ ├── date.ts
│ │ │ │ │ │ ├── error.ts
│ │ │ │ │ │ ├── function.ts
│ │ │ │ │ │ ├── locale.ts
│ │ │ │ │ │ ├── object.ts
│ │ │ │ │ │ ├── redirect-uri.ts
│ │ │ │ │ │ ├── time.ts
│ │ │ │ │ │ ├── type.ts
│ │ │ │ │ │ ├── ui8.ts
│ │ │ │ │ │ ├── well-known.ts
│ │ │ │ │ │ └── zod-error.ts
│ │ │ │ │ ├── write-form-redirect.ts
│ │ │ │ │ └── write-html.ts
│ │ │ │ ├── metadata/
│ │ │ │ │ └── build-metadata.ts
│ │ │ │ ├── oauth-client.ts
│ │ │ │ ├── oauth-dpop.ts
│ │ │ │ ├── oauth-errors.ts
│ │ │ │ ├── oauth-hooks.ts
│ │ │ │ ├── oauth-middleware.ts
│ │ │ │ ├── oauth-provider.ts
│ │ │ │ ├── oauth-store.ts
│ │ │ │ ├── oauth-verifier.ts
│ │ │ │ ├── oidc/
│ │ │ │ │ └── sub.ts
│ │ │ │ ├── replay/
│ │ │ │ │ ├── replay-manager.ts
│ │ │ │ │ ├── replay-store-memory.ts
│ │ │ │ │ ├── replay-store-redis.ts
│ │ │ │ │ └── replay-store.ts
│ │ │ │ ├── request/
│ │ │ │ │ ├── code.ts
│ │ │ │ │ ├── request-data.ts
│ │ │ │ │ ├── request-id.ts
│ │ │ │ │ ├── request-manager.ts
│ │ │ │ │ ├── request-store.ts
│ │ │ │ │ └── request-uri.ts
│ │ │ │ ├── result/
│ │ │ │ │ ├── authorization-redirect-parameters.ts
│ │ │ │ │ ├── authorization-result-authorize-page.ts
│ │ │ │ │ └── authorization-result-redirect.ts
│ │ │ │ ├── router/
│ │ │ │ │ ├── assets/
│ │ │ │ │ │ ├── assets-manifest.ts
│ │ │ │ │ │ ├── assets.ts
│ │ │ │ │ │ ├── csrf.ts
│ │ │ │ │ │ ├── send-account-page.ts
│ │ │ │ │ │ ├── send-authorization-page.ts
│ │ │ │ │ │ ├── send-cookie-error-page.ts
│ │ │ │ │ │ ├── send-error-page.ts
│ │ │ │ │ │ └── send-redirect.ts
│ │ │ │ │ ├── create-account-page-middleware.ts
│ │ │ │ │ ├── create-api-middleware.ts
│ │ │ │ │ ├── create-authorization-page-middleware.ts
│ │ │ │ │ ├── create-oauth-middleware.ts
│ │ │ │ │ ├── error-handler.ts
│ │ │ │ │ └── middleware-options.ts
│ │ │ │ ├── signer/
│ │ │ │ │ ├── access-token-payload.ts
│ │ │ │ │ ├── api-token-payload.ts
│ │ │ │ │ └── signer.ts
│ │ │ │ ├── token/
│ │ │ │ │ ├── refresh-token.ts
│ │ │ │ │ ├── token-claims.ts
│ │ │ │ │ ├── token-data.ts
│ │ │ │ │ ├── token-id.ts
│ │ │ │ │ ├── token-manager.ts
│ │ │ │ │ └── token-store.ts
│ │ │ │ └── types/
│ │ │ │ ├── authorization-response-error.ts
│ │ │ │ ├── color-hue.ts
│ │ │ │ ├── email-otp.ts
│ │ │ │ ├── email.ts
│ │ │ │ ├── handle.ts
│ │ │ │ ├── invite-code.ts
│ │ │ │ ├── par-response-error.ts
│ │ │ │ ├── password.ts
│ │ │ │ └── rgb-color.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── oauth-provider-api/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── api-endpoints.ts
│ │ │ │ ├── contants.ts
│ │ │ │ ├── customization-data.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── types.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ ├── oauth-provider-frontend/
│ │ │ ├── .gitignore
│ │ │ ├── .linguirc
│ │ │ ├── CHANGELOG.md
│ │ │ ├── account.html
│ │ │ ├── hydration-data.d.ts
│ │ │ ├── index.html
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── account-page.tsx
│ │ │ │ ├── api/
│ │ │ │ │ ├── api.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── json-client.ts
│ │ │ │ ├── components/
│ │ │ │ │ ├── AccountSelector.tsx
│ │ │ │ │ ├── Admonition.tsx
│ │ │ │ │ ├── Avatar.tsx
│ │ │ │ │ ├── Button.tsx
│ │ │ │ │ ├── ContentCard.tsx
│ │ │ │ │ ├── Dialog.tsx
│ │ │ │ │ ├── Divider.tsx
│ │ │ │ │ ├── ErrorScreen.tsx
│ │ │ │ │ ├── Footer.tsx
│ │ │ │ │ ├── Layout.tsx
│ │ │ │ │ ├── Link.tsx
│ │ │ │ │ ├── Loader.tsx
│ │ │ │ │ ├── LocaleSelector.tsx
│ │ │ │ │ ├── Nav.tsx
│ │ │ │ │ ├── Prompt.tsx
│ │ │ │ │ ├── Toast.tsx
│ │ │ │ │ ├── forms/
│ │ │ │ │ │ ├── Checkbox.tsx
│ │ │ │ │ │ ├── Errors.tsx
│ │ │ │ │ │ ├── Fieldset.tsx
│ │ │ │ │ │ ├── Item.tsx
│ │ │ │ │ │ ├── Label.tsx
│ │ │ │ │ │ ├── Text.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ └── util/
│ │ │ │ │ └── Palette.tsx
│ │ │ │ ├── data/
│ │ │ │ │ ├── useAccountSessionsQuery.ts
│ │ │ │ │ ├── useClientName.ts
│ │ │ │ │ ├── useCurrentSession.ts
│ │ │ │ │ ├── useCustomizationData.ts
│ │ │ │ │ ├── useDeviceSessionsQuery.ts
│ │ │ │ │ ├── useFriendlyClientId.ts
│ │ │ │ │ ├── useHasAccounts.ts
│ │ │ │ │ ├── useHydrationData.ts
│ │ │ │ │ ├── useOAuthSessionsQuery.ts
│ │ │ │ │ ├── usePasswordConfirmMutation.ts
│ │ │ │ │ ├── usePasswordResetMutation.ts
│ │ │ │ │ ├── useRevokeAccountSessionMutation.ts
│ │ │ │ │ ├── useRevokeOAuthSessionMutation.ts
│ │ │ │ │ ├── useSignInMutation.tsx
│ │ │ │ │ └── useSignOutMutation.ts
│ │ │ │ ├── locales/
│ │ │ │ │ ├── activateLocale.ts
│ │ │ │ │ ├── an/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── ast/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── ca/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── da/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── de/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── el/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── en/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── en-GB/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── es/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── eu/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── fi/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── fr/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── ga/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── gl/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── hi/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── hu/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── ia/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── id/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── index.tsx
│ │ │ │ │ ├── it/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── ja/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── km/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── ko/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── locales.ts
│ │ │ │ │ ├── ne/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── nl/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── pl/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── pt-BR/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── ro/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── ru/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── setup.ts
│ │ │ │ │ ├── sv/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── th/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── tr/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── uk/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── vi/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── zh-CN/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── zh-HK/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ └── zh-TW/
│ │ │ │ │ └── messages.po
│ │ │ │ ├── routeTree.gen.ts
│ │ │ │ ├── routes/
│ │ │ │ │ ├── __root.tsx
│ │ │ │ │ └── account/
│ │ │ │ │ ├── _appLayout/
│ │ │ │ │ │ └── $sub.tsx
│ │ │ │ │ ├── _appLayout.tsx
│ │ │ │ │ ├── _minimalLayout/
│ │ │ │ │ │ ├── branding.tsx
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ ├── reset-password.tsx
│ │ │ │ │ │ └── sign-in.tsx
│ │ │ │ │ └── _minimalLayout.tsx
│ │ │ │ ├── style.css
│ │ │ │ ├── styles/
│ │ │ │ │ ├── radix-dialog.css
│ │ │ │ │ ├── radix-popover.css
│ │ │ │ │ └── radix-toast.css
│ │ │ │ └── util/
│ │ │ │ ├── cookies.ts
│ │ │ │ ├── format2FACode.ts
│ │ │ │ ├── getAccountName.ts
│ │ │ │ ├── lang-string.tsx
│ │ │ │ ├── lang.ts
│ │ │ │ ├── oauth-client.ts
│ │ │ │ ├── passwords.ts
│ │ │ │ ├── sanitizeHandle.ts
│ │ │ │ ├── sleep.ts
│ │ │ │ ├── upsert.ts
│ │ │ │ └── wait.ts
│ │ │ ├── tsconfig.json
│ │ │ ├── tsconfig.src.json
│ │ │ ├── tsconfig.tools.json
│ │ │ └── vite.config.mts
│ │ ├── oauth-provider-ui/
│ │ │ ├── .gitignore
│ │ │ ├── .linguirc
│ │ │ ├── CHANGELOG.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── authorization-page.html
│ │ │ ├── cookie-error-page.html
│ │ │ ├── error-page.html
│ │ │ ├── hydration-data.d.ts
│ │ │ ├── index.html
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── authorization-page.tsx
│ │ │ │ ├── components/
│ │ │ │ │ ├── forms/
│ │ │ │ │ │ ├── button-toggle-visibility.tsx
│ │ │ │ │ │ ├── button.tsx
│ │ │ │ │ │ ├── checkbox.tsx
│ │ │ │ │ │ ├── fieldset.tsx
│ │ │ │ │ │ ├── form-card-async.tsx
│ │ │ │ │ │ ├── form-card.tsx
│ │ │ │ │ │ ├── input-checkbox.tsx
│ │ │ │ │ │ ├── input-container.tsx
│ │ │ │ │ │ ├── input-email-address.tsx
│ │ │ │ │ │ ├── input-new-password.tsx
│ │ │ │ │ │ ├── input-password.tsx
│ │ │ │ │ │ ├── input-text.tsx
│ │ │ │ │ │ ├── input-token.tsx
│ │ │ │ │ │ └── wizard-card.tsx
│ │ │ │ │ ├── layouts/
│ │ │ │ │ │ ├── layout-title-page.tsx
│ │ │ │ │ │ └── layout-welcome.tsx
│ │ │ │ │ └── utils/
│ │ │ │ │ ├── account-identifier.tsx
│ │ │ │ │ ├── account-image.tsx
│ │ │ │ │ ├── admonition.tsx
│ │ │ │ │ ├── client-image.tsx
│ │ │ │ │ ├── client-name.tsx
│ │ │ │ │ ├── description-card.tsx
│ │ │ │ │ ├── error-card.tsx
│ │ │ │ │ ├── error-message.tsx
│ │ │ │ │ ├── help-card.tsx
│ │ │ │ │ ├── icons.tsx
│ │ │ │ │ ├── lang-string.tsx
│ │ │ │ │ ├── link-anchor.tsx
│ │ │ │ │ ├── link-title.tsx
│ │ │ │ │ ├── page-footer.tsx
│ │ │ │ │ ├── password-strength-label.tsx
│ │ │ │ │ ├── password-strength-meter.tsx
│ │ │ │ │ ├── scope-description.tsx
│ │ │ │ │ └── url-viewer.tsx
│ │ │ │ ├── cookie-error-page.tsx
│ │ │ │ ├── error-page.tsx
│ │ │ │ ├── hooks/
│ │ │ │ │ ├── use-api.ts
│ │ │ │ │ ├── use-async-action.ts
│ │ │ │ │ ├── use-bound-dispatch.ts
│ │ │ │ │ ├── use-browser-color-scheme.ts
│ │ │ │ │ ├── use-click-outside.ts
│ │ │ │ │ ├── use-escape-key.ts
│ │ │ │ │ ├── use-random-string.ts
│ │ │ │ │ └── use-stepper.ts
│ │ │ │ ├── lib/
│ │ │ │ │ ├── api.ts
│ │ │ │ │ ├── cookies.ts
│ │ │ │ │ ├── json-client.ts
│ │ │ │ │ ├── lang.ts
│ │ │ │ │ ├── oauth-client.ts
│ │ │ │ │ ├── password.ts
│ │ │ │ │ ├── ref.ts
│ │ │ │ │ └── util.ts
│ │ │ │ ├── locales/
│ │ │ │ │ ├── an/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── ast/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── ca/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── da/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── de/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── el/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── en/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── en-GB/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── es/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── eu/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── fi/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── fr/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── ga/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── gl/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── hi/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── hu/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── ia/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── id/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── it/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── ja/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── km/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── ko/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── load.ts
│ │ │ │ │ ├── locale-provider.tsx
│ │ │ │ │ ├── locale-selector.tsx
│ │ │ │ │ ├── locales.ts
│ │ │ │ │ ├── ne/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── nl/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── pl/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── pt-BR/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── ro/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── ru/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── sv/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── th/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── tr/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── uk/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── vi/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── zh-CN/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ ├── zh-HK/
│ │ │ │ │ │ └── messages.po
│ │ │ │ │ └── zh-TW/
│ │ │ │ │ └── messages.po
│ │ │ │ ├── style.css
│ │ │ │ └── views/
│ │ │ │ ├── authorize/
│ │ │ │ │ ├── authorize-view.tsx
│ │ │ │ │ ├── consent/
│ │ │ │ │ │ ├── consent-form.tsx
│ │ │ │ │ │ └── consent-view.tsx
│ │ │ │ │ ├── reset-password/
│ │ │ │ │ │ ├── reset-password-confirm-form.tsx
│ │ │ │ │ │ ├── reset-password-request-form.tsx
│ │ │ │ │ │ └── reset-password-view.tsx
│ │ │ │ │ ├── sign-in/
│ │ │ │ │ │ ├── sign-in-form.tsx
│ │ │ │ │ │ ├── sign-in-picker.tsx
│ │ │ │ │ │ └── sign-in-view.tsx
│ │ │ │ │ ├── sign-up/
│ │ │ │ │ │ ├── sign-up-account-form.tsx
│ │ │ │ │ │ ├── sign-up-disclaimer.tsx
│ │ │ │ │ │ ├── sign-up-handle-form.tsx
│ │ │ │ │ │ ├── sign-up-hcaptcha-form.tsx
│ │ │ │ │ │ └── sign-up-view.tsx
│ │ │ │ │ └── welcome/
│ │ │ │ │ └── welcome-view.tsx
│ │ │ │ └── error/
│ │ │ │ ├── cookie-error-view.tsx
│ │ │ │ └── error-view.tsx
│ │ │ ├── tsconfig.json
│ │ │ ├── tsconfig.src.json
│ │ │ ├── tsconfig.tools.json
│ │ │ └── vite.config.mjs
│ │ ├── oauth-scopes/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── jest.config.js
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── atproto-oauth-scope.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── lib/
│ │ │ │ │ ├── lexicon.ts
│ │ │ │ │ ├── mime.test.ts
│ │ │ │ │ ├── mime.ts
│ │ │ │ │ ├── nsid.ts
│ │ │ │ │ ├── parser.ts
│ │ │ │ │ ├── resource-permission.ts
│ │ │ │ │ ├── syntax-lexicon.ts
│ │ │ │ │ ├── syntax-string.test.ts
│ │ │ │ │ ├── syntax-string.ts
│ │ │ │ │ ├── syntax.test.ts
│ │ │ │ │ ├── syntax.ts
│ │ │ │ │ └── util.ts
│ │ │ │ ├── scope-missing-error.ts
│ │ │ │ ├── scope-permissions-transition.test.ts
│ │ │ │ ├── scope-permissions-transition.ts
│ │ │ │ ├── scope-permissions.test.ts
│ │ │ │ ├── scope-permissions.ts
│ │ │ │ ├── scopes/
│ │ │ │ │ ├── account-permission.test.ts
│ │ │ │ │ ├── account-permission.ts
│ │ │ │ │ ├── blob-permission.test.ts
│ │ │ │ │ ├── blob-permission.ts
│ │ │ │ │ ├── identity-permission.test.ts
│ │ │ │ │ ├── identity-permission.ts
│ │ │ │ │ ├── include-scope.test.ts
│ │ │ │ │ ├── include-scope.ts
│ │ │ │ │ ├── repo-permission.test.ts
│ │ │ │ │ ├── repo-permission.ts
│ │ │ │ │ ├── rpc-permission.test.ts
│ │ │ │ │ └── rpc-permission.ts
│ │ │ │ ├── scopes-set.test.ts
│ │ │ │ └── scopes-set.ts
│ │ │ ├── tsconfig.build.json
│ │ │ ├── tsconfig.json
│ │ │ └── tsconfig.tests.json
│ │ └── oauth-types/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── atproto-loopback-client-id.ts
│ │ │ ├── atproto-loopback-client-metadata.ts
│ │ │ ├── atproto-loopback-client-redirect-uris.ts
│ │ │ ├── atproto-oauth-scope.ts
│ │ │ ├── atproto-oauth-token-response.ts
│ │ │ ├── constants.ts
│ │ │ ├── index.ts
│ │ │ ├── oauth-access-token.ts
│ │ │ ├── oauth-authorization-code-grant-token-request.ts
│ │ │ ├── oauth-authorization-details.ts
│ │ │ ├── oauth-authorization-request-jar.ts
│ │ │ ├── oauth-authorization-request-par.ts
│ │ │ ├── oauth-authorization-request-parameters.ts
│ │ │ ├── oauth-authorization-request-query.ts
│ │ │ ├── oauth-authorization-request-uri.ts
│ │ │ ├── oauth-authorization-response-error.ts
│ │ │ ├── oauth-authorization-server-metadata.ts
│ │ │ ├── oauth-client-credentials-grant-token-request.ts
│ │ │ ├── oauth-client-credentials.ts
│ │ │ ├── oauth-client-id-discoverable.ts
│ │ │ ├── oauth-client-id-loopback.ts
│ │ │ ├── oauth-client-id.ts
│ │ │ ├── oauth-client-metadata.ts
│ │ │ ├── oauth-code-challenge-method.ts
│ │ │ ├── oauth-endpoint-auth-method.ts
│ │ │ ├── oauth-endpoint-name.ts
│ │ │ ├── oauth-grant-type.ts
│ │ │ ├── oauth-introspection-response.ts
│ │ │ ├── oauth-issuer-identifier.ts
│ │ │ ├── oauth-par-response.ts
│ │ │ ├── oauth-password-grant-token-request.ts
│ │ │ ├── oauth-prompt-mode.ts
│ │ │ ├── oauth-protected-resource-metadata.ts
│ │ │ ├── oauth-redirect-uri.ts
│ │ │ ├── oauth-refresh-token-grant-token-request.ts
│ │ │ ├── oauth-refresh-token.ts
│ │ │ ├── oauth-request-uri.ts
│ │ │ ├── oauth-response-mode.ts
│ │ │ ├── oauth-response-type.ts
│ │ │ ├── oauth-scope.ts
│ │ │ ├── oauth-token-identification.ts
│ │ │ ├── oauth-token-request.ts
│ │ │ ├── oauth-token-response.ts
│ │ │ ├── oauth-token-type.ts
│ │ │ ├── oidc-authorization-error-response.ts
│ │ │ ├── oidc-claims-parameter.ts
│ │ │ ├── oidc-claims-properties.ts
│ │ │ ├── oidc-entity-type.ts
│ │ │ ├── oidc-userinfo.ts
│ │ │ ├── uri.ts
│ │ │ └── util.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── ozone/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── bin/
│ │ │ └── migration-create.ts
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── api/
│ │ │ │ ├── chat/
│ │ │ │ │ ├── getActorMetadata.ts
│ │ │ │ │ ├── getMessageContext.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── communication/
│ │ │ │ │ ├── createTemplate.ts
│ │ │ │ │ ├── deleteTemplate.ts
│ │ │ │ │ ├── listTemplates.ts
│ │ │ │ │ └── updateTemplate.ts
│ │ │ │ ├── health.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── label/
│ │ │ │ │ ├── fetchLabels.ts
│ │ │ │ │ ├── queryLabels.ts
│ │ │ │ │ └── subscribeLabels.ts
│ │ │ │ ├── moderation/
│ │ │ │ │ ├── cancelScheduledActions.ts
│ │ │ │ │ ├── emitEvent.ts
│ │ │ │ │ ├── getAccountTimeline.ts
│ │ │ │ │ ├── getEvent.ts
│ │ │ │ │ ├── getRecord.ts
│ │ │ │ │ ├── getRecords.ts
│ │ │ │ │ ├── getRepo.ts
│ │ │ │ │ ├── getReporterStats.ts
│ │ │ │ │ ├── getRepos.ts
│ │ │ │ │ ├── getSubjects.ts
│ │ │ │ │ ├── listScheduledActions.ts
│ │ │ │ │ ├── queryEvents.ts
│ │ │ │ │ ├── queryStatuses.ts
│ │ │ │ │ ├── scheduleAction.ts
│ │ │ │ │ ├── searchRepos.ts
│ │ │ │ │ └── util.ts
│ │ │ │ ├── proxied.ts
│ │ │ │ ├── report/
│ │ │ │ │ └── createReport.ts
│ │ │ │ ├── safelink/
│ │ │ │ │ ├── addRule.ts
│ │ │ │ │ ├── queryEvents.ts
│ │ │ │ │ ├── queryRules.ts
│ │ │ │ │ ├── removeRule.ts
│ │ │ │ │ └── updateRule.ts
│ │ │ │ ├── server/
│ │ │ │ │ └── getConfig.ts
│ │ │ │ ├── set/
│ │ │ │ │ ├── addValues.ts
│ │ │ │ │ ├── deleteSet.ts
│ │ │ │ │ ├── deleteValues.ts
│ │ │ │ │ ├── getValues.ts
│ │ │ │ │ ├── querySets.ts
│ │ │ │ │ └── upsertSet.ts
│ │ │ │ ├── setting/
│ │ │ │ │ ├── listOptions.ts
│ │ │ │ │ ├── removeOptions.ts
│ │ │ │ │ └── upsertOption.ts
│ │ │ │ ├── team/
│ │ │ │ │ ├── addMember.ts
│ │ │ │ │ ├── deleteMember.ts
│ │ │ │ │ ├── listMembers.ts
│ │ │ │ │ └── updateMember.ts
│ │ │ │ ├── util.ts
│ │ │ │ ├── verification/
│ │ │ │ │ ├── grantVerifications.ts
│ │ │ │ │ ├── listVerifications.ts
│ │ │ │ │ └── revokeVerifications.ts
│ │ │ │ └── well-known.ts
│ │ │ ├── auth-verifier.ts
│ │ │ ├── background.ts
│ │ │ ├── communication-service/
│ │ │ │ ├── template.ts
│ │ │ │ └── util.ts
│ │ │ ├── config/
│ │ │ │ ├── config.ts
│ │ │ │ ├── env.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── secrets.ts
│ │ │ ├── context.ts
│ │ │ ├── daemon/
│ │ │ │ ├── blob-diverter.ts
│ │ │ │ ├── context.ts
│ │ │ │ ├── event-pusher.ts
│ │ │ │ ├── event-reverser.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── materialized-view-refresher.ts
│ │ │ │ ├── scheduled-action-processor.ts
│ │ │ │ ├── strike-expiry-processor.ts
│ │ │ │ ├── team-profile-synchronizer.ts
│ │ │ │ └── verification-listener.ts
│ │ │ ├── db/
│ │ │ │ ├── index.ts
│ │ │ │ ├── migrations/
│ │ │ │ │ ├── 20231219T205730722Z-init.ts
│ │ │ │ │ ├── 20240116T085607200Z-communication-template.ts
│ │ │ │ │ ├── 20240201T051104136Z-mod-event-blobs.ts
│ │ │ │ │ ├── 20240208T213404429Z-add-tags-column-to-moderation-subject.ts
│ │ │ │ │ ├── 20240228T003647759Z-add-label-sigs.ts
│ │ │ │ │ ├── 20240408T192432676Z-mute-reporting.ts
│ │ │ │ │ ├── 20240506T225055595Z-message-subject.ts
│ │ │ │ │ ├── 20240521T211332580Z-member.ts
│ │ │ │ │ ├── 20240814T003647759Z-event-created-at-index.ts
│ │ │ │ │ ├── 20240903T205730722Z-add-template-lang.ts
│ │ │ │ │ ├── 20240904T205730722Z-add-subject-did-index.ts
│ │ │ │ │ ├── 20241001T205730722Z-subject-status-review-state-index.ts
│ │ │ │ │ ├── 20241008T205730722Z-sets.ts
│ │ │ │ │ ├── 20241018T205730722Z-setting.ts
│ │ │ │ │ ├── 20241026T205730722Z-add-hosting-status-to-subject-status.ts
│ │ │ │ │ ├── 20241220T144630860Z-stats-materialized-views.ts
│ │ │ │ │ ├── 20250204T003647759Z-add-subject-priority-score.ts
│ │ │ │ │ ├── 20250211T003647759Z-add-reporter-stats-index.ts
│ │ │ │ │ ├── 20250211T132135150Z-moderation-event-message-partial-idx.ts
│ │ │ │ │ ├── 20250221T132135150Z-member-details.ts
│ │ │ │ │ ├── 20250404T201720309Z-subject-status-sort-idxs.ts
│ │ │ │ │ ├── 20250415T201720309Z-verification.ts
│ │ │ │ │ ├── 20250417T201720309Z-firehose-cursor.ts
│ │ │ │ │ ├── 20250609T110704000Z-safelink.ts
│ │ │ │ │ ├── 20250618T180246000Z-add-mod-tool-to-moderation-event.ts
│ │ │ │ │ ├── 20250701T000000000Z-add-age-assurance-state.ts
│ │ │ │ │ ├── 20250715T000000000Z-add-mod-event-external-id.ts
│ │ │ │ │ ├── 20250718T150931000Z-update-appeal-reason-stats.ts
│ │ │ │ │ ├── 20250813T000000000Z-mod-tool-batch-id-index.ts
│ │ │ │ │ ├── 20250923T000000000Z-scheduled-actions.ts
│ │ │ │ │ ├── 20251008T120000000Z-add-strike-system.ts
│ │ │ │ │ ├── 20260210T154806448Z-mod-event-created-by-indexes.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── provider.ts
│ │ │ │ ├── pagination.ts
│ │ │ │ ├── schema/
│ │ │ │ │ ├── account_events_stats.ts
│ │ │ │ │ ├── account_record_events_stats.ts
│ │ │ │ │ ├── account_record_status_stats.ts
│ │ │ │ │ ├── account_strike.ts
│ │ │ │ │ ├── blob_push_event.ts
│ │ │ │ │ ├── communication_template.ts
│ │ │ │ │ ├── firehose_cursor.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── job_cursor.ts
│ │ │ │ │ ├── label.ts
│ │ │ │ │ ├── member.ts
│ │ │ │ │ ├── moderation_event.ts
│ │ │ │ │ ├── moderation_subject_status.ts
│ │ │ │ │ ├── ozone_set.ts
│ │ │ │ │ ├── record_events_stats.ts
│ │ │ │ │ ├── record_push_event.ts
│ │ │ │ │ ├── repo_push_event.ts
│ │ │ │ │ ├── safelink.ts
│ │ │ │ │ ├── scheduled-action.ts
│ │ │ │ │ ├── setting.ts
│ │ │ │ │ ├── signing_key.ts
│ │ │ │ │ └── verification.ts
│ │ │ │ └── types.ts
│ │ │ ├── error.ts
│ │ │ ├── image-invalidator.ts
│ │ │ ├── index.ts
│ │ │ ├── jetstream/
│ │ │ │ └── service.ts
│ │ │ ├── lexicon/
│ │ │ │ ├── index.ts
│ │ │ │ ├── lexicons.ts
│ │ │ │ ├── types/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── bsky/
│ │ │ │ │ │ ├── actor/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getPreferences.ts
│ │ │ │ │ │ │ ├── getProfile.ts
│ │ │ │ │ │ │ ├── getProfiles.ts
│ │ │ │ │ │ │ ├── getSuggestions.ts
│ │ │ │ │ │ │ ├── profile.ts
│ │ │ │ │ │ │ ├── putPreferences.ts
│ │ │ │ │ │ │ ├── searchActors.ts
│ │ │ │ │ │ │ ├── searchActorsTypeahead.ts
│ │ │ │ │ │ │ └── status.ts
│ │ │ │ │ │ ├── ageassurance/
│ │ │ │ │ │ │ ├── begin.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getConfig.ts
│ │ │ │ │ │ │ └── getState.ts
│ │ │ │ │ │ ├── bookmark/
│ │ │ │ │ │ │ ├── createBookmark.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteBookmark.ts
│ │ │ │ │ │ │ └── getBookmarks.ts
│ │ │ │ │ │ ├── contact/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── dismissMatch.ts
│ │ │ │ │ │ │ ├── getMatches.ts
│ │ │ │ │ │ │ ├── getSyncStatus.ts
│ │ │ │ │ │ │ ├── importContacts.ts
│ │ │ │ │ │ │ ├── removeData.ts
│ │ │ │ │ │ │ ├── sendNotification.ts
│ │ │ │ │ │ │ ├── startPhoneVerification.ts
│ │ │ │ │ │ │ └── verifyPhone.ts
│ │ │ │ │ │ ├── draft/
│ │ │ │ │ │ │ ├── createDraft.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteDraft.ts
│ │ │ │ │ │ │ ├── getDrafts.ts
│ │ │ │ │ │ │ └── updateDraft.ts
│ │ │ │ │ │ ├── embed/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── external.ts
│ │ │ │ │ │ │ ├── images.ts
│ │ │ │ │ │ │ ├── record.ts
│ │ │ │ │ │ │ ├── recordWithMedia.ts
│ │ │ │ │ │ │ └── video.ts
│ │ │ │ │ │ ├── feed/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── describeFeedGenerator.ts
│ │ │ │ │ │ │ ├── generator.ts
│ │ │ │ │ │ │ ├── getActorFeeds.ts
│ │ │ │ │ │ │ ├── getActorLikes.ts
│ │ │ │ │ │ │ ├── getAuthorFeed.ts
│ │ │ │ │ │ │ ├── getFeed.ts
│ │ │ │ │ │ │ ├── getFeedGenerator.ts
│ │ │ │ │ │ │ ├── getFeedGenerators.ts
│ │ │ │ │ │ │ ├── getFeedSkeleton.ts
│ │ │ │ │ │ │ ├── getLikes.ts
│ │ │ │ │ │ │ ├── getListFeed.ts
│ │ │ │ │ │ │ ├── getPostThread.ts
│ │ │ │ │ │ │ ├── getPosts.ts
│ │ │ │ │ │ │ ├── getQuotes.ts
│ │ │ │ │ │ │ ├── getRepostedBy.ts
│ │ │ │ │ │ │ ├── getSuggestedFeeds.ts
│ │ │ │ │ │ │ ├── getTimeline.ts
│ │ │ │ │ │ │ ├── like.ts
│ │ │ │ │ │ │ ├── post.ts
│ │ │ │ │ │ │ ├── postgate.ts
│ │ │ │ │ │ │ ├── repost.ts
│ │ │ │ │ │ │ ├── searchPosts.ts
│ │ │ │ │ │ │ ├── sendInteractions.ts
│ │ │ │ │ │ │ └── threadgate.ts
│ │ │ │ │ │ ├── graph/
│ │ │ │ │ │ │ ├── block.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── follow.ts
│ │ │ │ │ │ │ ├── getActorStarterPacks.ts
│ │ │ │ │ │ │ ├── getBlocks.ts
│ │ │ │ │ │ │ ├── getFollowers.ts
│ │ │ │ │ │ │ ├── getFollows.ts
│ │ │ │ │ │ │ ├── getKnownFollowers.ts
│ │ │ │ │ │ │ ├── getList.ts
│ │ │ │ │ │ │ ├── getListBlocks.ts
│ │ │ │ │ │ │ ├── getListMutes.ts
│ │ │ │ │ │ │ ├── getLists.ts
│ │ │ │ │ │ │ ├── getListsWithMembership.ts
│ │ │ │ │ │ │ ├── getMutes.ts
│ │ │ │ │ │ │ ├── getRelationships.ts
│ │ │ │ │ │ │ ├── getStarterPack.ts
│ │ │ │ │ │ │ ├── getStarterPacks.ts
│ │ │ │ │ │ │ ├── getStarterPacksWithMembership.ts
│ │ │ │ │ │ │ ├── getSuggestedFollowsByActor.ts
│ │ │ │ │ │ │ ├── list.ts
│ │ │ │ │ │ │ ├── listblock.ts
│ │ │ │ │ │ │ ├── listitem.ts
│ │ │ │ │ │ │ ├── muteActor.ts
│ │ │ │ │ │ │ ├── muteActorList.ts
│ │ │ │ │ │ │ ├── muteThread.ts
│ │ │ │ │ │ │ ├── searchStarterPacks.ts
│ │ │ │ │ │ │ ├── starterpack.ts
│ │ │ │ │ │ │ ├── unmuteActor.ts
│ │ │ │ │ │ │ ├── unmuteActorList.ts
│ │ │ │ │ │ │ ├── unmuteThread.ts
│ │ │ │ │ │ │ └── verification.ts
│ │ │ │ │ │ ├── labeler/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getServices.ts
│ │ │ │ │ │ │ └── service.ts
│ │ │ │ │ │ ├── notification/
│ │ │ │ │ │ │ ├── declaration.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getPreferences.ts
│ │ │ │ │ │ │ ├── getUnreadCount.ts
│ │ │ │ │ │ │ ├── listActivitySubscriptions.ts
│ │ │ │ │ │ │ ├── listNotifications.ts
│ │ │ │ │ │ │ ├── putActivitySubscription.ts
│ │ │ │ │ │ │ ├── putPreferences.ts
│ │ │ │ │ │ │ ├── putPreferencesV2.ts
│ │ │ │ │ │ │ ├── registerPush.ts
│ │ │ │ │ │ │ ├── unregisterPush.ts
│ │ │ │ │ │ │ └── updateSeen.ts
│ │ │ │ │ │ ├── richtext/
│ │ │ │ │ │ │ └── facet.ts
│ │ │ │ │ │ ├── unspecced/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getAgeAssuranceState.ts
│ │ │ │ │ │ │ ├── getConfig.ts
│ │ │ │ │ │ │ ├── getOnboardingSuggestedStarterPacks.ts
│ │ │ │ │ │ │ ├── getOnboardingSuggestedStarterPacksSkeleton.ts
│ │ │ │ │ │ │ ├── getOnboardingSuggestedUsersSkeleton.ts
│ │ │ │ │ │ │ ├── getPopularFeedGenerators.ts
│ │ │ │ │ │ │ ├── getPostThreadOtherV2.ts
│ │ │ │ │ │ │ ├── getPostThreadV2.ts
│ │ │ │ │ │ │ ├── getSuggestedFeeds.ts
│ │ │ │ │ │ │ ├── getSuggestedFeedsSkeleton.ts
│ │ │ │ │ │ │ ├── getSuggestedOnboardingUsers.ts
│ │ │ │ │ │ │ ├── getSuggestedStarterPacks.ts
│ │ │ │ │ │ │ ├── getSuggestedStarterPacksSkeleton.ts
│ │ │ │ │ │ │ ├── getSuggestedUsers.ts
│ │ │ │ │ │ │ ├── getSuggestedUsersSkeleton.ts
│ │ │ │ │ │ │ ├── getSuggestionsSkeleton.ts
│ │ │ │ │ │ │ ├── getTaggedSuggestions.ts
│ │ │ │ │ │ │ ├── getTrendingTopics.ts
│ │ │ │ │ │ │ ├── getTrends.ts
│ │ │ │ │ │ │ ├── getTrendsSkeleton.ts
│ │ │ │ │ │ │ ├── initAgeAssurance.ts
│ │ │ │ │ │ │ ├── searchActorsSkeleton.ts
│ │ │ │ │ │ │ ├── searchPostsSkeleton.ts
│ │ │ │ │ │ │ └── searchStarterPacksSkeleton.ts
│ │ │ │ │ │ └── video/
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── getJobStatus.ts
│ │ │ │ │ │ ├── getUploadLimits.ts
│ │ │ │ │ │ └── uploadVideo.ts
│ │ │ │ │ ├── chat/
│ │ │ │ │ │ └── bsky/
│ │ │ │ │ │ ├── actor/
│ │ │ │ │ │ │ ├── declaration.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteAccount.ts
│ │ │ │ │ │ │ └── exportAccountData.ts
│ │ │ │ │ │ ├── convo/
│ │ │ │ │ │ │ ├── acceptConvo.ts
│ │ │ │ │ │ │ ├── addReaction.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteMessageForSelf.ts
│ │ │ │ │ │ │ ├── getConvo.ts
│ │ │ │ │ │ │ ├── getConvoAvailability.ts
│ │ │ │ │ │ │ ├── getConvoForMembers.ts
│ │ │ │ │ │ │ ├── getLog.ts
│ │ │ │ │ │ │ ├── getMessages.ts
│ │ │ │ │ │ │ ├── leaveConvo.ts
│ │ │ │ │ │ │ ├── listConvos.ts
│ │ │ │ │ │ │ ├── muteConvo.ts
│ │ │ │ │ │ │ ├── removeReaction.ts
│ │ │ │ │ │ │ ├── sendMessage.ts
│ │ │ │ │ │ │ ├── sendMessageBatch.ts
│ │ │ │ │ │ │ ├── unmuteConvo.ts
│ │ │ │ │ │ │ ├── updateAllRead.ts
│ │ │ │ │ │ │ └── updateRead.ts
│ │ │ │ │ │ └── moderation/
│ │ │ │ │ │ ├── getActorMetadata.ts
│ │ │ │ │ │ ├── getMessageContext.ts
│ │ │ │ │ │ └── updateActorAccess.ts
│ │ │ │ │ ├── com/
│ │ │ │ │ │ └── atproto/
│ │ │ │ │ │ ├── admin/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteAccount.ts
│ │ │ │ │ │ │ ├── disableAccountInvites.ts
│ │ │ │ │ │ │ ├── disableInviteCodes.ts
│ │ │ │ │ │ │ ├── enableAccountInvites.ts
│ │ │ │ │ │ │ ├── getAccountInfo.ts
│ │ │ │ │ │ │ ├── getAccountInfos.ts
│ │ │ │ │ │ │ ├── getInviteCodes.ts
│ │ │ │ │ │ │ ├── getSubjectStatus.ts
│ │ │ │ │ │ │ ├── searchAccounts.ts
│ │ │ │ │ │ │ ├── sendEmail.ts
│ │ │ │ │ │ │ ├── updateAccountEmail.ts
│ │ │ │ │ │ │ ├── updateAccountHandle.ts
│ │ │ │ │ │ │ ├── updateAccountPassword.ts
│ │ │ │ │ │ │ ├── updateAccountSigningKey.ts
│ │ │ │ │ │ │ └── updateSubjectStatus.ts
│ │ │ │ │ │ ├── identity/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getRecommendedDidCredentials.ts
│ │ │ │ │ │ │ ├── refreshIdentity.ts
│ │ │ │ │ │ │ ├── requestPlcOperationSignature.ts
│ │ │ │ │ │ │ ├── resolveDid.ts
│ │ │ │ │ │ │ ├── resolveHandle.ts
│ │ │ │ │ │ │ ├── resolveIdentity.ts
│ │ │ │ │ │ │ ├── signPlcOperation.ts
│ │ │ │ │ │ │ ├── submitPlcOperation.ts
│ │ │ │ │ │ │ └── updateHandle.ts
│ │ │ │ │ │ ├── label/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── queryLabels.ts
│ │ │ │ │ │ │ └── subscribeLabels.ts
│ │ │ │ │ │ ├── lexicon/
│ │ │ │ │ │ │ ├── resolveLexicon.ts
│ │ │ │ │ │ │ └── schema.ts
│ │ │ │ │ │ ├── moderation/
│ │ │ │ │ │ │ ├── createReport.ts
│ │ │ │ │ │ │ └── defs.ts
│ │ │ │ │ │ ├── repo/
│ │ │ │ │ │ │ ├── applyWrites.ts
│ │ │ │ │ │ │ ├── createRecord.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteRecord.ts
│ │ │ │ │ │ │ ├── describeRepo.ts
│ │ │ │ │ │ │ ├── getRecord.ts
│ │ │ │ │ │ │ ├── importRepo.ts
│ │ │ │ │ │ │ ├── listMissingBlobs.ts
│ │ │ │ │ │ │ ├── listRecords.ts
│ │ │ │ │ │ │ ├── putRecord.ts
│ │ │ │ │ │ │ ├── strongRef.ts
│ │ │ │ │ │ │ └── uploadBlob.ts
│ │ │ │ │ │ ├── server/
│ │ │ │ │ │ │ ├── activateAccount.ts
│ │ │ │ │ │ │ ├── checkAccountStatus.ts
│ │ │ │ │ │ │ ├── confirmEmail.ts
│ │ │ │ │ │ │ ├── createAccount.ts
│ │ │ │ │ │ │ ├── createAppPassword.ts
│ │ │ │ │ │ │ ├── createInviteCode.ts
│ │ │ │ │ │ │ ├── createInviteCodes.ts
│ │ │ │ │ │ │ ├── createSession.ts
│ │ │ │ │ │ │ ├── deactivateAccount.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteAccount.ts
│ │ │ │ │ │ │ ├── deleteSession.ts
│ │ │ │ │ │ │ ├── describeServer.ts
│ │ │ │ │ │ │ ├── getAccountInviteCodes.ts
│ │ │ │ │ │ │ ├── getServiceAuth.ts
│ │ │ │ │ │ │ ├── getSession.ts
│ │ │ │ │ │ │ ├── listAppPasswords.ts
│ │ │ │ │ │ │ ├── refreshSession.ts
│ │ │ │ │ │ │ ├── requestAccountDelete.ts
│ │ │ │ │ │ │ ├── requestEmailConfirmation.ts
│ │ │ │ │ │ │ ├── requestEmailUpdate.ts
│ │ │ │ │ │ │ ├── requestPasswordReset.ts
│ │ │ │ │ │ │ ├── reserveSigningKey.ts
│ │ │ │ │ │ │ ├── resetPassword.ts
│ │ │ │ │ │ │ ├── revokeAppPassword.ts
│ │ │ │ │ │ │ └── updateEmail.ts
│ │ │ │ │ │ ├── sync/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getBlob.ts
│ │ │ │ │ │ │ ├── getBlocks.ts
│ │ │ │ │ │ │ ├── getCheckout.ts
│ │ │ │ │ │ │ ├── getHead.ts
│ │ │ │ │ │ │ ├── getHostStatus.ts
│ │ │ │ │ │ │ ├── getLatestCommit.ts
│ │ │ │ │ │ │ ├── getRecord.ts
│ │ │ │ │ │ │ ├── getRepo.ts
│ │ │ │ │ │ │ ├── getRepoStatus.ts
│ │ │ │ │ │ │ ├── listBlobs.ts
│ │ │ │ │ │ │ ├── listHosts.ts
│ │ │ │ │ │ │ ├── listRepos.ts
│ │ │ │ │ │ │ ├── listReposByCollection.ts
│ │ │ │ │ │ │ ├── notifyOfUpdate.ts
│ │ │ │ │ │ │ ├── requestCrawl.ts
│ │ │ │ │ │ │ └── subscribeRepos.ts
│ │ │ │ │ │ └── temp/
│ │ │ │ │ │ ├── addReservedHandle.ts
│ │ │ │ │ │ ├── checkHandleAvailability.ts
│ │ │ │ │ │ ├── checkSignupQueue.ts
│ │ │ │ │ │ ├── dereferenceScope.ts
│ │ │ │ │ │ ├── fetchLabels.ts
│ │ │ │ │ │ ├── requestPhoneVerification.ts
│ │ │ │ │ │ └── revokeAccountCredentials.ts
│ │ │ │ │ └── tools/
│ │ │ │ │ └── ozone/
│ │ │ │ │ ├── communication/
│ │ │ │ │ │ ├── createTemplate.ts
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── deleteTemplate.ts
│ │ │ │ │ │ ├── listTemplates.ts
│ │ │ │ │ │ └── updateTemplate.ts
│ │ │ │ │ ├── hosting/
│ │ │ │ │ │ └── getAccountHistory.ts
│ │ │ │ │ ├── moderation/
│ │ │ │ │ │ ├── cancelScheduledActions.ts
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── emitEvent.ts
│ │ │ │ │ │ ├── getAccountTimeline.ts
│ │ │ │ │ │ ├── getEvent.ts
│ │ │ │ │ │ ├── getRecord.ts
│ │ │ │ │ │ ├── getRecords.ts
│ │ │ │ │ │ ├── getRepo.ts
│ │ │ │ │ │ ├── getReporterStats.ts
│ │ │ │ │ │ ├── getRepos.ts
│ │ │ │ │ │ ├── getSubjects.ts
│ │ │ │ │ │ ├── listScheduledActions.ts
│ │ │ │ │ │ ├── queryEvents.ts
│ │ │ │ │ │ ├── queryStatuses.ts
│ │ │ │ │ │ ├── scheduleAction.ts
│ │ │ │ │ │ └── searchRepos.ts
│ │ │ │ │ ├── report/
│ │ │ │ │ │ └── defs.ts
│ │ │ │ │ ├── safelink/
│ │ │ │ │ │ ├── addRule.ts
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── queryEvents.ts
│ │ │ │ │ │ ├── queryRules.ts
│ │ │ │ │ │ ├── removeRule.ts
│ │ │ │ │ │ └── updateRule.ts
│ │ │ │ │ ├── server/
│ │ │ │ │ │ └── getConfig.ts
│ │ │ │ │ ├── set/
│ │ │ │ │ │ ├── addValues.ts
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── deleteSet.ts
│ │ │ │ │ │ ├── deleteValues.ts
│ │ │ │ │ │ ├── getValues.ts
│ │ │ │ │ │ ├── querySets.ts
│ │ │ │ │ │ └── upsertSet.ts
│ │ │ │ │ ├── setting/
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── listOptions.ts
│ │ │ │ │ │ ├── removeOptions.ts
│ │ │ │ │ │ └── upsertOption.ts
│ │ │ │ │ ├── signature/
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── findCorrelation.ts
│ │ │ │ │ │ ├── findRelatedAccounts.ts
│ │ │ │ │ │ └── searchAccounts.ts
│ │ │ │ │ ├── team/
│ │ │ │ │ │ ├── addMember.ts
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── deleteMember.ts
│ │ │ │ │ │ ├── listMembers.ts
│ │ │ │ │ │ └── updateMember.ts
│ │ │ │ │ └── verification/
│ │ │ │ │ ├── defs.ts
│ │ │ │ │ ├── grantVerifications.ts
│ │ │ │ │ ├── listVerifications.ts
│ │ │ │ │ └── revokeVerifications.ts
│ │ │ │ └── util.ts
│ │ │ ├── logger.ts
│ │ │ ├── mod-service/
│ │ │ │ ├── index.ts
│ │ │ │ ├── profile.ts
│ │ │ │ ├── status.ts
│ │ │ │ ├── strike.ts
│ │ │ │ ├── subject.ts
│ │ │ │ ├── types.ts
│ │ │ │ ├── util.ts
│ │ │ │ └── views.ts
│ │ │ ├── safelink/
│ │ │ │ └── service.ts
│ │ │ ├── scheduled-action/
│ │ │ │ ├── service.ts
│ │ │ │ └── types.ts
│ │ │ ├── sequencer/
│ │ │ │ ├── index.ts
│ │ │ │ ├── outbox.ts
│ │ │ │ └── sequencer.ts
│ │ │ ├── set/
│ │ │ │ └── service.ts
│ │ │ ├── setting/
│ │ │ │ ├── constants.ts
│ │ │ │ ├── service.ts
│ │ │ │ ├── types.ts
│ │ │ │ └── validators.ts
│ │ │ ├── tag-service/
│ │ │ │ ├── content-tagger.ts
│ │ │ │ ├── embed-tagger.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── language-data.ts
│ │ │ │ ├── language-tagger.ts
│ │ │ │ └── util.ts
│ │ │ ├── team/
│ │ │ │ └── index.ts
│ │ │ ├── util.ts
│ │ │ └── verification/
│ │ │ ├── issuer.ts
│ │ │ ├── service.ts
│ │ │ └── util.ts
│ │ ├── test.env
│ │ ├── tests/
│ │ │ ├── 3p-labeler.test.ts
│ │ │ ├── __snapshots__/
│ │ │ │ ├── account-strikes.test.ts.snap
│ │ │ │ ├── age-assurance.test.ts.snap
│ │ │ │ ├── blob-divert.test.ts.snap
│ │ │ │ ├── get-account-timeline.test.ts.snap
│ │ │ │ ├── get-record.test.ts.snap
│ │ │ │ ├── get-records.test.ts.snap
│ │ │ │ ├── get-repo.test.ts.snap
│ │ │ │ ├── get-repos.test.ts.snap
│ │ │ │ ├── get-starter-pack.test.ts.snap
│ │ │ │ ├── get-subjects.test.ts.snap
│ │ │ │ ├── moderation-events.test.ts.snap
│ │ │ │ ├── moderation-statuses.test.ts.snap
│ │ │ │ ├── moderation.test.ts.snap
│ │ │ │ ├── report-reason.test.ts.snap
│ │ │ │ ├── safelink.test.ts.snap
│ │ │ │ ├── scheduled-action.test.ts.snap
│ │ │ │ ├── sets.test.ts.snap
│ │ │ │ ├── settings.test.ts.snap
│ │ │ │ ├── team.test.ts.snap
│ │ │ │ ├── verification-listener.test.ts.snap
│ │ │ │ └── verification.test.ts.snap
│ │ │ ├── _util.ts
│ │ │ ├── account-strikes.test.ts
│ │ │ ├── ack-all-subjects-of-account.test.ts
│ │ │ ├── age-assurance.test.ts
│ │ │ ├── blob-divert.test.ts
│ │ │ ├── communication-templates.test.ts
│ │ │ ├── content-tagger.test.ts
│ │ │ ├── db.test.ts
│ │ │ ├── expiring-label.test.ts
│ │ │ ├── get-account-timeline.test.ts
│ │ │ ├── get-config.test.ts
│ │ │ ├── get-lists.test.ts
│ │ │ ├── get-profiles.test.ts
│ │ │ ├── get-record.test.ts
│ │ │ ├── get-records.test.ts
│ │ │ ├── get-repo.test.ts
│ │ │ ├── get-reporter-stats.test.ts
│ │ │ ├── get-repos.test.ts
│ │ │ ├── get-starter-pack.test.ts
│ │ │ ├── get-subjects.test.ts
│ │ │ ├── mod-tool.test.ts
│ │ │ ├── moderation-appeals.test.ts
│ │ │ ├── moderation-events.test.ts
│ │ │ ├── moderation-status-tags.test.ts
│ │ │ ├── moderation-statuses.test.ts
│ │ │ ├── moderation.test.ts
│ │ │ ├── protected-tags.test.ts
│ │ │ ├── query-labels.test.ts
│ │ │ ├── record-and-account-events.test.ts
│ │ │ ├── repo-search.test.ts
│ │ │ ├── report-muting.test.ts
│ │ │ ├── report-reason.test.ts
│ │ │ ├── revoke-account-credentials.test.ts
│ │ │ ├── safelink.test.ts
│ │ │ ├── scheduled-action-processor.test.ts
│ │ │ ├── scheduled-action.test.ts
│ │ │ ├── sequencer.test.ts
│ │ │ ├── server.test.ts
│ │ │ ├── sets.test.ts
│ │ │ ├── settings.test.ts
│ │ │ ├── strike-expiry-processor.test.ts
│ │ │ ├── subject-priority-score.test.ts
│ │ │ ├── takedown.test.ts
│ │ │ ├── team.test.ts
│ │ │ ├── verification-listener.test.ts
│ │ │ └── verification.test.ts
│ │ ├── tsconfig.build.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.tests.json
│ ├── pds/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── build.templates.js
│ │ ├── example.env
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── account-manager/
│ │ │ │ ├── account-manager.ts
│ │ │ │ ├── db/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── migrations/
│ │ │ │ │ │ ├── 001-init.ts
│ │ │ │ │ │ ├── 002-account-deactivation.ts
│ │ │ │ │ │ ├── 003-privileged-app-passwords.ts
│ │ │ │ │ │ ├── 004-oauth.ts
│ │ │ │ │ │ ├── 005-oauth-account-management.ts
│ │ │ │ │ │ ├── 006-oauth-permission-sets.ts
│ │ │ │ │ │ ├── 007-lexicon-failures-index.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── schema/
│ │ │ │ │ ├── account-device.ts
│ │ │ │ │ ├── account.ts
│ │ │ │ │ ├── actor.ts
│ │ │ │ │ ├── app-password.ts
│ │ │ │ │ ├── authorization-request.ts
│ │ │ │ │ ├── authorized-client.ts
│ │ │ │ │ ├── device.ts
│ │ │ │ │ ├── email-token.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── invite-code.ts
│ │ │ │ │ ├── lexicon.ts
│ │ │ │ │ ├── refresh-token.ts
│ │ │ │ │ ├── repo-root.ts
│ │ │ │ │ ├── token.ts
│ │ │ │ │ └── used-refresh-token.ts
│ │ │ │ ├── helpers/
│ │ │ │ │ ├── account-device.ts
│ │ │ │ │ ├── account.ts
│ │ │ │ │ ├── auth.ts
│ │ │ │ │ ├── authorization-request.ts
│ │ │ │ │ ├── authorized-client.ts
│ │ │ │ │ ├── device.ts
│ │ │ │ │ ├── email-token.ts
│ │ │ │ │ ├── invite.ts
│ │ │ │ │ ├── lexicon.ts
│ │ │ │ │ ├── password.ts
│ │ │ │ │ ├── repo.ts
│ │ │ │ │ ├── scrypt.ts
│ │ │ │ │ ├── token.ts
│ │ │ │ │ └── used-refresh-token.ts
│ │ │ │ ├── oauth-store.ts
│ │ │ │ └── scope-reference-getter.ts
│ │ │ ├── actor-store/
│ │ │ │ ├── actor-store-reader.ts
│ │ │ │ ├── actor-store-resources.ts
│ │ │ │ ├── actor-store-transactor.ts
│ │ │ │ ├── actor-store-writer.ts
│ │ │ │ ├── actor-store.ts
│ │ │ │ ├── blob/
│ │ │ │ │ ├── reader.ts
│ │ │ │ │ └── transactor.ts
│ │ │ │ ├── db/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── migrations/
│ │ │ │ │ │ ├── 001-init.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── schema/
│ │ │ │ │ ├── account-pref.ts
│ │ │ │ │ ├── backlink.ts
│ │ │ │ │ ├── blob.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── record-blob.ts
│ │ │ │ │ ├── record.ts
│ │ │ │ │ ├── repo-block.ts
│ │ │ │ │ └── repo-root.ts
│ │ │ │ ├── migrate.ts
│ │ │ │ ├── preference/
│ │ │ │ │ ├── reader.ts
│ │ │ │ │ ├── transactor.ts
│ │ │ │ │ └── util.ts
│ │ │ │ ├── record/
│ │ │ │ │ ├── reader.ts
│ │ │ │ │ └── transactor.ts
│ │ │ │ └── repo/
│ │ │ │ ├── reader.ts
│ │ │ │ ├── sql-repo-reader.ts
│ │ │ │ ├── sql-repo-transactor.ts
│ │ │ │ └── transactor.ts
│ │ │ ├── api/
│ │ │ │ ├── app/
│ │ │ │ │ └── bsky/
│ │ │ │ │ ├── actor/
│ │ │ │ │ │ ├── getPreferences.ts
│ │ │ │ │ │ ├── getProfile.ts
│ │ │ │ │ │ ├── getProfiles.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── putPreferences.ts
│ │ │ │ │ ├── feed/
│ │ │ │ │ │ ├── getActorLikes.ts
│ │ │ │ │ │ ├── getAuthorFeed.ts
│ │ │ │ │ │ ├── getFeed.ts
│ │ │ │ │ │ ├── getPostThread.ts
│ │ │ │ │ │ ├── getTimeline.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── notification/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── registerPush.ts
│ │ │ │ │ └── util/
│ │ │ │ │ └── resolver.ts
│ │ │ │ ├── com/
│ │ │ │ │ └── atproto/
│ │ │ │ │ ├── admin/
│ │ │ │ │ │ ├── deleteAccount.ts
│ │ │ │ │ │ ├── disableAccountInvites.ts
│ │ │ │ │ │ ├── disableInviteCodes.ts
│ │ │ │ │ │ ├── enableAccountInvites.ts
│ │ │ │ │ │ ├── getAccountInfo.ts
│ │ │ │ │ │ ├── getAccountInfos.ts
│ │ │ │ │ │ ├── getInviteCodes.ts
│ │ │ │ │ │ ├── getSubjectStatus.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── sendEmail.ts
│ │ │ │ │ │ ├── updateAccountEmail.ts
│ │ │ │ │ │ ├── updateAccountHandle.ts
│ │ │ │ │ │ ├── updateAccountPassword.ts
│ │ │ │ │ │ ├── updateSubjectStatus.ts
│ │ │ │ │ │ └── util.ts
│ │ │ │ │ ├── identity/
│ │ │ │ │ │ ├── getRecommendedDidCredentials.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── requestPlcOperationSignature.ts
│ │ │ │ │ │ ├── resolveHandle.ts
│ │ │ │ │ │ ├── signPlcOperation.ts
│ │ │ │ │ │ ├── submitPlcOperation.ts
│ │ │ │ │ │ └── updateHandle.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── moderation/
│ │ │ │ │ │ ├── createReport.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── repo/
│ │ │ │ │ │ ├── applyWrites.ts
│ │ │ │ │ │ ├── createRecord.ts
│ │ │ │ │ │ ├── deleteRecord.ts
│ │ │ │ │ │ ├── describeRepo.ts
│ │ │ │ │ │ ├── getRecord.ts
│ │ │ │ │ │ ├── importRepo.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── listMissingBlobs.ts
│ │ │ │ │ │ ├── listRecords.ts
│ │ │ │ │ │ ├── putRecord.ts
│ │ │ │ │ │ └── uploadBlob.ts
│ │ │ │ │ ├── server/
│ │ │ │ │ │ ├── activateAccount.ts
│ │ │ │ │ │ ├── checkAccountStatus.ts
│ │ │ │ │ │ ├── confirmEmail.ts
│ │ │ │ │ │ ├── createAccount.ts
│ │ │ │ │ │ ├── createAppPassword.ts
│ │ │ │ │ │ ├── createInviteCode.ts
│ │ │ │ │ │ ├── createInviteCodes.ts
│ │ │ │ │ │ ├── createSession.ts
│ │ │ │ │ │ ├── deactivateAccount.ts
│ │ │ │ │ │ ├── deleteAccount.ts
│ │ │ │ │ │ ├── deleteSession.ts
│ │ │ │ │ │ ├── describeServer.ts
│ │ │ │ │ │ ├── getAccountInviteCodes.ts
│ │ │ │ │ │ ├── getServiceAuth.ts
│ │ │ │ │ │ ├── getSession.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── listAppPasswords.ts
│ │ │ │ │ │ ├── refreshSession.ts
│ │ │ │ │ │ ├── requestAccountDelete.ts
│ │ │ │ │ │ ├── requestEmailConfirmation.ts
│ │ │ │ │ │ ├── requestEmailUpdate.ts
│ │ │ │ │ │ ├── requestPasswordReset.ts
│ │ │ │ │ │ ├── reserveSigningKey.ts
│ │ │ │ │ │ ├── resetPassword.ts
│ │ │ │ │ │ ├── revokeAppPassword.ts
│ │ │ │ │ │ ├── updateEmail.ts
│ │ │ │ │ │ └── util.ts
│ │ │ │ │ ├── sync/
│ │ │ │ │ │ ├── deprecated/
│ │ │ │ │ │ │ ├── getCheckout.ts
│ │ │ │ │ │ │ └── getHead.ts
│ │ │ │ │ │ ├── getBlob.ts
│ │ │ │ │ │ ├── getBlocks.ts
│ │ │ │ │ │ ├── getLatestCommit.ts
│ │ │ │ │ │ ├── getRecord.ts
│ │ │ │ │ │ ├── getRepo.ts
│ │ │ │ │ │ ├── getRepoStatus.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── listBlobs.ts
│ │ │ │ │ │ ├── listRepos.ts
│ │ │ │ │ │ ├── subscribeRepos.ts
│ │ │ │ │ │ └── util.ts
│ │ │ │ │ └── temp/
│ │ │ │ │ ├── checkSignupQueue.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── proxy.ts
│ │ │ ├── app-view.ts
│ │ │ ├── auth-output.ts
│ │ │ ├── auth-routes.ts
│ │ │ ├── auth-scope.ts
│ │ │ ├── auth-verifier.ts
│ │ │ ├── background.ts
│ │ │ ├── basic-routes.ts
│ │ │ ├── bsky-app-view.ts
│ │ │ ├── config/
│ │ │ │ ├── config.ts
│ │ │ │ ├── env.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── secrets.ts
│ │ │ ├── context.ts
│ │ │ ├── crawlers.ts
│ │ │ ├── db/
│ │ │ │ ├── cast.ts
│ │ │ │ ├── db.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── migrator.ts
│ │ │ │ ├── pagination.ts
│ │ │ │ ├── tables/
│ │ │ │ │ └── moderation.ts
│ │ │ │ └── util.ts
│ │ │ ├── did-cache/
│ │ │ │ ├── db/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── migrations.ts
│ │ │ │ │ └── schema.ts
│ │ │ │ └── index.ts
│ │ │ ├── disk-blobstore.ts
│ │ │ ├── error.ts
│ │ │ ├── handle/
│ │ │ │ ├── explicit-slurs.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── reserved.ts
│ │ │ ├── image/
│ │ │ │ └── image-url-builder.ts
│ │ │ ├── index.ts
│ │ │ ├── lexicon/
│ │ │ │ ├── index.ts
│ │ │ │ ├── lexicons.ts
│ │ │ │ ├── types/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── bsky/
│ │ │ │ │ │ ├── actor/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getPreferences.ts
│ │ │ │ │ │ │ ├── getProfile.ts
│ │ │ │ │ │ │ ├── getProfiles.ts
│ │ │ │ │ │ │ ├── getSuggestions.ts
│ │ │ │ │ │ │ ├── profile.ts
│ │ │ │ │ │ │ ├── putPreferences.ts
│ │ │ │ │ │ │ ├── searchActors.ts
│ │ │ │ │ │ │ ├── searchActorsTypeahead.ts
│ │ │ │ │ │ │ └── status.ts
│ │ │ │ │ │ ├── ageassurance/
│ │ │ │ │ │ │ ├── begin.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getConfig.ts
│ │ │ │ │ │ │ └── getState.ts
│ │ │ │ │ │ ├── bookmark/
│ │ │ │ │ │ │ ├── createBookmark.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteBookmark.ts
│ │ │ │ │ │ │ └── getBookmarks.ts
│ │ │ │ │ │ ├── contact/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── dismissMatch.ts
│ │ │ │ │ │ │ ├── getMatches.ts
│ │ │ │ │ │ │ ├── getSyncStatus.ts
│ │ │ │ │ │ │ ├── importContacts.ts
│ │ │ │ │ │ │ ├── removeData.ts
│ │ │ │ │ │ │ ├── sendNotification.ts
│ │ │ │ │ │ │ ├── startPhoneVerification.ts
│ │ │ │ │ │ │ └── verifyPhone.ts
│ │ │ │ │ │ ├── draft/
│ │ │ │ │ │ │ ├── createDraft.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteDraft.ts
│ │ │ │ │ │ │ ├── getDrafts.ts
│ │ │ │ │ │ │ └── updateDraft.ts
│ │ │ │ │ │ ├── embed/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── external.ts
│ │ │ │ │ │ │ ├── images.ts
│ │ │ │ │ │ │ ├── record.ts
│ │ │ │ │ │ │ ├── recordWithMedia.ts
│ │ │ │ │ │ │ └── video.ts
│ │ │ │ │ │ ├── feed/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── describeFeedGenerator.ts
│ │ │ │ │ │ │ ├── generator.ts
│ │ │ │ │ │ │ ├── getActorFeeds.ts
│ │ │ │ │ │ │ ├── getActorLikes.ts
│ │ │ │ │ │ │ ├── getAuthorFeed.ts
│ │ │ │ │ │ │ ├── getFeed.ts
│ │ │ │ │ │ │ ├── getFeedGenerator.ts
│ │ │ │ │ │ │ ├── getFeedGenerators.ts
│ │ │ │ │ │ │ ├── getFeedSkeleton.ts
│ │ │ │ │ │ │ ├── getLikes.ts
│ │ │ │ │ │ │ ├── getListFeed.ts
│ │ │ │ │ │ │ ├── getPostThread.ts
│ │ │ │ │ │ │ ├── getPosts.ts
│ │ │ │ │ │ │ ├── getQuotes.ts
│ │ │ │ │ │ │ ├── getRepostedBy.ts
│ │ │ │ │ │ │ ├── getSuggestedFeeds.ts
│ │ │ │ │ │ │ ├── getTimeline.ts
│ │ │ │ │ │ │ ├── like.ts
│ │ │ │ │ │ │ ├── post.ts
│ │ │ │ │ │ │ ├── postgate.ts
│ │ │ │ │ │ │ ├── repost.ts
│ │ │ │ │ │ │ ├── searchPosts.ts
│ │ │ │ │ │ │ ├── sendInteractions.ts
│ │ │ │ │ │ │ └── threadgate.ts
│ │ │ │ │ │ ├── graph/
│ │ │ │ │ │ │ ├── block.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── follow.ts
│ │ │ │ │ │ │ ├── getActorStarterPacks.ts
│ │ │ │ │ │ │ ├── getBlocks.ts
│ │ │ │ │ │ │ ├── getFollowers.ts
│ │ │ │ │ │ │ ├── getFollows.ts
│ │ │ │ │ │ │ ├── getKnownFollowers.ts
│ │ │ │ │ │ │ ├── getList.ts
│ │ │ │ │ │ │ ├── getListBlocks.ts
│ │ │ │ │ │ │ ├── getListMutes.ts
│ │ │ │ │ │ │ ├── getLists.ts
│ │ │ │ │ │ │ ├── getListsWithMembership.ts
│ │ │ │ │ │ │ ├── getMutes.ts
│ │ │ │ │ │ │ ├── getRelationships.ts
│ │ │ │ │ │ │ ├── getStarterPack.ts
│ │ │ │ │ │ │ ├── getStarterPacks.ts
│ │ │ │ │ │ │ ├── getStarterPacksWithMembership.ts
│ │ │ │ │ │ │ ├── getSuggestedFollowsByActor.ts
│ │ │ │ │ │ │ ├── list.ts
│ │ │ │ │ │ │ ├── listblock.ts
│ │ │ │ │ │ │ ├── listitem.ts
│ │ │ │ │ │ │ ├── muteActor.ts
│ │ │ │ │ │ │ ├── muteActorList.ts
│ │ │ │ │ │ │ ├── muteThread.ts
│ │ │ │ │ │ │ ├── searchStarterPacks.ts
│ │ │ │ │ │ │ ├── starterpack.ts
│ │ │ │ │ │ │ ├── unmuteActor.ts
│ │ │ │ │ │ │ ├── unmuteActorList.ts
│ │ │ │ │ │ │ ├── unmuteThread.ts
│ │ │ │ │ │ │ └── verification.ts
│ │ │ │ │ │ ├── labeler/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getServices.ts
│ │ │ │ │ │ │ └── service.ts
│ │ │ │ │ │ ├── notification/
│ │ │ │ │ │ │ ├── declaration.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getPreferences.ts
│ │ │ │ │ │ │ ├── getUnreadCount.ts
│ │ │ │ │ │ │ ├── listActivitySubscriptions.ts
│ │ │ │ │ │ │ ├── listNotifications.ts
│ │ │ │ │ │ │ ├── putActivitySubscription.ts
│ │ │ │ │ │ │ ├── putPreferences.ts
│ │ │ │ │ │ │ ├── putPreferencesV2.ts
│ │ │ │ │ │ │ ├── registerPush.ts
│ │ │ │ │ │ │ ├── unregisterPush.ts
│ │ │ │ │ │ │ └── updateSeen.ts
│ │ │ │ │ │ ├── richtext/
│ │ │ │ │ │ │ └── facet.ts
│ │ │ │ │ │ ├── unspecced/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getAgeAssuranceState.ts
│ │ │ │ │ │ │ ├── getConfig.ts
│ │ │ │ │ │ │ ├── getOnboardingSuggestedStarterPacks.ts
│ │ │ │ │ │ │ ├── getOnboardingSuggestedStarterPacksSkeleton.ts
│ │ │ │ │ │ │ ├── getOnboardingSuggestedUsersSkeleton.ts
│ │ │ │ │ │ │ ├── getPopularFeedGenerators.ts
│ │ │ │ │ │ │ ├── getPostThreadOtherV2.ts
│ │ │ │ │ │ │ ├── getPostThreadV2.ts
│ │ │ │ │ │ │ ├── getSuggestedFeeds.ts
│ │ │ │ │ │ │ ├── getSuggestedFeedsSkeleton.ts
│ │ │ │ │ │ │ ├── getSuggestedOnboardingUsers.ts
│ │ │ │ │ │ │ ├── getSuggestedStarterPacks.ts
│ │ │ │ │ │ │ ├── getSuggestedStarterPacksSkeleton.ts
│ │ │ │ │ │ │ ├── getSuggestedUsers.ts
│ │ │ │ │ │ │ ├── getSuggestedUsersSkeleton.ts
│ │ │ │ │ │ │ ├── getSuggestionsSkeleton.ts
│ │ │ │ │ │ │ ├── getTaggedSuggestions.ts
│ │ │ │ │ │ │ ├── getTrendingTopics.ts
│ │ │ │ │ │ │ ├── getTrends.ts
│ │ │ │ │ │ │ ├── getTrendsSkeleton.ts
│ │ │ │ │ │ │ ├── initAgeAssurance.ts
│ │ │ │ │ │ │ ├── searchActorsSkeleton.ts
│ │ │ │ │ │ │ ├── searchPostsSkeleton.ts
│ │ │ │ │ │ │ └── searchStarterPacksSkeleton.ts
│ │ │ │ │ │ └── video/
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── getJobStatus.ts
│ │ │ │ │ │ ├── getUploadLimits.ts
│ │ │ │ │ │ └── uploadVideo.ts
│ │ │ │ │ ├── chat/
│ │ │ │ │ │ └── bsky/
│ │ │ │ │ │ ├── actor/
│ │ │ │ │ │ │ ├── declaration.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteAccount.ts
│ │ │ │ │ │ │ └── exportAccountData.ts
│ │ │ │ │ │ ├── convo/
│ │ │ │ │ │ │ ├── acceptConvo.ts
│ │ │ │ │ │ │ ├── addReaction.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteMessageForSelf.ts
│ │ │ │ │ │ │ ├── getConvo.ts
│ │ │ │ │ │ │ ├── getConvoAvailability.ts
│ │ │ │ │ │ │ ├── getConvoForMembers.ts
│ │ │ │ │ │ │ ├── getLog.ts
│ │ │ │ │ │ │ ├── getMessages.ts
│ │ │ │ │ │ │ ├── leaveConvo.ts
│ │ │ │ │ │ │ ├── listConvos.ts
│ │ │ │ │ │ │ ├── muteConvo.ts
│ │ │ │ │ │ │ ├── removeReaction.ts
│ │ │ │ │ │ │ ├── sendMessage.ts
│ │ │ │ │ │ │ ├── sendMessageBatch.ts
│ │ │ │ │ │ │ ├── unmuteConvo.ts
│ │ │ │ │ │ │ ├── updateAllRead.ts
│ │ │ │ │ │ │ └── updateRead.ts
│ │ │ │ │ │ └── moderation/
│ │ │ │ │ │ ├── getActorMetadata.ts
│ │ │ │ │ │ ├── getMessageContext.ts
│ │ │ │ │ │ └── updateActorAccess.ts
│ │ │ │ │ ├── com/
│ │ │ │ │ │ └── atproto/
│ │ │ │ │ │ ├── admin/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteAccount.ts
│ │ │ │ │ │ │ ├── disableAccountInvites.ts
│ │ │ │ │ │ │ ├── disableInviteCodes.ts
│ │ │ │ │ │ │ ├── enableAccountInvites.ts
│ │ │ │ │ │ │ ├── getAccountInfo.ts
│ │ │ │ │ │ │ ├── getAccountInfos.ts
│ │ │ │ │ │ │ ├── getInviteCodes.ts
│ │ │ │ │ │ │ ├── getSubjectStatus.ts
│ │ │ │ │ │ │ ├── searchAccounts.ts
│ │ │ │ │ │ │ ├── sendEmail.ts
│ │ │ │ │ │ │ ├── updateAccountEmail.ts
│ │ │ │ │ │ │ ├── updateAccountHandle.ts
│ │ │ │ │ │ │ ├── updateAccountPassword.ts
│ │ │ │ │ │ │ ├── updateAccountSigningKey.ts
│ │ │ │ │ │ │ └── updateSubjectStatus.ts
│ │ │ │ │ │ ├── identity/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getRecommendedDidCredentials.ts
│ │ │ │ │ │ │ ├── refreshIdentity.ts
│ │ │ │ │ │ │ ├── requestPlcOperationSignature.ts
│ │ │ │ │ │ │ ├── resolveDid.ts
│ │ │ │ │ │ │ ├── resolveHandle.ts
│ │ │ │ │ │ │ ├── resolveIdentity.ts
│ │ │ │ │ │ │ ├── signPlcOperation.ts
│ │ │ │ │ │ │ ├── submitPlcOperation.ts
│ │ │ │ │ │ │ └── updateHandle.ts
│ │ │ │ │ │ ├── label/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── queryLabels.ts
│ │ │ │ │ │ │ └── subscribeLabels.ts
│ │ │ │ │ │ ├── lexicon/
│ │ │ │ │ │ │ ├── resolveLexicon.ts
│ │ │ │ │ │ │ └── schema.ts
│ │ │ │ │ │ ├── moderation/
│ │ │ │ │ │ │ ├── createReport.ts
│ │ │ │ │ │ │ └── defs.ts
│ │ │ │ │ │ ├── repo/
│ │ │ │ │ │ │ ├── applyWrites.ts
│ │ │ │ │ │ │ ├── createRecord.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteRecord.ts
│ │ │ │ │ │ │ ├── describeRepo.ts
│ │ │ │ │ │ │ ├── getRecord.ts
│ │ │ │ │ │ │ ├── importRepo.ts
│ │ │ │ │ │ │ ├── listMissingBlobs.ts
│ │ │ │ │ │ │ ├── listRecords.ts
│ │ │ │ │ │ │ ├── putRecord.ts
│ │ │ │ │ │ │ ├── strongRef.ts
│ │ │ │ │ │ │ └── uploadBlob.ts
│ │ │ │ │ │ ├── server/
│ │ │ │ │ │ │ ├── activateAccount.ts
│ │ │ │ │ │ │ ├── checkAccountStatus.ts
│ │ │ │ │ │ │ ├── confirmEmail.ts
│ │ │ │ │ │ │ ├── createAccount.ts
│ │ │ │ │ │ │ ├── createAppPassword.ts
│ │ │ │ │ │ │ ├── createInviteCode.ts
│ │ │ │ │ │ │ ├── createInviteCodes.ts
│ │ │ │ │ │ │ ├── createSession.ts
│ │ │ │ │ │ │ ├── deactivateAccount.ts
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── deleteAccount.ts
│ │ │ │ │ │ │ ├── deleteSession.ts
│ │ │ │ │ │ │ ├── describeServer.ts
│ │ │ │ │ │ │ ├── getAccountInviteCodes.ts
│ │ │ │ │ │ │ ├── getServiceAuth.ts
│ │ │ │ │ │ │ ├── getSession.ts
│ │ │ │ │ │ │ ├── listAppPasswords.ts
│ │ │ │ │ │ │ ├── refreshSession.ts
│ │ │ │ │ │ │ ├── requestAccountDelete.ts
│ │ │ │ │ │ │ ├── requestEmailConfirmation.ts
│ │ │ │ │ │ │ ├── requestEmailUpdate.ts
│ │ │ │ │ │ │ ├── requestPasswordReset.ts
│ │ │ │ │ │ │ ├── reserveSigningKey.ts
│ │ │ │ │ │ │ ├── resetPassword.ts
│ │ │ │ │ │ │ ├── revokeAppPassword.ts
│ │ │ │ │ │ │ └── updateEmail.ts
│ │ │ │ │ │ ├── sync/
│ │ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ │ ├── getBlob.ts
│ │ │ │ │ │ │ ├── getBlocks.ts
│ │ │ │ │ │ │ ├── getCheckout.ts
│ │ │ │ │ │ │ ├── getHead.ts
│ │ │ │ │ │ │ ├── getHostStatus.ts
│ │ │ │ │ │ │ ├── getLatestCommit.ts
│ │ │ │ │ │ │ ├── getRecord.ts
│ │ │ │ │ │ │ ├── getRepo.ts
│ │ │ │ │ │ │ ├── getRepoStatus.ts
│ │ │ │ │ │ │ ├── listBlobs.ts
│ │ │ │ │ │ │ ├── listHosts.ts
│ │ │ │ │ │ │ ├── listRepos.ts
│ │ │ │ │ │ │ ├── listReposByCollection.ts
│ │ │ │ │ │ │ ├── notifyOfUpdate.ts
│ │ │ │ │ │ │ ├── requestCrawl.ts
│ │ │ │ │ │ │ └── subscribeRepos.ts
│ │ │ │ │ │ └── temp/
│ │ │ │ │ │ ├── addReservedHandle.ts
│ │ │ │ │ │ ├── checkHandleAvailability.ts
│ │ │ │ │ │ ├── checkSignupQueue.ts
│ │ │ │ │ │ ├── dereferenceScope.ts
│ │ │ │ │ │ ├── fetchLabels.ts
│ │ │ │ │ │ ├── requestPhoneVerification.ts
│ │ │ │ │ │ └── revokeAccountCredentials.ts
│ │ │ │ │ └── tools/
│ │ │ │ │ └── ozone/
│ │ │ │ │ ├── communication/
│ │ │ │ │ │ ├── createTemplate.ts
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── deleteTemplate.ts
│ │ │ │ │ │ ├── listTemplates.ts
│ │ │ │ │ │ └── updateTemplate.ts
│ │ │ │ │ ├── hosting/
│ │ │ │ │ │ └── getAccountHistory.ts
│ │ │ │ │ ├── moderation/
│ │ │ │ │ │ ├── cancelScheduledActions.ts
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── emitEvent.ts
│ │ │ │ │ │ ├── getAccountTimeline.ts
│ │ │ │ │ │ ├── getEvent.ts
│ │ │ │ │ │ ├── getRecord.ts
│ │ │ │ │ │ ├── getRecords.ts
│ │ │ │ │ │ ├── getRepo.ts
│ │ │ │ │ │ ├── getReporterStats.ts
│ │ │ │ │ │ ├── getRepos.ts
│ │ │ │ │ │ ├── getSubjects.ts
│ │ │ │ │ │ ├── listScheduledActions.ts
│ │ │ │ │ │ ├── queryEvents.ts
│ │ │ │ │ │ ├── queryStatuses.ts
│ │ │ │ │ │ ├── scheduleAction.ts
│ │ │ │ │ │ └── searchRepos.ts
│ │ │ │ │ ├── report/
│ │ │ │ │ │ └── defs.ts
│ │ │ │ │ ├── safelink/
│ │ │ │ │ │ ├── addRule.ts
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── queryEvents.ts
│ │ │ │ │ │ ├── queryRules.ts
│ │ │ │ │ │ ├── removeRule.ts
│ │ │ │ │ │ └── updateRule.ts
│ │ │ │ │ ├── server/
│ │ │ │ │ │ └── getConfig.ts
│ │ │ │ │ ├── set/
│ │ │ │ │ │ ├── addValues.ts
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── deleteSet.ts
│ │ │ │ │ │ ├── deleteValues.ts
│ │ │ │ │ │ ├── getValues.ts
│ │ │ │ │ │ ├── querySets.ts
│ │ │ │ │ │ └── upsertSet.ts
│ │ │ │ │ ├── setting/
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── listOptions.ts
│ │ │ │ │ │ ├── removeOptions.ts
│ │ │ │ │ │ └── upsertOption.ts
│ │ │ │ │ ├── signature/
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── findCorrelation.ts
│ │ │ │ │ │ ├── findRelatedAccounts.ts
│ │ │ │ │ │ └── searchAccounts.ts
│ │ │ │ │ ├── team/
│ │ │ │ │ │ ├── addMember.ts
│ │ │ │ │ │ ├── defs.ts
│ │ │ │ │ │ ├── deleteMember.ts
│ │ │ │ │ │ ├── listMembers.ts
│ │ │ │ │ │ └── updateMember.ts
│ │ │ │ │ └── verification/
│ │ │ │ │ ├── defs.ts
│ │ │ │ │ ├── grantVerifications.ts
│ │ │ │ │ ├── listVerifications.ts
│ │ │ │ │ └── revokeVerifications.ts
│ │ │ │ └── util.ts
│ │ │ ├── logger.ts
│ │ │ ├── mailer/
│ │ │ │ ├── index.ts
│ │ │ │ ├── moderation.ts
│ │ │ │ ├── templates/
│ │ │ │ │ ├── confirm-email.d.ts
│ │ │ │ │ ├── confirm-email.hbs
│ │ │ │ │ ├── delete-account.d.ts
│ │ │ │ │ ├── delete-account.hbs
│ │ │ │ │ ├── plc-operation.d.ts
│ │ │ │ │ ├── plc-operation.hbs
│ │ │ │ │ ├── reset-password.d.ts
│ │ │ │ │ ├── reset-password.hbs
│ │ │ │ │ ├── update-email.d.ts
│ │ │ │ │ └── update-email.hbs
│ │ │ │ └── templates.ts
│ │ │ ├── pipethrough.ts
│ │ │ ├── read-after-write/
│ │ │ │ ├── index.ts
│ │ │ │ ├── types.ts
│ │ │ │ ├── util.ts
│ │ │ │ └── viewer.ts
│ │ │ ├── redis.ts
│ │ │ ├── repo/
│ │ │ │ ├── index.ts
│ │ │ │ ├── prepare.ts
│ │ │ │ └── types.ts
│ │ │ ├── scripts/
│ │ │ │ ├── README.md
│ │ │ │ ├── index.ts
│ │ │ │ ├── publish-identity.ts
│ │ │ │ ├── rebuild-repo.ts
│ │ │ │ ├── rotate-keys.ts
│ │ │ │ ├── sequencer-recovery/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── recoverer.ts
│ │ │ │ │ ├── recovery-db.ts
│ │ │ │ │ ├── repair-repos.ts
│ │ │ │ │ └── user-queues.ts
│ │ │ │ └── util.ts
│ │ │ ├── sequencer/
│ │ │ │ ├── db/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── migrations/
│ │ │ │ │ │ ├── 001-init.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── schema.ts
│ │ │ │ ├── events.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── outbox.ts
│ │ │ │ └── sequencer.ts
│ │ │ ├── util/
│ │ │ │ ├── compression.ts
│ │ │ │ ├── debug.ts
│ │ │ │ ├── http.ts
│ │ │ │ ├── params.ts
│ │ │ │ └── types.ts
│ │ │ └── well-known.ts
│ │ ├── test.env
│ │ ├── tests/
│ │ │ ├── __snapshots__/
│ │ │ │ └── takedown-appeal.test.ts.snap
│ │ │ ├── _puppeteer.ts
│ │ │ ├── _util.ts
│ │ │ ├── account-deactivation.test.ts
│ │ │ ├── account-deletion.test.ts
│ │ │ ├── account-migration.test.ts
│ │ │ ├── account.test.ts
│ │ │ ├── app-passwords.test.ts
│ │ │ ├── auth.test.ts
│ │ │ ├── blob-deletes.test.ts
│ │ │ ├── create-post.test.ts
│ │ │ ├── crud.test.ts
│ │ │ ├── db.test.ts
│ │ │ ├── email-confirmation.test.ts
│ │ │ ├── entryway.test.ts
│ │ │ ├── file-uploads.test.ts
│ │ │ ├── handle-validation.test.ts
│ │ │ ├── handles.test.ts
│ │ │ ├── invite-codes.test.ts
│ │ │ ├── invites-admin.test.ts
│ │ │ ├── moderation.test.ts
│ │ │ ├── moderator-auth.test.ts
│ │ │ ├── oauth.test.ts
│ │ │ ├── plc-operations.test.ts
│ │ │ ├── preferences.test.ts
│ │ │ ├── proxied/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ ├── admin.test.ts.snap
│ │ │ │ │ ├── feedgen.test.ts.snap
│ │ │ │ │ └── views.test.ts.snap
│ │ │ │ ├── admin.test.ts
│ │ │ │ ├── feedgen.test.ts
│ │ │ │ ├── notif.test.ts
│ │ │ │ ├── procedures.test.ts
│ │ │ │ ├── proxy-catchall.test.ts
│ │ │ │ ├── proxy-header.test.ts
│ │ │ │ ├── read-after-write.test.ts
│ │ │ │ └── views.test.ts
│ │ │ ├── races.test.ts
│ │ │ ├── rate-limits.test.ts
│ │ │ ├── recovery.test.ts
│ │ │ ├── seeds/
│ │ │ │ ├── basic.ts
│ │ │ │ ├── follows.ts
│ │ │ │ ├── likes.ts
│ │ │ │ ├── reposts.ts
│ │ │ │ ├── thread.ts
│ │ │ │ ├── users-bulk.ts
│ │ │ │ └── users.ts
│ │ │ ├── sequencer.test.ts
│ │ │ ├── server.test.ts
│ │ │ ├── sync/
│ │ │ │ ├── invertible-ops.test.ts
│ │ │ │ ├── list.test.ts
│ │ │ │ ├── subscribe-repos.test.ts
│ │ │ │ └── sync.test.ts
│ │ │ └── takedown-appeal.test.ts
│ │ ├── tsconfig.build.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.tests.json
│ ├── repo/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── bench/
│ │ │ ├── mst.bench.ts
│ │ │ └── repo.bench.ts
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── block-map.ts
│ │ │ ├── car.ts
│ │ │ ├── cid-set.ts
│ │ │ ├── data-diff.ts
│ │ │ ├── error.ts
│ │ │ ├── index.ts
│ │ │ ├── logger.ts
│ │ │ ├── mst/
│ │ │ │ ├── diff.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── mst.ts
│ │ │ │ ├── util.ts
│ │ │ │ └── walker.ts
│ │ │ ├── parse.ts
│ │ │ ├── readable-repo.ts
│ │ │ ├── repo.ts
│ │ │ ├── storage/
│ │ │ │ ├── index.ts
│ │ │ │ ├── memory-blockstore.ts
│ │ │ │ ├── readable-blockstore.ts
│ │ │ │ ├── sync-storage.ts
│ │ │ │ └── types.ts
│ │ │ ├── sync/
│ │ │ │ ├── consumer.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── provider.ts
│ │ │ ├── types.ts
│ │ │ └── util.ts
│ │ ├── tests/
│ │ │ ├── _keys.ts
│ │ │ ├── _util.ts
│ │ │ ├── car-file-fixtures.json
│ │ │ ├── car.test.ts
│ │ │ ├── commit-data.test.ts
│ │ │ ├── commit-proof-fixtures.json
│ │ │ ├── commit-proofs.test.ts
│ │ │ ├── covering-proofs.test.ts
│ │ │ ├── mst.test.ts
│ │ │ ├── proofs.test.ts
│ │ │ ├── repo.test.ts
│ │ │ └── sync.test.ts
│ │ ├── tsconfig.build.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.tests.json
│ ├── sync/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── events.ts
│ │ │ ├── firehose/
│ │ │ │ ├── index.ts
│ │ │ │ └── lexicons.ts
│ │ │ ├── index.ts
│ │ │ ├── runner/
│ │ │ │ ├── consecutive-list.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── memory-runner.ts
│ │ │ │ └── types.ts
│ │ │ └── util.ts
│ │ ├── tests/
│ │ │ ├── firehose.test.ts
│ │ │ └── runner.test.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── syntax/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── benchmark.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── at-identifier.ts
│ │ │ ├── aturi.ts
│ │ │ ├── aturi_validation.ts
│ │ │ ├── datetime.ts
│ │ │ ├── did.ts
│ │ │ ├── handle.ts
│ │ │ ├── index.ts
│ │ │ ├── language.ts
│ │ │ ├── nsid.ts
│ │ │ ├── recordkey.ts
│ │ │ ├── tid.ts
│ │ │ └── uri.ts
│ │ ├── tests/
│ │ │ ├── aturi.test.ts
│ │ │ ├── datetime.test.ts
│ │ │ ├── did.test.ts
│ │ │ ├── handle.test.ts
│ │ │ ├── language.test.ts
│ │ │ ├── nsid.test.ts
│ │ │ ├── recordkey.test.ts
│ │ │ └── tid.test.ts
│ │ ├── tsconfig.build.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.tests.json
│ │ └── vitest.config.ts
│ ├── tap/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── channel.ts
│ │ │ ├── client.ts
│ │ │ ├── index.ts
│ │ │ ├── lex-indexer.ts
│ │ │ ├── simple-indexer.ts
│ │ │ ├── types.ts
│ │ │ └── util.ts
│ │ ├── tests/
│ │ │ ├── _util.ts
│ │ │ ├── channel.test.ts
│ │ │ ├── client.test.ts
│ │ │ ├── lex-indexer.test.ts
│ │ │ ├── simple-indexer.test.ts
│ │ │ └── util.test.ts
│ │ ├── tsconfig.build.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.tests.json
│ │ └── vitest.config.ts
│ ├── ws-client/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── index.ts
│ │ ├── tests/
│ │ │ └── keepalive.test.ts
│ │ ├── tsconfig.build.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.tests.json
│ ├── xrpc/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── client.ts
│ │ │ ├── fetch-handler.ts
│ │ │ ├── index.ts
│ │ │ ├── types.ts
│ │ │ ├── util.ts
│ │ │ └── xrpc-client.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ └── xrpc-server/
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── jest.config.js
│ ├── package.json
│ ├── src/
│ │ ├── auth.ts
│ │ ├── errors.ts
│ │ ├── index.ts
│ │ ├── logger.ts
│ │ ├── rate-limiter.ts
│ │ ├── server.ts
│ │ ├── stream/
│ │ │ ├── frames.ts
│ │ │ ├── index.ts
│ │ │ ├── logger.ts
│ │ │ ├── server.ts
│ │ │ ├── stream.ts
│ │ │ ├── subscription.ts
│ │ │ └── types.ts
│ │ ├── types.ts
│ │ └── util.ts
│ ├── tests/
│ │ ├── _util.ts
│ │ ├── auth.test.ts
│ │ ├── bodies.test.ts
│ │ ├── errors.test.ts
│ │ ├── frames.test.ts
│ │ ├── ipld.test.ts
│ │ ├── parameters.test.ts
│ │ ├── parsing.test.ts
│ │ ├── procedures.test.ts
│ │ ├── queries.test.ts
│ │ ├── rate-limiter.test.ts
│ │ ├── responses.test.ts
│ │ ├──
================================================
FILE CONTENTS
================================================
================================================
FILE: .changeset/README.md
================================================
# Changesets
Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
with multi-package repos, or single-package repos to help you version and publish your code. You can
find the full documentation for it [in our repository](https://github.com/changesets/changesets)
We have a quick list of common questions to get you started engaging with this project in
[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
================================================
FILE: .changeset/config.json
================================================
{
"$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json",
"changelog": ["@changesets/changelog-github", { "repo": "bluesky-social/atproto" }],
"commit": false,
"fixed": [],
"linked": [],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": []
}
================================================
FILE: .changeset/giant-goats-repeat.md
================================================
---
'@atproto/bsky': patch
---
Refactor `FeatureGatesClient` to add `scope()` method and docs.
================================================
FILE: .changeset/nine-eyes-switch.md
================================================
---
'@atproto/bsky': patch
---
Remove feature gate for new user onboarding
================================================
FILE: .dockerignore
================================================
node_modules
**/dist
.DS_Store
.git
Dockerfile
================================================
FILE: .eslintignore
================================================
dist
node_modules
# buf
packages/bsky/src/proto
packages/bsync/src/proto
# codegen
packages/api/src/client
packages/bsky/src/lexicon
packages/pds/src/lexicon
packages/ozone/src/lexicon
# @atproto/lex
packages/lexicon-resolver/src/lexicons
packages/lex/*/src/lexicons
packages/lex/*/tests/lexicons
packages/oauth/oauth-client-browser-example/src/lexicons
# others
packages/oauth/*/src/locales/*/messages.ts
packages/oauth/oauth-provider-frontend/src/routeTree.gen.ts
packages/oauth/oauth-client-expo/android/build
================================================
FILE: .eslintrc
================================================
{
"root": true,
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/base",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
"plugin:prettier/recommended",
"plugin:import/recommended",
"plugin:import/typescript"
],
"plugins": ["n"],
"ignorePatterns": ["dist", "node_modules"],
"rules": {
"no-var": "error",
"prefer-const": "warn",
"no-misleading-character-class": "warn",
"eqeqeq": ["error", "always", { "null": "ignore" }],
"n/global-require": "error",
"n/no-extraneous-import": "error",
"n/prefer-node-protocol": "error",
"import/extensions": ["off", "ignorePackages"],
"import/export": "off",
"import/namespace": "off",
"import/no-deprecated": "off",
"import/no-absolute-path": "error",
"import/no-dynamic-require": "error",
"import/no-self-import": "error",
"import/order": [
"error",
{
"named": true,
"distinctGroup": true,
"alphabetize": { "order": "asc" },
"newlines-between": "never",
"groups": [
"builtin",
"external",
"internal",
"parent",
["index", "sibling"],
"object"
]
}
],
"@typescript-eslint/no-unused-vars": [
"error",
{
"argsIgnorePattern": "^_",
"varsIgnorePattern": "^_",
"ignoreRestSiblings": true
}
],
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/no-empty-interface": "off",
"@typescript-eslint/explicit-module-boundary-types": "off",
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-explicit-any": "off"
},
"overrides": [
{
"files": ["jest.config.js"],
"env": { "commonjs": true }
},
{
"files": ["vite.config.js", "vite.config.cjs", "vite.config.mjs"],
"env": { "node": true }
},
{
"files": ["jest.setup.js"],
"env": { "jest": true }
},
{
"files": ["*.js", "*.cjs"],
"rules": {
"@typescript-eslint/no-var-requires": "off"
}
},
{
"files": ["**/*.test.ts", "**/tests/**/*.ts"],
"rules": {
"n/no-extraneous-import": [
"error",
{ "allowModules": ["@atproto/dev-env"] }
]
}
}
],
"settings": {
"node": { "version": ">=18.7.0" },
"import/internal-regex": "^@atproto(?:-labs)?/",
"import/parsers": { "@typescript-eslint/parser": [".ts", ".tsx"] },
"import/resolver": {
"typescript": {
"project": [
"tsconfig.json",
"packages/lex/*/tsconfig.json",
"packages/oauth/*/tsconfig.json",
"packages/oauth/*/tsconfig.src.json",
"packages/internal/*/tsconfig.json",
"packages/*/tsconfig.json"
]
},
"node": {
"extensions": [".js", ".jsx", ".json"]
}
}
}
}
================================================
FILE: .gitattributes
================================================
# buf
packages/bsky/src/proto/** linguist-generated=true
packages/bsync/src/proto/** linguist-generated=true
# codegen
packages/api/src/client/** linguist-generated=true
packages/bsky/src/lexicon/** linguist-generated=true
packages/pds/src/lexicon/** linguist-generated=true
packages/ozone/src/lexicon/** linguist-generated=true
# @atproto/lex
packages/lexicon-resolver/src/lexicons/** linguist-generated=true
# i18n
packages/oauth/oauth-provider-ui/src/locales/**/messages.po linguist-generated=true
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
<!-- A clear and concise description of what the bug is. -->
**To Reproduce**
Steps to reproduce the behavior:
1.
**Expected behavior**
<!-- A clear and concise description of what you expected to happen. -->
**Details**
- Operating system:
- Node version:
**Additional context**
<!-- Add any other context about the problem here. -->
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: feature-request
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
**Describe the solution you'd like**
<!-- A clear and concise description of what you want to happen. -->
**Describe alternatives you've considered**
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
**Additional context**
<!-- Add any other context or screenshots about the feature request here. -->
================================================
FILE: .github/workflows/build-and-push-bsky-aws.yaml
================================================
name: build-and-push-bsky-aws
on:
push:
branches:
- main
env:
REGISTRY: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_REGISTRY }}
USERNAME: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_USERNAME }}
PASSWORD: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_PASSWORD }}
IMAGE_NAME: bsky-app-view
jobs:
bsky-container-aws:
if: github.repository == 'bluesky-social/atproto'
runs-on: ubuntu-22.04
permissions:
contents: read
packages: write
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v2
- name: Log into registry ${{ env.REGISTRY }}
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ env.USERNAME}}
password: ${{ env.PASSWORD }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=sha,enable=true,priority=100,prefix=,suffix=,format=long
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@v4
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
file: ./services/bsky/Dockerfile
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
================================================
FILE: .github/workflows/build-and-push-bsky-ghcr.yaml
================================================
name: build-and-push-bsky-ghcr
on:
push:
branches:
- main
env:
REGISTRY: ghcr.io
USERNAME: ${{ github.actor }}
PASSWORD: ${{ secrets.GITHUB_TOKEN }}
# github.repository as <account>/<repo>
IMAGE_NAME: ${{ github.repository }}
jobs:
bsky-container-ghcr:
if: github.repository == 'bluesky-social/atproto'
runs-on: ubuntu-22.04
permissions:
contents: read
packages: write
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v2
- name: Log into registry ${{ env.REGISTRY }}
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ env.USERNAME }}
password: ${{ env.PASSWORD }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=sha,enable=true,priority=100,prefix=bsky:,suffix=,format=long
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@v4
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
file: ./services/bsky/Dockerfile
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
================================================
FILE: .github/workflows/build-and-push-bsync-aws.yaml
================================================
name: build-and-push-bsync-aws
on:
push:
branches:
- main
env:
REGISTRY: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_REGISTRY }}
USERNAME: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_USERNAME }}
PASSWORD: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_PASSWORD }}
IMAGE_NAME: bsync
jobs:
bsync-container-aws:
if: github.repository == 'bluesky-social/atproto'
runs-on: ubuntu-22.04
permissions:
contents: read
packages: write
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v2
- name: Log into registry ${{ env.REGISTRY }}
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ env.USERNAME}}
password: ${{ env.PASSWORD }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=sha,enable=true,priority=100,prefix=,suffix=,format=long
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@v4
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
file: ./services/bsync/Dockerfile
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
================================================
FILE: .github/workflows/build-and-push-bsync-ghcr.yaml
================================================
name: build-and-push-bsync-ghcr
on:
push:
branches:
- main
env:
REGISTRY: ghcr.io
USERNAME: ${{ github.actor }}
PASSWORD: ${{ secrets.GITHUB_TOKEN }}
# github.repository as <account>/<repo>
IMAGE_NAME: ${{ github.repository }}
jobs:
bsync-container-ghcr:
if: github.repository == 'bluesky-social/atproto'
runs-on: ubuntu-22.04
permissions:
contents: read
packages: write
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v2
- name: Log into registry ${{ env.REGISTRY }}
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ env.USERNAME }}
password: ${{ env.PASSWORD }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=sha,enable=true,priority=100,prefix=bsync:,suffix=,format=long
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@v4
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
file: ./services/bsync/Dockerfile
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
================================================
FILE: .github/workflows/build-and-push-ozone-aws.yaml
================================================
name: build-and-push-ozone-aws
on:
push:
branches:
- main
env:
REGISTRY: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_REGISTRY }}
USERNAME: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_USERNAME }}
PASSWORD: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_PASSWORD }}
IMAGE_NAME: ozone
jobs:
ozone-container-aws:
if: github.repository == 'bluesky-social/atproto'
runs-on: ubuntu-22.04
permissions:
contents: read
packages: write
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v2
- name: Log into registry ${{ env.REGISTRY }}
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ env.USERNAME}}
password: ${{ env.PASSWORD }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=sha,enable=true,priority=100,prefix=,suffix=,format=long
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@v4
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
file: ./services/ozone/Dockerfile
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
================================================
FILE: .github/workflows/build-and-push-ozone-ghcr.yaml
================================================
name: build-and-push-ozone-ghcr
on:
push:
branches:
- main
env:
REGISTRY: ghcr.io
USERNAME: ${{ github.actor }}
PASSWORD: ${{ secrets.GITHUB_TOKEN }}
# github.repository as <account>/<repo>
IMAGE_NAME: ${{ github.repository }}
jobs:
ozone-container-ghcr:
if: github.repository == 'bluesky-social/atproto'
runs-on: ubuntu-22.04
permissions:
contents: read
packages: write
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v2
- name: Log into registry ${{ env.REGISTRY }}
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ env.USERNAME }}
password: ${{ env.PASSWORD }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=sha,enable=true,priority=100,prefix=ozone:,suffix=,format=long
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@v4
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
file: ./services/ozone/Dockerfile
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
================================================
FILE: .github/workflows/build-and-push-pds-aws.yaml
================================================
name: build-and-push-pds-aws
on:
push:
branches:
- main
env:
REGISTRY: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_REGISTRY }}
USERNAME: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_USERNAME }}
PASSWORD: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_PASSWORD }}
IMAGE_NAME: pds
jobs:
pds-container-aws:
if: github.repository == 'bluesky-social/atproto'
runs-on: ubuntu-22.04
permissions:
contents: read
packages: write
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v2
- name: Log into registry ${{ env.REGISTRY }}
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ env.USERNAME}}
password: ${{ env.PASSWORD }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=sha,enable=true,priority=100,prefix=,suffix=,format=long
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@v4
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
file: ./services/pds/Dockerfile
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
================================================
FILE: .github/workflows/build-and-push-pds-ghcr.yaml
================================================
name: build-and-push-pds-ghcr
on:
push:
branches:
- main
env:
REGISTRY: ghcr.io
USERNAME: ${{ github.actor }}
PASSWORD: ${{ secrets.GITHUB_TOKEN }}
# github.repository as <account>/<repo>
IMAGE_NAME: ${{ github.repository }}
jobs:
pds-container-ghcr:
if: github.repository == 'bluesky-social/atproto'
runs-on: ubuntu-22.04
permissions:
contents: read
packages: write
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v2
- name: Log into registry ${{ env.REGISTRY }}
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ env.USERNAME }}
password: ${{ env.PASSWORD }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=sha,enable=true,priority=100,prefix=pds:,suffix=,format=long
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@v4
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
file: ./services/pds/Dockerfile
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
================================================
FILE: .github/workflows/claude.yaml
================================================
name: Claude Code
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
issues:
types: [opened, assigned]
pull_request_review:
types: [submitted]
jobs:
claude:
if: |
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
actions: read # Required for Claude to read CI results on PRs
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Run Claude Code
id: claude
uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
# This is an optional setting that allows Claude to read CI results on PRs
additional_permissions: |
actions: read
# Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
# prompt: 'Update the pull request description to include a summary of changes.'
# Optional: Add claude_args to customize behavior and configuration
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
# or https://code.claude.com/docs/en/cli-reference for available options
# claude_args: '--allowed-tools Bash(gh pr:*)'
# NOTE(sfn): we can add a custom system prompt here
claude_args: |
--model claude-opus-4-5-20251101
================================================
FILE: .github/workflows/publish.yaml
================================================
name: Publish
on:
push:
branches:
- main
permissions:
id-token: write
contents: write
pull-requests: write
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
jobs:
build:
name: Publish
if: github.repository == 'bluesky-social/atproto'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v6
with:
cache: pnpm
node-version-file: '.nvmrc'
registry-url: 'https://registry.npmjs.org'
- run: npm install --global npm@latest
- run: pnpm install --frozen-lockfile
env:
PUPPETEER_SKIP_DOWNLOAD: true
- name: Publish
uses: changesets/action@v1
id: changesets
with:
publish: pnpm release
version: pnpm run version-packages
commit: 'Version packages'
title: 'Version packages'
================================================
FILE: .github/workflows/repo.yaml
================================================
name: Repository CI
on:
pull_request:
branches:
- '*'
concurrency:
group: '${{ github.workflow }}-${{ github.head_ref || github.ref }}'
cancel-in-progress: true
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v6
with:
cache: pnpm
node-version-file: '.nvmrc'
- run: pnpm install --frozen-lockfile
env:
PUPPETEER_SKIP_DOWNLOAD: true
- run: pnpm build
- uses: actions/upload-artifact@v4
with:
name: dist
retention-days: 2
path: |
packages/*/dist
packages/*/*/dist
packages/lex/*/src/lexicons
packages/lex/*/tests/lexicons
packages/oauth/oauth-client-browser-example/src/lexicons
packages/oauth/*/src/locales/*/messages.ts
changeset:
name: Changeset
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # needed for git diff against base branch
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v6
with:
cache: pnpm
node-version-file: '.nvmrc'
- run: pnpm install --frozen-lockfile
env:
PUPPETEER_SKIP_DOWNLOAD: true
- run: pnpm changeset status --since=origin/${{ github.base_ref }}
test:
name: Test
needs: build
runs-on: ubuntu-22.04
# Puppeteer does not work in recent Ubuntu versions without a workaround due
# to sandboxing issues. Using "ubuntu-latest" results in the following
# error:
#
# No usable sandbox! If you are running on Ubuntu 23.10+ or another Linux
# distro that has disabled unprivileged user namespaces with AppArmor, see
# https://chromium.googlesource.com/chromium/src/+/main/docs/security/apparmor-userns-restrictions.md.
# Otherwise see
# https://chromium.googlesource.com/chromium/src/+/main/docs/linux/suid_sandbox_development.md
# for more information on developing with the (older) SUID sandbox. If you
# want to live dangerously and need an immediate workaround, you can try
# using --no-sandbox.
strategy:
fail-fast: false
matrix:
shard: [1/8, 2/8, 3/8, 4/8, 5/8, 6/8, 7/8, 8/8]
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v6
with:
cache: pnpm
node-version-file: '.nvmrc'
- run: echo "CURRENT_MONTH=$(date +'%Y-%m')" >> $GITHUB_ENV
- uses: actions/cache@v4
name: Cache Puppeteer browser binaries
with:
path: ~/.cache/puppeteer
key: ${{ env.CURRENT_MONTH }}-${{ runner.os }}-${{ runner.arch }}
- run: pnpm install --frozen-lockfile
- uses: actions/download-artifact@v4
with:
name: dist
path: packages
- run: pnpm test:withFlags --maxWorkers=1 --shard=${{ matrix.shard }} --passWithNoTests
verify:
name: Verify
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v6
with:
cache: pnpm
node-version-file: '.nvmrc'
- run: pnpm install --frozen-lockfile
env:
PUPPETEER_SKIP_DOWNLOAD: true
- uses: actions/download-artifact@v4
with:
name: dist
path: packages
- run: pnpm verify
================================================
FILE: .github/workflows/sync-internal.yaml
================================================
name: Sync to internal repo
on:
push:
branches: [main]
jobs:
sync:
if: github.repository == 'bluesky-social/atproto'
runs-on: ubuntu-latest
steps:
- name: Checkout public repo
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Generate GitHub App Token
id: app-token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ vars.SYNC_INTERNAL_APP_ID }}
private-key: ${{ secrets.SYNC_INTERNAL_PK }}
repositories: atproto-internal
- name: Push to internal repo
env:
TOKEN: ${{ steps.app-token.outputs.token }}
run: |
git config user.name "github-actions"
git config user.email "test@users.noreply.github.com"
git config --unset-all http.https://github.com/.extraheader
git remote add internal https://x-access-token:${TOKEN}@github.com/bluesky-social/atproto-internal.git
git push internal main --force
================================================
FILE: .gitignore
================================================
node_modules
lerna-debug.log
npm-debug.log
yarn-error.log
packages/**/dist
.idea
packages/*/coverage
test.sqlite
.DS_Store
*.log
*.tsbuildinfo
.*.env
.env.*
.env
\#*\#
*~
*.swp
.claude/
coverage
================================================
FILE: .npmrc
================================================
enable-pre-post-scripts = true
include-workspace-root = true
================================================
FILE: .nvmrc
================================================
22
================================================
FILE: .prettierignore
================================================
node_modules
interop-test-files
__snapshots__
dist
pnpm-lock.yaml
.pnpm*
.changeset
CHANGELOG.md
# buf
packages/bsky/src/proto
packages/bsync/src/proto
# codegen
packages/api/src/client
packages/bsky/src/lexicon
packages/pds/src/lexicon
packages/ozone/src/lexicon
# @atproto/lex
packages/lexicon-resolver/src/lexicons
packages/lex/*/src/lexicons
packages/lex/*/tests/lexicons
packages/oauth/oauth-client-browser-example/src/lexicons
# others
packages/oauth/*/src/locales/*/messages.ts
packages/oauth/oauth-provider-frontend/src/routeTree.gen.ts
packages/oauth/oauth-client-expo/android/build
================================================
FILE: .prettierrc
================================================
{
"trailingComma": "all",
"tabWidth": 2,
"semi": false,
"singleQuote": true,
"plugins": ["prettier-plugin-tailwindcss"],
"overrides": [
{
"files": "*.hbs",
"options": {
"singleQuote": false
}
},
{
"files": [".eslintrc"],
"options": {
"parser": "json",
"trailingComma": "none"
}
}
]
}
================================================
FILE: .vscode/extensions.json
================================================
{
"recommendations": [
"dbaeumer.vscode-eslint",
"wengerk.highlight-bad-chars",
"esbenp.prettier-vscode",
"streetsidesoftware.code-spell-checker",
"vitest.explorer"
]
}
================================================
FILE: .vscode/settings.json
================================================
{
"cSpell.language": "en,en-US",
"cSpell.words": [
"algs",
"appview",
"atproto",
"blockstore",
"bluesky",
"bsky",
"bsync",
"cbor",
"clsx",
"consolas",
"dpop",
"googleusercontent",
"hcaptcha",
"hexeditor",
"ingester",
"insertable",
"ipld",
"jwks",
"keypair",
"kysely",
"merkle",
"msid",
"multibase",
"multiformats",
"nameserver",
"oidc",
"pkce",
"ponyfill",
"proxied",
"ssrf",
"undici",
"webcrypto",
"whatwg",
"xrpc"
],
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.sortImports": "never"
},
"files.associations": {
"**/tsconfig/*.json": "jsonc"
},
"files.defaultLanguage": "ts",
"files.insertFinalNewline": true,
"files.trimTrailingWhitespace": true,
"prettier.semi": false,
"prettier.singleQuote": true,
"prettier.trailingComma": "es5",
"typescript.tsdk": "node_modules/typescript/lib"
}
================================================
FILE: CONTRIBUTORS.md
================================================
# Contributors
ATProto receives so many contributions that we could never list everyone who deserves it. However, in this document we want to give special thanks to contributors who solve particularly difficult tasks, send security disclosures, or in some way deserve recognition.
### The AT Protocol maintainers give their thanks to:
#### [rmcan](https://github.com/rmcan), Security disclosure, April 2023
#### [ianklatzco](https://github.com/ianklatzco), Security disclosure, April 2023
#### lily, Security disclosure, May 2023
#### [april](https://github.com/april), Security disclosure, May 2023
#### [TowhidKashem](https://github.com/TowhidKashem), Security disclosure, May 2023
#### [DavidBuchanan314](https://github.com/DavidBuchanan314), Security disclosure, May 2023
#### [goeo\_](https://bsky.app/profile/did:web:genco.me), Security disclosure, May 2024
#### [DavidBuchanan314](https://github.com/DavidBuchanan314), Security disclosure, November 2024
#### [daniel](https://hackerone.com/daniel), Security disclosure, November 2024
#### [imax](https://github.com/imax9000), Security disclosure, January 2025
#### [avivkeller](https://github.com/avivkeller), Security disclosure, December 2025
================================================
FILE: LICENSE-APACHE.txt
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: LICENSE-MIT.txt
================================================
MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: LICENSE.txt
================================================
Dual MIT/Apache-2.0 License
Copyright (c) 2022-2026 Bluesky Social PBC, and Contributors
Except as otherwise noted in individual files, this software is licensed under the MIT license (<http://opensource.org/licenses/MIT>), or the Apache License, Version 2.0 (<http://www.apache.org/licenses/LICENSE-2.0>).
Downstream projects and end users may chose either license individually, or both together, at their discretion. The motivation for this dual-licensing is the additional software patent assurance provided by Apache 2.0.
================================================
FILE: Makefile
================================================
SHELL = /bin/bash
.SHELLFLAGS = -o pipefail -c
.PHONY: help
help: ## Print info about all commands
@echo "Helper Commands:"
@echo
@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[01;32m%-20s\033[0m %s\n", $$1, $$2}'
@echo
@echo "NOTE: dependencies between commands are not automatic. Eg, you must run 'deps' and 'build' first, and after any changes"
.PHONY: build
build: ## Compile all modules
pnpm build
.PHONY: test
test: ## Run all tests
pnpm test
.PHONY: run-dev-env
run-dev-env: ## Run a "development environment" shell
cd packages/dev-env; NODE_ENV=development pnpm run start
.PHONY: run-dev-env-logged
run-dev-env-logged: ## Run a "development environment" shell (with logging)
cd packages/dev-env; LOG_ENABLED=true NODE_ENV=development pnpm run start | pnpm exec pino-pretty
.PHONY: codegen
codegen: ## Re-generate packages from lexicon/ files
pnpm codegen
.PHONY: lint
lint: ## Run style checks and verify syntax
pnpm verify
.PHONY: fmt
fmt: ## Run syntax re-formatting
pnpm format
.PHONY: fmt-lexicons
fmt-lexicons: ## Run syntax re-formatting, just on .json files
pnpm exec eslint ./lexicons/ --ext .json --fix
.PHONY: deps
deps: ## Installs dependent libs using 'pnpm install'
pnpm install --frozen-lockfile
.PHONY: clean
clean: ## Deletes all 'dist' and 'node_package' directories (including nested)
rm -rf **/dist **/node_packages
.PHONY: nvm-setup
nvm-setup: ## Use NVM to install and activate node+pnpm
nvm install 18
nvm use 18
corepack enable
================================================
FILE: README.md
================================================
# AT Protocol Reference Implementation (TypeScript)
Welcome friends!
This repository contains Bluesky's reference implementation of AT Protocol, and of the `app.bsky` microblogging application service backend.
## What is in here?
**TypeScript Packages:**
| Package | Docs | NPM |
| ----------------------------------------------------------------------------- | ------------------------------------------ | --------------------------------------------------------------------------------------------------------------- |
| `@atproto/api`: client library | [README](./packages/api/README.md) | [](https://www.npmjs.com/package/@atproto/api) |
| `@atproto/common-web`: shared code and helpers which can run in web browsers | [README](./packages/common-web/README.md) | [](https://www.npmjs.com/package/@atproto/common-web) |
| `@atproto/common`: shared code and helpers which doesn't work in web browsers | [README](./packages/common/README.md) | [](https://www.npmjs.com/package/@atproto/common) |
| `@atproto/crypto`: cryptographic signing and key serialization | [README](./packages/crypto/README.md) | [](https://www.npmjs.com/package/@atproto/crypto) |
| `@atproto/identity`: DID and handle resolution | [README](./packages/identity/README.md) | [](https://www.npmjs.com/package/@atproto/identity) |
| `@atproto/lexicon`: schema definition language | [README](./packages/lexicon/README.md) | [](https://www.npmjs.com/package/@atproto/lexicon) |
| `@atproto/repo`: data storage structure, including MST | [README](./packages/repo/README.md) | [](https://www.npmjs.com/package/@atproto/repo) |
| `@atproto/syntax`: string parsers for identifiers | [README](./packages/syntax/README.md) | [](https://www.npmjs.com/package/@atproto/syntax) |
| `@atproto/xrpc`: client-side HTTP API helpers | [README](./packages/xrpc/README.md) | [](https://www.npmjs.com/package/@atproto/xrpc) |
| `@atproto/xrpc-server`: server-side HTTP API helpers | [README](./packages/xrpc-server/README.md) | [](https://www.npmjs.com/package/@atproto/xrpc-server) |
**TypeScript Services:**
- `pds`: "Personal Data Server", hosting repo content for atproto accounts. Most implementation code in `packages/pds`, with runtime wrapper in `services/pds`. See [bluesky-social/pds](https://github.com/bluesky-social/pds) for directions on self-hosting.
- `bsky`: AppView implementation of the `app.bsky.*` API endpoints. Running on main network at `api.bsky.app`. Most implementation code in `packages/bsky`, with runtime wrapper in `services/bsky`.
**Lexicons:** for both the `com.atproto.*` and `app.bsky.*` are canonically versioned in this repo, for now, under `./lexicons/`. These are JSON files in the [Lexicon schema definition language](https://atproto.com/specs/lexicon), similar to JSON Schema or OpenAPI.
**Interoperability Test Data:** the language-neutral test files in `./interop-test-files/` may be useful for other protocol implementations to ensure that they follow the specification correctly
The source code for the Bluesky Social client app (for web and mobile) can be found at [bluesky-social/social-app](https://github.com/bluesky-social/social-app).
Go programming language source code is in [bluesky-social/indigo](https://github.com/bluesky-social/indigo), including the BGS implementation.
## Developer Quickstart
We recommend [`nvm`](https://github.com/nvm-sh/nvm) for managing Node.js installs. This project requires Node.js version 18. `pnpm` is used to manage the workspace of multiple packages. You can install it with `npm install --global pnpm`.
There is a Makefile which can help with basic development tasks:
```shell
# use existing nvm to install node 18 and pnpm
make nvm-setup
# pull dependencies and build all local packages
make deps
make build
# run the tests, using Docker services as needed
make test
# run a local PDS and AppView with fake test accounts and data
# (this requires a global installation of `jq` and `docker`)
make run-dev-env
# show all other commands
make help
```
## About AT Protocol
The Authenticated Transfer Protocol ("ATP" or "atproto") is a decentralized social media protocol, developed by [Bluesky Social PBC](https://bsky.social). Learn more at:
- [Overview and Guides](https://atproto.com/guides/overview) 👈 Best starting point
- [Github Discussions](https://github.com/bluesky-social/atproto/discussions) 👈 Great place to ask questions
- [Protocol Specifications](https://atproto.com/specs/atp)
- [Blogpost on self-authenticating data structures](https://bsky.social/about/blog/3-6-2022-a-self-authenticating-social-protocol)
The Bluesky Social application encompasses a set of schemas and APIs built in the overall AT Protocol framework. The namespace for these "Lexicons" is `app.bsky.*`.
## Contributions
> While we do accept contributions, we prioritize high quality issues and pull requests. Adhering to the below guidelines will ensure a more timely review.
**Rules:**
- We may not respond to your issue or PR.
- We may close an issue or PR without much feedback.
- We may lock discussions or contributions if our attention is getting DDOSed.
- We do not provide support for build issues.
**Guidelines:**
- Check for existing issues before filing a new one, please.
- Open an issue and give some time for discussion before submitting a PR.
- If submitting a PR that includes a lexicon change, please get sign off on the lexicon change _before_ doing the implementation.
- Issues are for bugs & feature requests related to the TypeScript implementation of atproto and related services.
- For high-level discussions, please use the [Discussion Forum](https://github.com/bluesky-social/atproto/discussions).
- For client issues, please use the relevant [social-app](https://github.com/bluesky-social/social-app) repo.
- Stay away from PRs that:
- Refactor large parts of the codebase
- Add entirely new features without prior discussion
- Change the tooling or frameworks used without prior discussion
- Introduce new unnecessary dependencies
Remember, we serve a wide community of users. Our day-to-day involves us constantly asking "which top priority is our top priority." If you submit well-written PRs that solve problems concisely, that's an awesome contribution. Otherwise, as much as we'd love to accept your ideas and contributions, we really don't have the bandwidth.
## Are you a developer interested in building on atproto?
Bluesky is an open social network built on the AT Protocol, a flexible technology that will never lock developers out of the ecosystems that they help build. With atproto, third-party can be as seamless as first-party through custom feeds, federated services, clients, and more.
## Security disclosures
If you discover any security issues, please send an email to security@bsky.app. The email is automatically CCed to the entire team, and we'll respond promptly. See [SECURITY.md](https://github.com/bluesky-social/atproto/blob/main/SECURITY.md) for more info.
## License
This project is dual-licensed under MIT and Apache 2.0 terms:
- MIT license ([LICENSE-MIT.txt](https://github.com/bluesky-social/atproto/blob/main/LICENSE-MIT.txt) or http://opensource.org/licenses/MIT)
- Apache License, Version 2.0, ([LICENSE-APACHE.txt](https://github.com/bluesky-social/atproto/blob/main/LICENSE-APACHE.txt) or http://www.apache.org/licenses/LICENSE-2.0)
Downstream projects and end users may chose either license individually, or both together, at their discretion. The motivation for this dual-licensing is the additional software patent assurance provided by Apache 2.0.
Bluesky Social PBC has committed to a software patent non-aggression pledge. For details see [the original announcement](https://bsky.social/about/blog/10-01-2025-patent-pledge).
================================================
FILE: SECURITY.md
================================================
# Security Policy
## Reporting a Vulnerability
Please do NOT report possible security vulnerabilities in public channels such as GitHub Issues. If you believe you have found a security vulnerability, please email us at `security@bsky.app` with a description of the issue.
We will acknowledge the vulnerability as soon as possible - within 3 business days - and follow up when a fix lands. Please avoid discussing the vulnerability until we do so.
With your consent, we will add you to the repository [CONTRIBUTORS](https://github.com/bluesky-social/atproto/blob/main/CONTRIBUTORS.md) file.
================================================
FILE: interop-test-files/README.md
================================================
atproto Interop Test Files
==========================
This directory contains reusable files for testing interoperability and specification compliance for atproto (AT Protocol).
The protocol itself is documented at <https://atproto.com/specs/atp>. If there are conflicts or ambiguity between these test files and the specs, the specs are the authority, and these test files should usually be corrected.
These files are intended to be simple (JSON, text files, etc) and mostly self-documenting.
================================================
FILE: interop-test-files/crypto/signature-fixtures.json
================================================
[
{
"comment": "valid P-256 key and signature, with low-S signature",
"messageBase64": "oWVoZWxsb2V3b3JsZA",
"algorithm": "ES256",
"didDocSuite": "EcdsaSecp256r1VerificationKey2019",
"publicKeyDid": "did:key:zDnaembgSGUhZULN2Caob4HLJPaxBh92N7rtH21TErzqf8HQo",
"publicKeyMultibase": "zxdM8dSstjrpZaRUwBmDvjGXweKuEMVN95A9oJBFjkWMh",
"signatureBase64": "2vZNsG3UKvvO/CDlrdvyZRISOFylinBh0Jupc6KcWoJWExHptCfduPleDbG3rko3YZnn9Lw0IjpixVmexJDegg",
"validSignature": true,
"tags": []
},
{
"comment": "valid K-256 key and signature, with low-S signature",
"messageBase64": "oWVoZWxsb2V3b3JsZA",
"algorithm": "ES256K",
"didDocSuite": "EcdsaSecp256k1VerificationKey2019",
"publicKeyDid": "did:key:zQ3shqwJEJyMBsBXCWyCBpUBMqxcon9oHB7mCvx4sSpMdLJwc",
"publicKeyMultibase": "z25z9DTpsiYYJKGsWmSPJK2NFN8PcJtZig12K59UgW7q5t",
"signatureBase64": "5WpdIuEUUfVUYaozsi8G0B3cWO09cgZbIIwg1t2YKdUn/FEznOndsz/qgiYb89zwxYCbB71f7yQK5Lr7NasfoA",
"validSignature": true,
"tags": []
},
{
"comment": "P-256 key and signature, with non-low-S signature which is invalid in atproto",
"messageBase64": "oWVoZWxsb2V3b3JsZA",
"algorithm": "ES256",
"didDocSuite": "EcdsaSecp256r1VerificationKey2019",
"publicKeyDid": "did:key:zDnaembgSGUhZULN2Caob4HLJPaxBh92N7rtH21TErzqf8HQo",
"publicKeyMultibase": "zxdM8dSstjrpZaRUwBmDvjGXweKuEMVN95A9oJBFjkWMh",
"signatureBase64": "2vZNsG3UKvvO/CDlrdvyZRISOFylinBh0Jupc6KcWoKp7O4VS9giSAah8k5IUbXIW00SuOrjfEqQ9HEkN9JGzw",
"validSignature": false,
"tags": ["high-s"]
},
{
"comment": "K-256 key and signature, with non-low-S signature which is invalid in atproto",
"messageBase64": "oWVoZWxsb2V3b3JsZA",
"algorithm": "ES256K",
"didDocSuite": "EcdsaSecp256k1VerificationKey2019",
"publicKeyDid": "did:key:zQ3shqwJEJyMBsBXCWyCBpUBMqxcon9oHB7mCvx4sSpMdLJwc",
"publicKeyMultibase": "z25z9DTpsiYYJKGsWmSPJK2NFN8PcJtZig12K59UgW7q5t",
"signatureBase64": "5WpdIuEUUfVUYaozsi8G0B3cWO09cgZbIIwg1t2YKdXYA67MYxYiTMAVfdnkDCMN9S5B3vHosRe07aORmoshoQ",
"validSignature": false,
"tags": ["high-s"]
},
{
"comment": "P-256 key and signature, with DER-encoded signature which is invalid in atproto",
"messageBase64": "oWVoZWxsb2V3b3JsZA",
"algorithm": "ES256",
"didDocSuite": "EcdsaSecp256r1VerificationKey2019",
"publicKeyDid": "did:key:zDnaeT6hL2RnTdUhAPLij1QBkhYZnmuKyM7puQLW1tkF4Zkt8",
"publicKeyMultibase": "ze8N2PPxnu19hmBQ58t5P3E9Yj6CqakJmTVCaKvf9Byq2",
"signatureBase64": "MEQCIFxYelWJ9lNcAVt+jK0y/T+DC/X4ohFZ+m8f9SEItkY1AiACX7eXz5sgtaRrz/SdPR8kprnbHMQVde0T2R8yOTBweA",
"validSignature": false,
"tags": ["der-encoded"]
},
{
"comment": "K-256 key and signature, with DER-encoded signature which is invalid in atproto",
"messageBase64": "oWVoZWxsb2V3b3JsZA",
"algorithm": "ES256K",
"didDocSuite": "EcdsaSecp256k1VerificationKey2019",
"publicKeyDid": "did:key:zQ3shnriYMXc8wvkbJqfNWh5GXn2bVAeqTC92YuNbek4npqGF",
"publicKeyMultibase": "z22uZXWP8fdHXi4jyx8cCDiBf9qQTsAe6VcycoMQPfcMQX",
"signatureBase64": "MEUCIQCWumUqJqOCqInXF7AzhIRg2MhwRz2rWZcOEsOjPmNItgIgXJH7RnqfYY6M0eg33wU0sFYDlprwdOcpRn78Sz5ePgk",
"validSignature": false,
"tags": ["der-encoded"]
}
]
================================================
FILE: interop-test-files/crypto/w3c_didkey_K256.json
================================================
[
{
"privateKeyBytesHex": "9085d2bef69286a6cbb51623c8fa258629945cd55ca705cc4e66700396894e0c",
"publicDidKey": "did:key:zQ3shokFTS3brHcDQrn82RUDfCZESWL1ZdCEJwekUDPQiYBme"
},
{
"privateKeyBytesHex": "f0f4df55a2b3ff13051ea814a8f24ad00f2e469af73c363ac7e9fb999a9072ed",
"publicDidKey": "did:key:zQ3shtxV1FrJfhqE1dvxYRcCknWNjHc3c5X1y3ZSoPDi2aur2"
},
{
"privateKeyBytesHex": "6b0b91287ae3348f8c2f2552d766f30e3604867e34adc37ccbb74a8e6b893e02",
"publicDidKey": "did:key:zQ3shZc2QzApp2oymGvQbzP8eKheVshBHbU4ZYjeXqwSKEn6N"
},
{
"privateKeyBytesHex": "c0a6a7c560d37d7ba81ecee9543721ff48fea3e0fb827d42c1868226540fac15",
"publicDidKey": "did:key:zQ3shadCps5JLAHcZiuX5YUtWHHL8ysBJqFLWvjZDKAWUBGzy"
},
{
"privateKeyBytesHex": "175a232d440be1e0788f25488a73d9416c04b6f924bea6354bf05dd2f1a75133",
"publicDidKey": "did:key:zQ3shptjE6JwdkeKN4fcpnYQY3m9Cet3NiHdAfpvSUZBFoKBj"
}
]
================================================
FILE: interop-test-files/crypto/w3c_didkey_P256.json
================================================
[
{
"privateKeyBytesBase58": "9p4VRzdmhsnq869vQjVCTrRry7u4TtfRxhvBFJTGU2Cp",
"publicDidKey": "did:key:zDnaeTiq1PdzvZXUaMdezchcMJQpBdH2VN4pgrrEhMCCbmwSb"
}
]
================================================
FILE: interop-test-files/syntax/atidentifier_syntax_invalid.txt
================================================
# invalid handles
did:thing.test
did:thing
john-.test
john.0
john.-
xn--bcher-.tld
john..test
jo_hn.test
# invalid DIDs
did
didmethodval
method:did:val
did:method:
didmethod:val
did:methodval)
:did:method:val
did:method:val:
did:method:val%
DID:method:val
# other invalid stuff
email@example.com
@handle@example.com
@handle
blah
================================================
FILE: interop-test-files/syntax/atidentifier_syntax_valid.txt
================================================
# allows valid handles
XX.LCS.MIT.EDU
john.test
jan.test
a234567890123456789.test
john2.test
john-john.test
# allows valid DIDs
did:method:val
did:method:VAL
did:method:val123
did:method:123
did:method:val-two
================================================
FILE: interop-test-files/syntax/aturi_syntax_invalid.txt
================================================
# enforces spec basics
a://did:plc:asdf123
at//did:plc:asdf123
at:/a/did:plc:asdf123
at:/did:plc:asdf123
AT://did:plc:asdf123
http://did:plc:asdf123
://did:plc:asdf123
at:did:plc:asdf123
at:/did:plc:asdf123
at:///did:plc:asdf123
at://:/did:plc:asdf123
at:/ /did:plc:asdf123
at://did:plc:asdf123
at://did:plc:asdf123/
at://did:plc:asdf123
at://did:plc:asdf123/com.atproto.feed.post
at://did:plc:asdf123/com.atproto.feed.post#
at://did:plc:asdf123/com.atproto.feed.post#/
at://did:plc:asdf123/com.atproto.feed.post#/frag
at://did:plc:asdf123/com.atproto.feed.post#fr ag
//did:plc:asdf123
at://name
at://name.0
at://diD:plc:asdf123
at://did:plc:asdf123/com.atproto.feed.p@st
at://did:plc:asdf123/com.atproto.feed.p$st
at://did:plc:asdf123/com.atproto.feed.p%st
at://did:plc:asdf123/com.atproto.feed.p&st
at://did:plc:asdf123/com.atproto.feed.p()t
at://did:plc:asdf123/com.atproto.feed_post
at://did:plc:asdf123/-com.atproto.feed.post
at://did:plc:asdf@123/com.atproto.feed.post
at://DID:plc:asdf123
at://user.bsky.123
at://bsky
at://did:plc:
at://did:plc:
at://frag
# too long: 'at://did:plc:asdf123/com.atproto.feed.post/' + 'o'.repeat(8200)
at://did:plc:asdf123/com.atproto.feed.post/oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
# has specified behavior on edge cases
at://user.bsky.social//
at://user.bsky.social//com.atproto.feed.post
at://user.bsky.social/com.atproto.feed.post//
at://did:plc:asdf123/com.atproto.feed.post/asdf123/more/more',
at://did:plc:asdf123/short/stuff
at://did:plc:asdf123/12345
# enforces no trailing slashes
at://did:plc:asdf123/
at://user.bsky.social/
at://did:plc:asdf123/com.atproto.feed.post/
at://did:plc:asdf123/com.atproto.feed.post/record/
at://did:plc:asdf123/com.atproto.feed.post/record/#/frag
# enforces strict paths
at://did:plc:asdf123/com.atproto.feed.post/asdf123/asdf
# is very permissive about fragments
at://did:plc:asdf123#
at://did:plc:asdf123##
#at://did:plc:asdf123
at://did:plc:asdf123#/asdf#/asdf
# new less permissive about record keys for Lexicon use (with recordkey more specified)
at://did:plc:asdf123/com.atproto.feed.post/%23
at://did:plc:asdf123/com.atproto.feed.post/$@!*)(:,;~.sdf123
at://did:plc:asdf123/com.atproto.feed.post/~'sdf123")
at://did:plc:asdf123/com.atproto.feed.post/$
at://did:plc:asdf123/com.atproto.feed.post/@
at://did:plc:asdf123/com.atproto.feed.post/!
at://did:plc:asdf123/com.atproto.feed.post/*
at://did:plc:asdf123/com.atproto.feed.post/(
at://did:plc:asdf123/com.atproto.feed.post/,
at://did:plc:asdf123/com.atproto.feed.post/;
at://did:plc:asdf123/com.atproto.feed.post/abc%30123
at://did:plc:asdf123/com.atproto.feed.post/%30
at://did:plc:asdf123/com.atproto.feed.post/%3
at://did:plc:asdf123/com.atproto.feed.post/%
at://did:plc:asdf123/com.atproto.feed.post/%zz
at://did:plc:asdf123/com.atproto.feed.post/%%%
# disallow dot / double-dot
at://did:plc:asdf123/com.atproto.feed.post/.
at://did:plc:asdf123/com.atproto.feed.post/..
================================================
FILE: interop-test-files/syntax/aturi_syntax_valid.txt
================================================
# enforces spec basics
at://did:plc:asdf123
at://user.bsky.social
at://did:plc:asdf123/com.atproto.feed.post
at://did:plc:asdf123/com.atproto.feed.post/record
# very long: 'at://did:plc:asdf123/com.atproto.feed.post/' + 'o'.repeat(512)
at://did:plc:asdf123/com.atproto.feed.post/oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
# enforces no trailing slashes
at://did:plc:asdf123
at://user.bsky.social
at://did:plc:asdf123/com.atproto.feed.post
at://did:plc:asdf123/com.atproto.feed.post/record
# enforces strict paths
at://did:plc:asdf123/com.atproto.feed.post/asdf123
# is very permissive about record keys
at://did:plc:asdf123/com.atproto.feed.post/asdf123
at://did:plc:asdf123/com.atproto.feed.post/a
at://did:plc:asdf123/com.atproto.feed.post/asdf-123
at://did:abc:123
at://did:abc:123/io.nsid.someFunc/record-key
at://did:abc:123/io.nsid.someFunc/self.
at://did:abc:123/io.nsid.someFunc/lang:
at://did:abc:123/io.nsid.someFunc/:
at://did:abc:123/io.nsid.someFunc/-
at://did:abc:123/io.nsid.someFunc/_
at://did:abc:123/io.nsid.someFunc/~
at://did:abc:123/io.nsid.someFunc/...
at://did:plc:asdf123/com.atproto.feed.postV2
================================================
FILE: interop-test-files/syntax/datetime_parse_invalid.txt
================================================
# superficial syntax parses ok, but are not valid datetimes for semantic reasons (eg, "month zero")
1985-00-12T23:20:50.123Z
1985-04-00T23:20:50.123Z
1985-13-12T23:20:50.123Z
1985-04-12T25:20:50.123Z
1985-04-12T23:99:50.123Z
1985-04-12T23:20:61.123Z
================================================
FILE: interop-test-files/syntax/datetime_syntax_invalid.txt
================================================
# subtle changes to: 1985-04-12T23:20:50.123Z
1985-04-12T23:20:50.123z
01985-04-12T23:20:50.123Z
985-04-12T23:20:50.123Z
1985-04-12T23:20:50.Z
1985-04-32T23;20:50.123Z
1985-04-32T23;20:50.123Z
# en-dash and em-dash
1985—04-32T23;20:50.123Z
1985–04-32T23;20:50.123Z
# whitespace
1985-04-12T23:20:50.123Z
1985-04-12T23:20:50.123Z
1985-04-12T 23:20:50.123Z
# not enough zero padding
1985-4-12T23:20:50.123Z
1985-04-2T23:20:50.123Z
1985-04-12T3:20:50.123Z
1985-04-12T23:0:50.123Z
1985-04-12T23:20:5.123Z
# too much zero padding
01985-04-12T23:20:50.123Z
1985-004-12T23:20:50.123Z
1985-04-012T23:20:50.123Z
1985-04-12T023:20:50.123Z
1985-04-12T23:020:50.123Z
1985-04-12T23:20:050.123Z
# strict capitalization (ISO-8601)
1985-04-12t23:20:50.123Z
1985-04-12T23:20:50.123z
# RFC-3339, but not ISO-8601
1985-04-12T23:20:50.123-00:00
1985-04-12_23:20:50.123Z
1985-04-12 23:20:50.123Z
# ISO-8601, but weird
1985-04-274T23:20:50.123Z
# timezone is required
1985-04-12T23:20:50.123
1985-04-12T23:20:50
1985-04-12
1985-04-12T23:20Z
1985-04-12T23:20:5Z
1985-04-12T23:20:50.123
+001985-04-12T23:20:50.123Z
23:20:50.123Z
1985-04-12T23:20:50.123+00
1985-04-12T23:20:50.123+00:0
1985-04-12T23:20:50.123+0:00
1985-04-12T23:20:50.123
1985-04-12T23:20:50.123+0000
1985-04-12T23:20:50.123+00
1985-04-12T23:20:50.123+
1985-04-12T23:20:50.123-
# ISO-8601, but normalizes to a negative time
0000-01-01T00:00:00+01:00
-000001-12-31T23:00:00.000Z
================================================
FILE: interop-test-files/syntax/datetime_syntax_valid.txt
================================================
# "preferred"
1985-04-12T23:20:50.123Z
1985-04-12T23:20:50.000Z
2000-01-01T00:00:00.000Z
1985-04-12T23:20:50.123456Z
1985-04-12T23:20:50.120Z
1985-04-12T23:20:50.120000Z
# "supported"
1985-04-12T23:20:50.1235678912345Z
1985-04-12T23:20:50.100Z
1985-04-12T23:20:50Z
1985-04-12T23:20:50.0Z
1985-04-12T23:20:50.123+00:00
1985-04-12T23:20:50.123-07:00
1985-04-12T23:20:50.123+07:00
1985-04-12T23:20:50.123+01:45
0985-04-12T23:20:50.123-07:00
1985-04-12T23:20:50.123-07:00
0123-01-01T00:00:00.000Z
# various precisions, up through at least 12 digits
1985-04-12T23:20:50.1Z
1985-04-12T23:20:50.12Z
1985-04-12T23:20:50.123Z
1985-04-12T23:20:50.1234Z
1985-04-12T23:20:50.12345Z
1985-04-12T23:20:50.123456Z
1985-04-12T23:20:50.1234567Z
1985-04-12T23:20:50.12345678Z
1985-04-12T23:20:50.123456789Z
1985-04-12T23:20:50.1234567890Z
1985-04-12T23:20:50.12345678901Z
1985-04-12T23:20:50.123456789012Z
# extreme but currently allowed
0010-12-31T23:00:00.000Z
1000-12-31T23:00:00.000Z
1900-12-31T23:00:00.000Z
3001-12-31T23:00:00.000Z
================================================
FILE: interop-test-files/syntax/did_syntax_invalid.txt
================================================
did
didmethodval
method:did:val
did:method:
didmethod:val
did:methodval)
:did:method:val
did.method.val
did:method:val:
did:method:val%
DID:method:val
did:METHOD:val
did:m123:val
did:method:val/two
did:method:val?two
did:method:val#two
did:method:val%
did:method:vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
================================================
FILE: interop-test-files/syntax/did_syntax_valid.txt
================================================
did:method:val
did:method:VAL
did:method:val123
did:method:123
did:method:val-two
did:method:val_two
did:method:val.two
did:method:val:two
did:method:val%BB
did:method:vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
did:m:v
did:method::::val
did:method:-
did:method:-:_:.:%ab
did:method:.
did:method:_
did:method::.
# allows some real DID values
did:onion:2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid
did:example:123456789abcdefghi
did:plc:7iza6de2dwap2sbkpav7c6c6
did:web:example.com
did:web:localhost%3A1234
did:key:zQ3shZc2QzApp2oymGvQbzP8eKheVshBHbU4ZYjeXqwSKEn6N
did:ethr:0xb9c5714089478a327f09197987f16f9e5d936e8a
================================================
FILE: interop-test-files/syntax/handle_syntax_invalid.txt
================================================
# throws on invalid handles
did:thing.test
did:thing
john-.test
john.0
john.-
xn--bcher-.tld
john..test
jo_hn.test
-john.test
.john.test
jo!hn.test
jo%hn.test
jo&hn.test
jo@hn.test
jo*hn.test
jo|hn.test
jo:hn.test
jo/hn.test
john💩.test
bücher.test
john .test
john.test.
john
john.
.john
john.test.
.john.test
john.test
john.test
joh-.test
john.-est
john.tes-
# max over all handle: 'shoooort' + '.loooooooooooooooooooooooooong'.repeat(9) + '.test'
shoooort.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.test
# max segment: 'short.' + 'o'.repeat(64) + '.test'
short.oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.test
# throws on "dotless" TLD handles
org
ai
gg
io
# correctly validates corner cases (modern vs. old RFCs)
cn.8
thing.0aa
thing.0aa
# does not allow IP addresses as handles
127.0.0.1
192.168.0.142
fe80::7325:8a97:c100:94b
2600:3c03::f03c:9100:feb0:af1f
# examples from stackoverflow
-notvalid.at-all
-thing.com
www.masełkowski.pl.com
================================================
FILE: interop-test-files/syntax/handle_syntax_valid.txt
================================================
# allows valid handles
A.ISI.EDU
XX.LCS.MIT.EDU
SRI-NIC.ARPA
john.test
jan.test
a234567890123456789.test
john2.test
john-john.test
john.bsky.app
jo.hn
a.co
a.org
joh.n
j0.h0
jaymome-johnber123456.test
jay.mome-johnber123456.test
john.test.bsky.app
# max over all handle: 'shoooort' + '.loooooooooooooooooooooooooong'.repeat(8) + '.test'
shoooort.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.loooooooooooooooooooooooooong.test
# max segment: 'short.' + 'o'.repeat(63) + '.test'
short.ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.test
# NOTE: this probably isn't ever going to be a real domain, but my read of the RFC is that it would be possible
john.t
# allows .local and .arpa handles (proto-level)
laptop.local
laptop.arpa
# allows punycode handles
# 💩.test
xn--ls8h.test
# bücher.tld
xn--bcher-kva.tld
xn--3jk.com
xn--w3d.com
xn--vqb.com
xn--ppd.com
xn--cs9a.com
xn--8r9a.com
xn--cfd.com
xn--5jk.com
xn--2lb.com
# allows onion (Tor) handles
expyuzz4wqqyqhjn.onion
friend.expyuzz4wqqyqhjn.onion
g2zyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion
friend.g2zyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion
friend.g2zyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion
2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion
friend.2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion
# correctly validates corner cases (modern vs. old RFCs)
12345.test
8.cn
4chan.org
4chan.o-g
blah.4chan.org
thing.a01
120.0.0.1.com
0john.test
9sta--ck.com
99stack.com
0ohn.test
john.t--t
thing.0aa.thing
# examples from stackoverflow
stack.com
sta-ck.com
sta---ck.com
sta--ck9.com
stack99.com
sta99ck.com
google.com.uk
google.co.in
google.com
maselkowski.pl
m.maselkowski.pl
xn--masekowski-d0b.pl
xn--fiqa61au8b7zsevnm8ak20mc4a87e.xn--fiqs8s
xn--stackoverflow.com
stackoverflow.xn--com
stackoverflow.co.uk
xn--masekowski-d0b.pl
xn--fiqa61au8b7zsevnm8ak20mc4a87e.xn--fiqs8s
================================================
FILE: interop-test-files/syntax/nsid_syntax_invalid.txt
================================================
# length checks
com.oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.foo
com.example.oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
com.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.foo
# invalid examples
com.example.foo.*
com.example.foo.blah*
com.example.foo.*blah
com.exa💩ple.thing
a-0.b-1.c-3
a-0.b-1.c-o
1.0.0.127.record
0two.example.foo
example.com
com.example
a.
.one.two.three
one.two.three
one.two..three
one .two.three
one.two.three
com.exa💩ple.thing
com.atproto.feed.p@st
com.atproto.feed.p_st
com.atproto.feed.p*st
com.atproto.feed.po#t
com.atproto.feed.p!ot
com.example-.foo
com.example.fooBar.2
================================================
FILE: interop-test-files/syntax/nsid_syntax_valid.txt
================================================
# length checks
com.ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.foo
com.example.ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
com.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.middle.foo
# valid examples
com.example.fooBar
com.example.fooBarV2
net.users.bob.ping
a.b.c
m.xn--masekowski-d0b.pl
one.two.three
one.two.three.four-and.FiVe
one.2.three
a-0.b-1.c
a0.b1.cc
cn.8.lex.stuff
test.12345.record
a01.thing.record
a.0.c
xn--fiqs8s.xn--fiqa61au8b7zsevnm8ak20mc4a87e.record.two
a0.b1.c3
com.example.f00
# allows onion (Tor) NSIDs
onion.expyuzz4wqqyqhjn.spec.getThing
onion.g2zyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.lex.deleteThing
# allows starting-with-numeric segments (same as domains)
org.4chan.lex.getThing
cn.8.lex.stuff
onion.2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.lex.deleteThing
================================================
FILE: interop-test-files/syntax/recordkey_syntax_invalid.txt
================================================
# specs
alpha/beta
.
..
#extra
@handle
any space
any+space
number[3]
number(3)
"quote"
dHJ1ZQ==
# too long: 'o'.repeat(513)
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
================================================
FILE: interop-test-files/syntax/recordkey_syntax_valid.txt
================================================
# specs
self
example.com
~1.2-3_
dHJ1ZQ
_
literal:self
pre:fix
# more corner-cases
:
-
_
~
...
self.
lang:
:lang
# very long: 'o'.repeat(512)
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
================================================
FILE: interop-test-files/syntax/tid_syntax_invalid.txt
================================================
# not base32
3jzfcijpj2z21
0000000000000
# too long/short
3jzfcijpj2z2aa
3jzfcijpj2z2
# old dashes syntax not actually supported (TTTT-TTT-TTTT-CC)
3jzf-cij-pj2z-2a
# high bit can't be high
zzzzzzzzzzzzz
kjzfcijpj2z2a
================================================
FILE: interop-test-files/syntax/tid_syntax_valid.txt
================================================
# 13 digits
# 234567abcdefghijklmnopqrstuvwxyz
3jzfcijpj2z2a
7777777777777
3zzzzzzzzzzzz
================================================
FILE: jest.config.js
================================================
/** @type {import('jest').Config} */
module.exports = {
projects: ['<rootDir>/packages/*/jest.config.js'],
}
================================================
FILE: jest.setup.ts
================================================
import dotenv from 'dotenv'
dotenv.config({ path: './test.env' })
================================================
FILE: lexicons/app/bsky/actor/defs.json
================================================
{
"lexicon": 1,
"id": "app.bsky.actor.defs",
"defs": {
"profileViewBasic": {
"type": "object",
"required": ["did", "handle"],
"properties": {
"did": { "type": "string", "format": "did" },
"handle": { "type": "string", "format": "handle" },
"displayName": {
"type": "string",
"maxGraphemes": 64,
"maxLength": 640
},
"pronouns": { "type": "string" },
"avatar": { "type": "string", "format": "uri" },
"associated": {
"type": "ref",
"ref": "#profileAssociated"
},
"viewer": { "type": "ref", "ref": "#viewerState" },
"labels": {
"type": "array",
"items": { "type": "ref", "ref": "com.atproto.label.defs#label" }
},
"createdAt": { "type": "string", "format": "datetime" },
"verification": {
"type": "ref",
"ref": "#verificationState"
},
"status": {
"type": "ref",
"ref": "#statusView"
},
"debug": {
"type": "unknown",
"description": "Debug information for internal development"
}
}
},
"profileView": {
"type": "object",
"required": ["did", "handle"],
"properties": {
"did": { "type": "string", "format": "did" },
"handle": { "type": "string", "format": "handle" },
"displayName": {
"type": "string",
"maxGraphemes": 64,
"maxLength": 640
},
"pronouns": { "type": "string" },
"description": {
"type": "string",
"maxGraphemes": 256,
"maxLength": 2560
},
"avatar": { "type": "string", "format": "uri" },
"associated": {
"type": "ref",
"ref": "#profileAssociated"
},
"indexedAt": { "type": "string", "format": "datetime" },
"createdAt": { "type": "string", "format": "datetime" },
"viewer": { "type": "ref", "ref": "#viewerState" },
"labels": {
"type": "array",
"items": { "type": "ref", "ref": "com.atproto.label.defs#label" }
},
"verification": {
"type": "ref",
"ref": "#verificationState"
},
"status": {
"type": "ref",
"ref": "#statusView"
},
"debug": {
"type": "unknown",
"description": "Debug information for internal development"
}
}
},
"profileViewDetailed": {
"type": "object",
"required": ["did", "handle"],
"properties": {
"did": { "type": "string", "format": "did" },
"handle": { "type": "string", "format": "handle" },
"displayName": {
"type": "string",
"maxGraphemes": 64,
"maxLength": 640
},
"description": {
"type": "string",
"maxGraphemes": 256,
"maxLength": 2560
},
"pronouns": { "type": "string" },
"website": { "type": "string", "format": "uri" },
"avatar": { "type": "string", "format": "uri" },
"banner": { "type": "string", "format": "uri" },
"followersCount": { "type": "integer" },
"followsCount": { "type": "integer" },
"postsCount": { "type": "integer" },
"associated": {
"type": "ref",
"ref": "#profileAssociated"
},
"joinedViaStarterPack": {
"type": "ref",
"ref": "app.bsky.graph.defs#starterPackViewBasic"
},
"indexedAt": { "type": "string", "format": "datetime" },
"createdAt": { "type": "string", "format": "datetime" },
"viewer": { "type": "ref", "ref": "#viewerState" },
"labels": {
"type": "array",
"items": { "type": "ref", "ref": "com.atproto.label.defs#label" }
},
"pinnedPost": {
"type": "ref",
"ref": "com.atproto.repo.strongRef"
},
"verification": {
"type": "ref",
"ref": "#verificationState"
},
"status": {
"type": "ref",
"ref": "#statusView"
},
"debug": {
"type": "unknown",
"description": "Debug information for internal development"
}
}
},
"profileAssociated": {
"type": "object",
"properties": {
"lists": { "type": "integer" },
"feedgens": { "type": "integer" },
"starterPacks": { "type": "integer" },
"labeler": { "type": "boolean" },
"chat": { "type": "ref", "ref": "#profileAssociatedChat" },
"activitySubscription": {
"type": "ref",
"ref": "#profileAssociatedActivitySubscription"
},
"germ": { "type": "ref", "ref": "#profileAssociatedGerm" }
}
},
"profileAssociatedChat": {
"type": "object",
"required": ["allowIncoming"],
"properties": {
"allowIncoming": {
"type": "string",
"knownValues": ["all", "none", "following"]
}
}
},
"profileAssociatedGerm": {
"type": "object",
"required": ["showButtonTo", "messageMeUrl"],
"properties": {
"messageMeUrl": {
"type": "string",
"format": "uri"
},
"showButtonTo": {
"type": "string",
"knownValues": ["usersIFollow", "everyone"]
}
}
},
"profileAssociatedActivitySubscription": {
"type": "object",
"required": ["allowSubscriptions"],
"properties": {
"allowSubscriptions": {
"type": "string",
"knownValues": ["followers", "mutuals", "none"]
}
}
},
"viewerState": {
"type": "object",
"description": "Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests.",
"properties": {
"muted": { "type": "boolean" },
"mutedByList": {
"type": "ref",
"ref": "app.bsky.graph.defs#listViewBasic"
},
"blockedBy": { "type": "boolean" },
"blocking": { "type": "string", "format": "at-uri" },
"blockingByList": {
"type": "ref",
"ref": "app.bsky.graph.defs#listViewBasic"
},
"following": { "type": "string", "format": "at-uri" },
"followedBy": { "type": "string", "format": "at-uri" },
"knownFollowers": {
"description": "This property is present only in selected cases, as an optimization.",
"type": "ref",
"ref": "#knownFollowers"
},
"activitySubscription": {
"description": "This property is present only in selected cases, as an optimization.",
"type": "ref",
"ref": "app.bsky.notification.defs#activitySubscription"
}
}
},
"knownFollowers": {
"type": "object",
"description": "The subject's followers whom you also follow",
"required": ["count", "followers"],
"properties": {
"count": { "type": "integer" },
"followers": {
"type": "array",
"minLength": 0,
"maxLength": 5,
"items": {
"type": "ref",
"ref": "#profileViewBasic"
}
}
}
},
"verificationState": {
"type": "object",
"description": "Represents the verification information about the user this object is attached to.",
"required": ["verifications", "verifiedStatus", "trustedVerifierStatus"],
"properties": {
"verifications": {
"type": "array",
"description": "All verifications issued by trusted verifiers on behalf of this user. Verifications by untrusted verifiers are not included.",
"items": { "type": "ref", "ref": "#verificationView" }
},
"verifiedStatus": {
"type": "string",
"description": "The user's status as a verified account.",
"knownValues": ["valid", "invalid", "none"]
},
"trustedVerifierStatus": {
"type": "string",
"description": "The user's status as a trusted verifier.",
"knownValues": ["valid", "invalid", "none"]
}
}
},
"verificationView": {
"type": "object",
"description": "An individual verification for an associated subject.",
"required": ["issuer", "uri", "isValid", "createdAt"],
"properties": {
"issuer": {
"type": "string",
"description": "The user who issued this verification.",
"format": "did"
},
"uri": {
"type": "string",
"description": "The AT-URI of the verification record.",
"format": "at-uri"
},
"isValid": {
"type": "boolean",
"description": "True if the verification passes validation, otherwise false."
},
"createdAt": {
"type": "string",
"description": "Timestamp when the verification was created.",
"format": "datetime"
}
}
},
"preferences": {
"type": "array",
"items": {
"type": "union",
"refs": [
"#adultContentPref",
"#contentLabelPref",
"#savedFeedsPref",
"#savedFeedsPrefV2",
"#personalDetailsPref",
"#declaredAgePref",
"#feedViewPref",
"#threadViewPref",
"#interestsPref",
"#mutedWordsPref",
"#hiddenPostsPref",
"#bskyAppStatePref",
"#labelersPref",
"#postInteractionSettingsPref",
"#verificationPrefs",
"#liveEventPreferences"
]
}
},
"adultContentPref": {
"type": "object",
"required": ["enabled"],
"properties": {
"enabled": { "type": "boolean", "default": false }
}
},
"contentLabelPref": {
"type": "object",
"required": ["label", "visibility"],
"properties": {
"labelerDid": {
"type": "string",
"description": "Which labeler does this preference apply to? If undefined, applies globally.",
"format": "did"
},
"label": { "type": "string" },
"visibility": {
"type": "string",
"knownValues": ["ignore", "show", "warn", "hide"]
}
}
},
"savedFeed": {
"type": "object",
"required": ["id", "type", "value", "pinned"],
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string",
"knownValues": ["feed", "list", "timeline"]
},
"value": {
"type": "string"
},
"pinned": {
"type": "boolean"
}
}
},
"savedFeedsPrefV2": {
"type": "object",
"required": ["items"],
"properties": {
"items": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.actor.defs#savedFeed"
}
}
}
},
"savedFeedsPref": {
"type": "object",
"required": ["pinned", "saved"],
"properties": {
"pinned": {
"type": "array",
"items": {
"type": "string",
"format": "at-uri"
}
},
"saved": {
"type": "array",
"items": {
"type": "string",
"format": "at-uri"
}
},
"timelineIndex": {
"type": "integer"
}
}
},
"personalDetailsPref": {
"type": "object",
"properties": {
"birthDate": {
"type": "string",
"format": "datetime",
"description": "The birth date of account owner."
}
}
},
"declaredAgePref": {
"type": "object",
"description": "Read-only preference containing value(s) inferred from the user's declared birthdate. Absence of this preference object in the response indicates that the user has not made a declaration.",
"properties": {
"isOverAge13": {
"type": "boolean",
"description": "Indicates if the user has declared that they are over 13 years of age."
},
"isOverAge16": {
"type": "boolean",
"description": "Indicates if the user has declared that they are over 16 years of age."
},
"isOverAge18": {
"type": "boolean",
"description": "Indicates if the user has declared that they are over 18 years of age."
}
}
},
"feedViewPref": {
"type": "object",
"required": ["feed"],
"properties": {
"feed": {
"type": "string",
"description": "The URI of the feed, or an identifier which describes the feed."
},
"hideReplies": {
"type": "boolean",
"description": "Hide replies in the feed."
},
"hideRepliesByUnfollowed": {
"type": "boolean",
"description": "Hide replies in the feed if they are not by followed users.",
"default": true
},
"hideRepliesByLikeCount": {
"type": "integer",
"description": "Hide replies in the feed if they do not have this number of likes."
},
"hideReposts": {
"type": "boolean",
"description": "Hide reposts in the feed."
},
"hideQuotePosts": {
"type": "boolean",
"description": "Hide quote posts in the feed."
}
}
},
"threadViewPref": {
"type": "object",
"properties": {
"sort": {
"type": "string",
"description": "Sorting mode for threads.",
"knownValues": ["oldest", "newest", "most-likes", "random", "hotness"]
}
}
},
"interestsPref": {
"type": "object",
"required": ["tags"],
"properties": {
"tags": {
"type": "array",
"maxLength": 100,
"items": { "type": "string", "maxLength": 640, "maxGraphemes": 64 },
"description": "A list of tags which describe the account owner's interests gathered during onboarding."
}
}
},
"mutedWordTarget": {
"type": "string",
"knownValues": ["content", "tag"],
"maxLength": 640,
"maxGraphemes": 64
},
"mutedWord": {
"type": "object",
"description": "A word that the account owner has muted.",
"required": ["value", "targets"],
"properties": {
"id": { "type": "string" },
"value": {
"type": "string",
"description": "The muted word itself.",
"maxLength": 10000,
"maxGraphemes": 1000
},
"targets": {
"type": "array",
"description": "The intended targets of the muted word.",
"items": {
"type": "ref",
"ref": "app.bsky.actor.defs#mutedWordTarget"
}
},
"actorTarget": {
"type": "string",
"description": "Groups of users to apply the muted word to. If undefined, applies to all users.",
"knownValues": ["all", "exclude-following"],
"default": "all"
},
"expiresAt": {
"type": "string",
"format": "datetime",
"description": "The date and time at which the muted word will expire and no longer be applied."
}
}
},
"mutedWordsPref": {
"type": "object",
"required": ["items"],
"properties": {
"items": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.actor.defs#mutedWord"
},
"description": "A list of words the account owner has muted."
}
}
},
"hiddenPostsPref": {
"type": "object",
"required": ["items"],
"properties": {
"items": {
"type": "array",
"items": { "type": "string", "format": "at-uri" },
"description": "A list of URIs of posts the account owner has hidden."
}
}
},
"labelersPref": {
"type": "object",
"required": ["labelers"],
"properties": {
"labelers": {
"type": "array",
"items": {
"type": "ref",
"ref": "#labelerPrefItem"
}
}
}
},
"labelerPrefItem": {
"type": "object",
"required": ["did"],
"properties": {
"did": {
"type": "string",
"format": "did"
}
}
},
"bskyAppStatePref": {
"description": "A grab bag of state that's specific to the bsky.app program. Third-party apps shouldn't use this.",
"type": "object",
"properties": {
"activeProgressGuide": {
"type": "ref",
"ref": "#bskyAppProgressGuide"
},
"queuedNudges": {
"description": "An array of tokens which identify nudges (modals, popups, tours, highlight dots) that should be shown to the user.",
"type": "array",
"maxLength": 1000,
"items": { "type": "string", "maxLength": 100 }
},
"nuxs": {
"description": "Storage for NUXs the user has encountered.",
"type": "array",
"maxLength": 100,
"items": {
"type": "ref",
"ref": "app.bsky.actor.defs#nux"
}
}
}
},
"bskyAppProgressGuide": {
"description": "If set, an active progress guide. Once completed, can be set to undefined. Should have unspecced fields tracking progress.",
"type": "object",
"required": ["guide"],
"properties": {
"guide": { "type": "string", "maxLength": 100 }
}
},
"nux": {
"type": "object",
"description": "A new user experiences (NUX) storage object",
"required": ["id", "completed"],
"properties": {
"id": {
"type": "string",
"maxLength": 100
},
"completed": {
"type": "boolean",
"default": false
},
"data": {
"description": "Arbitrary data for the NUX. The structure is defined by the NUX itself. Limited to 300 characters.",
"type": "string",
"maxLength": 3000,
"maxGraphemes": 300
},
"expiresAt": {
"type": "string",
"format": "datetime",
"description": "The date and time at which the NUX will expire and should be considered completed."
}
}
},
"verificationPrefs": {
"type": "object",
"description": "Preferences for how verified accounts appear in the app.",
"required": [],
"properties": {
"hideBadges": {
"description": "Hide the blue check badges for verified accounts and trusted verifiers.",
"type": "boolean",
"default": false
}
}
},
"liveEventPreferences": {
"type": "object",
"description": "Preferences for live events.",
"properties": {
"hiddenFeedIds": {
"description": "A list of feed IDs that the user has hidden from live events.",
"type": "array",
"items": { "type": "string" }
},
"hideAllFeeds": {
"description": "Whether to hide all feeds from live events.",
"type": "boolean",
"default": false
}
}
},
"postInteractionSettingsPref": {
"type": "object",
"description": "Default post interaction settings for the account. These values should be applied as default values when creating new posts. These refs should mirror the threadgate and postgate records exactly.",
"required": [],
"properties": {
"threadgateAllowRules": {
"description": "Matches threadgate record. List of rules defining who can reply to this users posts. If value is an empty array, no one can reply. If value is undefined, anyone can reply.",
"type": "array",
"maxLength": 5,
"items": {
"type": "union",
"refs": [
"app.bsky.feed.threadgate#mentionRule",
"app.bsky.feed.threadgate#followerRule",
"app.bsky.feed.threadgate#followingRule",
"app.bsky.feed.threadgate#listRule"
]
}
},
"postgateEmbeddingRules": {
"description": "Matches postgate record. List of rules defining who can embed this users posts. If value is an empty array or is undefined, no particular rules apply and anyone can embed.",
"type": "array",
"maxLength": 5,
"items": {
"type": "union",
"refs": ["app.bsky.feed.postgate#disableRule"]
}
}
}
},
"statusView": {
"type": "object",
"required": ["status", "record"],
"properties": {
"uri": { "type": "string", "format": "at-uri" },
"cid": { "type": "string", "format": "cid" },
"status": {
"type": "string",
"description": "The status for the account.",
"knownValues": ["app.bsky.actor.status#live"]
},
"record": { "type": "unknown" },
"embed": {
"type": "union",
"description": "An optional embed associated with the status.",
"refs": ["app.bsky.embed.external#view"]
},
"expiresAt": {
"type": "string",
"description": "The date when this status will expire. The application might choose to no longer return the status after expiration.",
"format": "datetime"
},
"isActive": {
"type": "boolean",
"description": "True if the status is not expired, false if it is expired. Only present if expiration was set."
},
"isDisabled": {
"type": "boolean",
"description": "True if the user's go-live access has been disabled by a moderator, false otherwise."
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/actor/getPreferences.json
================================================
{
"lexicon": 1,
"id": "app.bsky.actor.getPreferences",
"defs": {
"main": {
"type": "query",
"description": "Get private preferences attached to the current account. Expected use is synchronization between multiple devices, and import/export during account migration. Requires auth.",
"parameters": {
"type": "params",
"properties": {}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["preferences"],
"properties": {
"preferences": {
"type": "ref",
"ref": "app.bsky.actor.defs#preferences"
}
}
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/actor/getProfile.json
================================================
{
"lexicon": 1,
"id": "app.bsky.actor.getProfile",
"defs": {
"main": {
"type": "query",
"description": "Get detailed profile view of an actor. Does not require auth, but contains relevant metadata with auth.",
"parameters": {
"type": "params",
"required": ["actor"],
"properties": {
"actor": {
"type": "string",
"format": "at-identifier",
"description": "Handle or DID of account to fetch profile of."
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "ref",
"ref": "app.bsky.actor.defs#profileViewDetailed"
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/actor/getProfiles.json
================================================
{
"lexicon": 1,
"id": "app.bsky.actor.getProfiles",
"defs": {
"main": {
"type": "query",
"description": "Get detailed profile views of multiple actors.",
"parameters": {
"type": "params",
"required": ["actors"],
"properties": {
"actors": {
"type": "array",
"items": { "type": "string", "format": "at-identifier" },
"maxLength": 25
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["profiles"],
"properties": {
"profiles": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.actor.defs#profileViewDetailed"
}
}
}
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/actor/getSuggestions.json
================================================
{
"lexicon": 1,
"id": "app.bsky.actor.getSuggestions",
"defs": {
"main": {
"type": "query",
"description": "Get a list of suggested actors. Expected use is discovery of accounts to follow during new account onboarding.",
"parameters": {
"type": "params",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
},
"cursor": { "type": "string" }
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["actors"],
"properties": {
"cursor": { "type": "string" },
"actors": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.actor.defs#profileView"
}
},
"recId": {
"type": "integer",
"description": "DEPRECATED: use recIdStr instead."
},
"recIdStr": {
"type": "string",
"description": "Snowflake for this recommendation, use when submitting recommendation events."
}
}
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/actor/profile.json
================================================
{
"lexicon": 1,
"id": "app.bsky.actor.profile",
"defs": {
"main": {
"type": "record",
"description": "A declaration of a Bluesky account profile.",
"key": "literal:self",
"record": {
"type": "object",
"properties": {
"displayName": {
"type": "string",
"maxGraphemes": 64,
"maxLength": 640
},
"description": {
"type": "string",
"description": "Free-form profile description text.",
"maxGraphemes": 256,
"maxLength": 2560
},
"pronouns": {
"type": "string",
"description": "Free-form pronouns text.",
"maxGraphemes": 20,
"maxLength": 200
},
"website": { "type": "string", "format": "uri" },
"avatar": {
"type": "blob",
"description": "Small image to be displayed next to posts from account. AKA, 'profile picture'",
"accept": ["image/png", "image/jpeg"],
"maxSize": 1000000
},
"banner": {
"type": "blob",
"description": "Larger horizontal image to display behind profile view.",
"accept": ["image/png", "image/jpeg"],
"maxSize": 1000000
},
"labels": {
"type": "union",
"description": "Self-label values, specific to the Bluesky application, on the overall account.",
"refs": ["com.atproto.label.defs#selfLabels"]
},
"joinedViaStarterPack": {
"type": "ref",
"ref": "com.atproto.repo.strongRef"
},
"pinnedPost": {
"type": "ref",
"ref": "com.atproto.repo.strongRef"
},
"createdAt": { "type": "string", "format": "datetime" }
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/actor/putPreferences.json
================================================
{
"lexicon": 1,
"id": "app.bsky.actor.putPreferences",
"defs": {
"main": {
"type": "procedure",
"description": "Set the private preferences attached to the account.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["preferences"],
"properties": {
"preferences": {
"type": "ref",
"ref": "app.bsky.actor.defs#preferences"
}
}
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/actor/searchActors.json
================================================
{
"lexicon": 1,
"id": "app.bsky.actor.searchActors",
"defs": {
"main": {
"type": "query",
"description": "Find actors (profiles) matching search criteria. Does not require auth.",
"parameters": {
"type": "params",
"properties": {
"term": {
"type": "string",
"description": "DEPRECATED: use 'q' instead."
},
"q": {
"type": "string",
"description": "Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"cursor": { "type": "string" }
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["actors"],
"properties": {
"cursor": { "type": "string" },
"actors": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.actor.defs#profileView"
}
}
}
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/actor/searchActorsTypeahead.json
================================================
{
"lexicon": 1,
"id": "app.bsky.actor.searchActorsTypeahead",
"defs": {
"main": {
"type": "query",
"description": "Find actor suggestions for a prefix search term. Expected use is for auto-completion during text field entry. Does not require auth.",
"parameters": {
"type": "params",
"properties": {
"term": {
"type": "string",
"description": "DEPRECATED: use 'q' instead."
},
"q": {
"type": "string",
"description": "Search query prefix; not a full query string."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 10
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["actors"],
"properties": {
"actors": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.actor.defs#profileViewBasic"
}
}
}
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/actor/status.json
================================================
{
"lexicon": 1,
"id": "app.bsky.actor.status",
"defs": {
"main": {
"type": "record",
"description": "A declaration of a Bluesky account status.",
"key": "literal:self",
"record": {
"type": "object",
"required": ["status", "createdAt"],
"properties": {
"status": {
"type": "string",
"description": "The status for the account.",
"knownValues": ["app.bsky.actor.status#live"]
},
"embed": {
"type": "union",
"description": "An optional embed associated with the status.",
"refs": ["app.bsky.embed.external"]
},
"durationMinutes": {
"type": "integer",
"description": "The duration of the status in minutes. Applications can choose to impose minimum and maximum limits.",
"minimum": 1
},
"createdAt": { "type": "string", "format": "datetime" }
}
}
},
"live": {
"type": "token",
"description": "Advertises an account as currently offering live content."
}
}
}
================================================
FILE: lexicons/app/bsky/ageassurance/begin.json
================================================
{
"lexicon": 1,
"id": "app.bsky.ageassurance.begin",
"defs": {
"main": {
"type": "procedure",
"description": "Initiate Age Assurance for an account.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["email", "language", "countryCode"],
"properties": {
"email": {
"type": "string",
"description": "The user's email address to receive Age Assurance instructions."
},
"language": {
"type": "string",
"description": "The user's preferred language for communication during the Age Assurance process."
},
"countryCode": {
"type": "string",
"description": "An ISO 3166-1 alpha-2 code of the user's location."
},
"regionCode": {
"type": "string",
"description": "An optional ISO 3166-2 code of the user's region or state within the country."
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "ref",
"ref": "app.bsky.ageassurance.defs#state"
}
},
"errors": [
{ "name": "InvalidEmail" },
{ "name": "DidTooLong" },
{ "name": "InvalidInitiation" },
{ "name": "RegionNotSupported" }
]
}
}
}
================================================
FILE: lexicons/app/bsky/ageassurance/defs.json
================================================
{
"lexicon": 1,
"id": "app.bsky.ageassurance.defs",
"defs": {
"access": {
"description": "The access level granted based on Age Assurance data we've processed.",
"type": "string",
"knownValues": ["unknown", "none", "safe", "full"]
},
"status": {
"type": "string",
"description": "The status of the Age Assurance process.",
"knownValues": ["unknown", "pending", "assured", "blocked"]
},
"state": {
"type": "object",
"description": "The user's computed Age Assurance state.",
"required": ["status", "access"],
"properties": {
"lastInitiatedAt": {
"type": "string",
"format": "datetime",
"description": "The timestamp when this state was last updated."
},
"status": {
"type": "ref",
"ref": "app.bsky.ageassurance.defs#status"
},
"access": {
"type": "ref",
"ref": "app.bsky.ageassurance.defs#access"
}
}
},
"stateMetadata": {
"type": "object",
"description": "Additional metadata needed to compute Age Assurance state client-side.",
"required": [],
"properties": {
"accountCreatedAt": {
"type": "string",
"format": "datetime",
"description": "The account creation timestamp."
}
}
},
"config": {
"type": "object",
"description": "",
"required": ["regions"],
"properties": {
"regions": {
"type": "array",
"description": "The per-region Age Assurance configuration.",
"items": {
"type": "ref",
"ref": "app.bsky.ageassurance.defs#configRegion"
}
}
}
},
"configRegion": {
"type": "object",
"description": "The Age Assurance configuration for a specific region.",
"required": ["countryCode", "minAccessAge", "rules"],
"properties": {
"countryCode": {
"type": "string",
"description": "The ISO 3166-1 alpha-2 country code this configuration applies to."
},
"regionCode": {
"type": "string",
"description": "The ISO 3166-2 region code this configuration applies to. If omitted, the configuration applies to the entire country."
},
"minAccessAge": {
"type": "integer",
"description": "The minimum age (as a whole integer) required to use Bluesky in this region."
},
"rules": {
"type": "array",
"description": "The ordered list of Age Assurance rules that apply to this region. Rules should be applied in order, and the first matching rule determines the access level granted. The rules array should always include a default rule as the last item.",
"items": {
"type": "union",
"refs": [
"#configRegionRuleDefault",
"#configRegionRuleIfDeclaredOverAge",
"#configRegionRuleIfDeclaredUnderAge",
"#configRegionRuleIfAssuredOverAge",
"#configRegionRuleIfAssuredUnderAge",
"#configRegionRuleIfAccountNewerThan",
"#configRegionRuleIfAccountOlderThan"
]
}
}
}
},
"configRegionRuleDefault": {
"type": "object",
"description": "Age Assurance rule that applies by default.",
"required": ["access"],
"properties": {
"access": {
"type": "ref",
"ref": "app.bsky.ageassurance.defs#access"
}
}
},
"configRegionRuleIfDeclaredOverAge": {
"type": "object",
"description": "Age Assurance rule that applies if the user has declared themselves equal-to or over a certain age.",
"required": ["age", "access"],
"properties": {
"age": {
"type": "integer",
"description": "The age threshold as a whole integer."
},
"access": {
"type": "ref",
"ref": "app.bsky.ageassurance.defs#access"
}
}
},
"configRegionRuleIfDeclaredUnderAge": {
"type": "object",
"description": "Age Assurance rule that applies if the user has declared themselves under a certain age.",
"required": ["age", "access"],
"properties": {
"age": {
"type": "integer",
"description": "The age threshold as a whole integer."
},
"access": {
"type": "ref",
"ref": "app.bsky.ageassurance.defs#access"
}
}
},
"configRegionRuleIfAssuredOverAge": {
"type": "object",
"description": "Age Assurance rule that applies if the user has been assured to be equal-to or over a certain age.",
"required": ["age", "access"],
"properties": {
"age": {
"type": "integer",
"description": "The age threshold as a whole integer."
},
"access": {
"type": "ref",
"ref": "app.bsky.ageassurance.defs#access"
}
}
},
"configRegionRuleIfAssuredUnderAge": {
"type": "object",
"description": "Age Assurance rule that applies if the user has been assured to be under a certain age.",
"required": ["age", "access"],
"properties": {
"age": {
"type": "integer",
"description": "The age threshold as a whole integer."
},
"access": {
"type": "ref",
"ref": "app.bsky.ageassurance.defs#access"
}
}
},
"configRegionRuleIfAccountNewerThan": {
"type": "object",
"description": "Age Assurance rule that applies if the account is equal-to or newer than a certain date.",
"required": ["date", "access"],
"properties": {
"date": {
"type": "string",
"format": "datetime",
"description": "The date threshold as a datetime string."
},
"access": {
"type": "ref",
"ref": "app.bsky.ageassurance.defs#access"
}
}
},
"configRegionRuleIfAccountOlderThan": {
"type": "object",
"description": "Age Assurance rule that applies if the account is older than a certain date.",
"required": ["date", "access"],
"properties": {
"date": {
"type": "string",
"format": "datetime",
"description": "The date threshold as a datetime string."
},
"access": {
"type": "ref",
"ref": "app.bsky.ageassurance.defs#access"
}
}
},
"event": {
"type": "object",
"description": "Object used to store Age Assurance data in stash.",
"required": ["createdAt", "status", "access", "attemptId", "countryCode"],
"properties": {
"createdAt": {
"type": "string",
"format": "datetime",
"description": "The date and time of this write operation."
},
"attemptId": {
"type": "string",
"description": "The unique identifier for this instance of the Age Assurance flow, in UUID format."
},
"status": {
"type": "string",
"description": "The status of the Age Assurance process.",
"knownValues": ["unknown", "pending", "assured", "blocked"]
},
"access": {
"description": "The access level granted based on Age Assurance data we've processed.",
"type": "string",
"knownValues": ["unknown", "none", "safe", "full"]
},
"countryCode": {
"type": "string",
"description": "The ISO 3166-1 alpha-2 country code provided when beginning the Age Assurance flow."
},
"regionCode": {
"type": "string",
"description": "The ISO 3166-2 region code provided when beginning the Age Assurance flow."
},
"email": {
"type": "string",
"description": "The email used for Age Assurance."
},
"initIp": {
"type": "string",
"description": "The IP address used when initiating the Age Assurance flow."
},
"initUa": {
"type": "string",
"description": "The user agent used when initiating the Age Assurance flow."
},
"completeIp": {
"type": "string",
"description": "The IP address used when completing the Age Assurance flow."
},
"completeUa": {
"type": "string",
"description": "The user agent used when completing the Age Assurance flow."
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/ageassurance/getConfig.json
================================================
{
"lexicon": 1,
"id": "app.bsky.ageassurance.getConfig",
"defs": {
"main": {
"type": "query",
"description": "Returns Age Assurance configuration for use on the client.",
"output": {
"encoding": "application/json",
"schema": {
"type": "ref",
"ref": "app.bsky.ageassurance.defs#config"
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/ageassurance/getState.json
================================================
{
"lexicon": 1,
"id": "app.bsky.ageassurance.getState",
"defs": {
"main": {
"type": "query",
"description": "Returns server-computed Age Assurance state, if available, and any additional metadata needed to compute Age Assurance state client-side.",
"parameters": {
"type": "params",
"required": ["countryCode"],
"properties": {
"countryCode": { "type": "string" },
"regionCode": { "type": "string" }
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["state", "metadata"],
"properties": {
"state": {
"type": "ref",
"ref": "app.bsky.ageassurance.defs#state"
},
"metadata": {
"type": "ref",
"ref": "app.bsky.ageassurance.defs#stateMetadata"
}
}
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/authCreatePosts.json
================================================
{
"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"
]
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/authDeleteContent.json
================================================
{
"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"
]
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/authFullApp.json
================================================
{
"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"
]
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/authManageFeedDeclarations.json
================================================
{
"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"]
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/authManageLabelerService.json
================================================
{
"lexicon": 1,
"id": "app.bsky.authManageLabelerService",
"defs": {
"main": {
"type": "permission-set",
"title": "Manage Hosted Labeling Service",
"title:lang": {},
"detail": "Configure labeler declaration records.",
"detail:lang": {},
"permissions": [
{
"type": "permission",
"resource": "repo",
"action": ["create", "update", "delete"],
"collection": ["app.bsky.labeler.service"]
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/authManageModeration.json
================================================
{
"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"]
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/authManageNotifications.json
================================================
{
"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"
]
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/authManageProfile.json
================================================
{
"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"
]
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/authViewAll.json
================================================
{
"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"
]
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/bookmark/createBookmark.json
================================================
{
"lexicon": 1,
"id": "app.bsky.bookmark.createBookmark",
"defs": {
"main": {
"type": "procedure",
"description": "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": ["uri", "cid"],
"properties": {
"uri": { "type": "string", "format": "at-uri" },
"cid": { "type": "string", "format": "cid" }
}
}
},
"errors": [
{
"name": "UnsupportedCollection",
"description": "The URI to be bookmarked is for an unsupported collection."
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/bookmark/defs.json
================================================
{
"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": "com.atproto.repo.strongRef"
}
}
},
"bookmarkView": {
"type": "object",
"required": ["subject", "item"],
"properties": {
"subject": {
"description": "A strong ref to the bookmarked record.",
"type": "ref",
"ref": "com.atproto.repo.strongRef"
},
"createdAt": { "type": "string", "format": "datetime" },
"item": {
"type": "union",
"refs": [
"app.bsky.feed.defs#blockedPost",
"app.bsky.feed.defs#notFoundPost",
"app.bsky.feed.defs#postView"
]
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/bookmark/deleteBookmark.json
================================================
{
"lexicon": 1,
"id": "app.bsky.bookmark.deleteBookmark",
"defs": {
"main": {
"type": "procedure",
"description": "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": ["uri"],
"properties": {
"uri": { "type": "string", "format": "at-uri" }
}
}
},
"errors": [
{
"name": "UnsupportedCollection",
"description": "The URI to be bookmarked is for an unsupported collection."
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/bookmark/getBookmarks.json
================================================
{
"lexicon": 1,
"id": "app.bsky.bookmark.getBookmarks",
"defs": {
"main": {
"type": "query",
"description": "Gets views of records bookmarked by the authenticated user. Requires authentication.",
"parameters": {
"type": "params",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
},
"cursor": { "type": "string" }
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["bookmarks"],
"properties": {
"cursor": { "type": "string" },
"bookmarks": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.bookmark.defs#bookmarkView"
}
}
}
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/contact/defs.json
================================================
{
"lexicon": 1,
"id": "app.bsky.contact.defs",
"defs": {
"matchAndContactIndex": {
"description": "Associates a profile with the positional index of the contact import input in the call to `app.bsky.contact.importContacts`, so clients can know which phone caused a particular match.",
"type": "object",
"required": ["match", "contactIndex"],
"properties": {
"match": {
"description": "Profile of the matched user.",
"type": "ref",
"ref": "app.bsky.actor.defs#profileView"
},
"contactIndex": {
"description": "The index of this match in the import contact input.",
"type": "integer",
"minimum": 0,
"maximum": 999
}
}
},
"syncStatus": {
"type": "object",
"required": ["syncedAt", "matchesCount"],
"properties": {
"syncedAt": {
"description": "Last date when contacts where imported.",
"type": "string",
"format": "datetime"
},
"matchesCount": {
"description": "Number of existing contact matches resulting of the user imports and of their imported contacts having imported the user. Matches stop being counted when the user either follows the matched contact or dismisses the match.",
"type": "integer",
"minimum": 0
}
}
},
"notification": {
"description": "A stash object to be sent via bsync representing a notification to be created.",
"type": "object",
"required": ["from", "to"],
"properties": {
"from": {
"description": "The DID of who this notification comes from.",
"type": "string",
"format": "did"
},
"to": {
"description": "The DID of who this notification should go to.",
"type": "string",
"format": "did"
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/contact/dismissMatch.json
================================================
{
"lexicon": 1,
"id": "app.bsky.contact.dismissMatch",
"defs": {
"main": {
"type": "procedure",
"description": "Removes a match that was found via contact import. It shouldn't appear again if the same contact is re-imported. Requires authentication.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["subject"],
"properties": {
"subject": {
"description": "The subject's DID to dismiss the match with.",
"type": "string",
"format": "did"
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"properties": {}
}
},
"errors": [
{
"name": "InvalidDid"
},
{
"name": "InternalError"
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/contact/getMatches.json
================================================
{
"lexicon": 1,
"id": "app.bsky.contact.getMatches",
"defs": {
"main": {
"type": "query",
"description": "Returns the matched contacts (contacts that were mutually imported). Excludes dismissed matches. Requires authentication.",
"parameters": {
"type": "params",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
},
"cursor": { "type": "string" }
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["matches"],
"properties": {
"cursor": { "type": "string" },
"matches": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.actor.defs#profileView"
}
}
}
}
},
"errors": [
{
"name": "InvalidDid"
},
{
"name": "InvalidLimit"
},
{
"name": "InvalidCursor"
},
{
"name": "InternalError"
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/contact/getSyncStatus.json
================================================
{
"lexicon": 1,
"id": "app.bsky.contact.getSyncStatus",
"defs": {
"main": {
"type": "query",
"description": "Gets the user's current contact import status. Requires authentication.",
"parameters": {
"type": "params",
"properties": {}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"properties": {
"syncStatus": {
"description": "If present, indicates the user has imported their contacts. If not present, indicates the user never used the feature or called `app.bsky.contact.removeData` and didn't import again since.",
"type": "ref",
"ref": "app.bsky.contact.defs#syncStatus"
}
}
}
},
"errors": [
{
"name": "InvalidDid"
},
{
"name": "InternalError"
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/contact/importContacts.json
================================================
{
"lexicon": 1,
"id": "app.bsky.contact.importContacts",
"defs": {
"main": {
"type": "procedure",
"description": "Import contacts for securely matching with other users. This follows the protocol explained in https://docs.bsky.app/blog/contact-import-rfc. Requires authentication.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["token", "contacts"],
"properties": {
"token": {
"description": "JWT to authenticate the call. Use the JWT received as a response to the call to `app.bsky.contact.verifyPhone`.",
"type": "string"
},
"contacts": {
"description": "List of phone numbers in global E.164 format (e.g., '+12125550123'). Phone numbers that cannot be normalized into a valid phone number will be discarded. Should not repeat the 'phone' input used in `app.bsky.contact.verifyPhone`.",
"type": "array",
"items": {
"type": "string"
},
"minLength": 1,
"maxLength": 1000
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["matchesAndContactIndexes"],
"properties": {
"matchesAndContactIndexes": {
"description": "The users that matched during import and their indexes on the input contacts, so the client can correlate with its local list.",
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.contact.defs#matchAndContactIndex"
}
}
}
}
},
"errors": [
{
"name": "InvalidDid"
},
{
"name": "InvalidContacts"
},
{
"name": "TooManyContacts"
},
{
"name": "InvalidToken"
},
{
"name": "InternalError"
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/contact/removeData.json
================================================
{
"lexicon": 1,
"id": "app.bsky.contact.removeData",
"defs": {
"main": {
"type": "procedure",
"description": "Removes all stored hashes used for contact matching, existing matches, and sync status. Requires authentication.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"properties": {}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"properties": {}
}
},
"errors": [
{
"name": "InvalidDid"
},
{
"name": "InternalError"
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/contact/sendNotification.json
================================================
{
"lexicon": 1,
"id": "app.bsky.contact.sendNotification",
"defs": {
"main": {
"type": "procedure",
"description": "System endpoint to send notifications related to contact imports. Requires role authentication.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["from", "to"],
"properties": {
"from": {
"description": "The DID of who this notification comes from.",
"type": "string",
"format": "did"
},
"to": {
"description": "The DID of who this notification should go to.",
"type": "string",
"format": "did"
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"properties": {}
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/contact/startPhoneVerification.json
================================================
{
"lexicon": 1,
"id": "app.bsky.contact.startPhoneVerification",
"defs": {
"main": {
"type": "procedure",
"description": "Starts a phone verification flow. The phone passed will receive a code via SMS that should be passed to `app.bsky.contact.verifyPhone`. Requires authentication.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["phone"],
"properties": {
"phone": {
"description": "The phone number to receive the code via SMS.",
"type": "string"
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"properties": {}
}
},
"errors": [
{
"name": "RateLimitExceeded"
},
{
"name": "InvalidDid"
},
{
"name": "InvalidPhone"
},
{
"name": "InternalError"
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/contact/verifyPhone.json
================================================
{
"lexicon": 1,
"id": "app.bsky.contact.verifyPhone",
"defs": {
"main": {
"type": "procedure",
"description": "Verifies control over a phone number with a code received via SMS and starts a contact import session. Requires authentication.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["phone", "code"],
"properties": {
"phone": {
"description": "The phone number to verify. Should be the same as the one passed to `app.bsky.contact.startPhoneVerification`.",
"type": "string"
},
"code": {
"description": "The code received via SMS as a result of the call to `app.bsky.contact.startPhoneVerification`.",
"type": "string"
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["token"],
"properties": {
"token": {
"description": "JWT to be used in a call to `app.bsky.contact.importContacts`. It is only valid for a single call.",
"type": "string"
}
}
}
},
"errors": [
{
"name": "RateLimitExceeded"
},
{
"name": "InvalidDid"
},
{
"name": "InvalidPhone"
},
{
"name": "InvalidCode"
},
{
"name": "InternalError"
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/draft/createDraft.json
================================================
{
"lexicon": 1,
"id": "app.bsky.draft.createDraft",
"defs": {
"main": {
"type": "procedure",
"description": "Inserts a draft using private storage (stash). An upper limit of drafts might be enforced. Requires authentication.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["draft"],
"properties": {
"draft": {
"type": "ref",
"ref": "app.bsky.draft.defs#draft"
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["id"],
"properties": {
"id": {
"type": "string",
"description": "The ID of the created draft."
}
}
}
},
"errors": [
{
"name": "DraftLimitReached",
"description": "Trying to insert a new draft when the limit was already reached."
}
]
}
}
}
================================================
FILE: lexicons/app/bsky/draft/defs.json
================================================
{
"lexicon": 1,
"id": "app.bsky.draft.defs",
"defs": {
"draftWithId": {
"description": "A draft with an identifier, used to store drafts in private storage (stash).",
"type": "object",
"required": ["id", "draft"],
"properties": {
"id": {
"description": "A TID to be used as a draft identifier.",
"type": "string",
"format": "tid"
},
"draft": {
"type": "ref",
"ref": "#draft"
}
}
},
"draft": {
"description": "A draft containing an array of draft posts.",
"type": "object",
"required": ["posts"],
"properties": {
"deviceId": {
"type": "string",
"description": "UUIDv4 identifier of the device that created this draft.",
"maxLength": 100
},
"deviceName": {
"type": "string",
"description": "The device and/or platform on which the draft was created.",
"maxLength": 100
},
"posts": {
"description": "Array of draft posts that compose this draft.",
"type": "array",
"minLength": 1,
"maxLength": 100,
"items": {
"type": "ref",
"ref": "#draftPost"
}
},
"langs": {
"type": "array",
"description": "Indicates human language of posts primary text content.",
"maxLength": 3,
"items": { "type": "string", "format": "language" }
},
"postgateEmbeddingRules": {
"description": "Embedding rules for the postgates to be created when this draft is published.",
"type": "array",
"maxLength": 5,
"items": {
"type": "union",
"refs": ["app.bsky.feed.postgate#disableRule"]
}
},
"threadgateAllow": {
"description": "Allow-rules for the threadgate to be created when this draft is published.",
"type": "array",
"maxLength": 5,
"items": {
"type": "union",
"refs": [
"app.bsky.feed.threadgate#mentionRule",
"app.bsky.feed.threadgate#followerRule",
"app.bsky.feed.threadgate#followingRule",
"app.bsky.feed.threadgate#listRule"
]
}
}
}
},
"draftPost": {
"description": "One of the posts that compose a draft.",
"type": "object",
"required": ["text"],
"properties": {
"text": {
"type": "string",
"maxLength": 10000,
"maxGraphemes": 1000,
"description": "The primary post content. It has a higher limit than post contents to allow storing a larger text that can later be refined into smaller posts."
},
"labels": {
"type": "union",
"description": "Self-label values for this post. Effectively content warnings.",
"refs": ["com.atproto.label.defs#selfLabels"]
},
"embedImages": {
"type": "array",
"items": { "type": "ref", "ref": "#draftEmbedImage" },
"maxLength": 4
},
"embedVideos": {
"type": "array",
"items": { "type": "ref", "ref": "#draftEmbedVideo" },
"maxLength": 1
},
"embedExternals": {
"type": "array",
"items": { "type": "ref", "ref": "#draftEmbedExternal" },
"maxLength": 1
},
"embedRecords": {
"type": "array",
"items": { "type": "ref", "ref": "#draftEmbedRecord" },
"maxLength": 1
}
}
},
"draftView": {
"description": "View to present drafts data to users.",
"type": "object",
"required": ["id", "draft", "createdAt", "updatedAt"],
"properties": {
"id": {
"description": "A TID to be used as a draft identifier.",
"type": "string",
"format": "tid"
},
"draft": {
"type": "ref",
"ref": "#draft"
},
"createdAt": {
"description": "The time the draft was created.",
"type": "string",
"format": "datetime"
},
"updatedAt": {
"description": "The time the draft was last updated.",
"type": "string",
"format": "datetime"
}
}
},
"draftEmbedLocalRef": {
"type": "object",
"required": ["path"],
"properties": {
"path": {
"type": "string",
"description": "Local, on-device ref to file to be embedded. Embeds are currently device-bound for drafts.",
"minLength": 1,
"maxLength": 1024
}
}
},
"draftEmbedCaption": {
"type": "object",
"required": ["lang", "content"],
"properties": {
"lang": {
"type": "string",
"format": "language"
},
"content": {
"type": "string",
"maxLength": 10000
}
}
},
"draftEmbedImage": {
"type": "object",
"required": ["localRef"],
"properties": {
"localRef": {
"type": "ref",
"ref": "#draftEmbedLocalRef"
},
"alt": {
"type": "string",
"maxGraphemes": 2000
}
}
},
"draftEmbedVideo": {
"type": "object",
"required": ["localRef"],
"properties": {
"localRef": {
"type": "ref",
"ref": "#draftEmbedLocalRef"
},
"alt": {
"type": "string",
"maxGraphemes": 2000
},
"captions": {
"type": "array",
"items": {
"type": "ref",
"ref": "#draftEmbedCaption"
},
"maxLength": 20
}
}
},
"draftEmbedExternal": {
"type": "object",
"required": ["uri"],
"properties": {
"uri": { "type": "string", "format": "uri" }
}
},
"draftEmbedRecord": {
"type": "object",
"required": ["record"],
"properties": {
"record": { "type": "ref", "ref": "com.atproto.repo.strongRef" }
}
}
}
}
================================================
FILE: lexicons/app/bsky/draft/deleteDraft.json
================================================
{
"lexicon": 1,
"id": "app.bsky.draft.deleteDraft",
"defs": {
"main": {
"type": "procedure",
"description": "Deletes a draft by ID. Requires authentication.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["id"],
"properties": {
"id": {
"type": "string",
"format": "tid"
}
}
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/draft/getDrafts.json
================================================
{
"lexicon": 1,
"id": "app.bsky.draft.getDrafts",
"defs": {
"main": {
"type": "query",
"description": "Gets views of user drafts. Requires authentication.",
"parameters": {
"type": "params",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
},
"cursor": { "type": "string" }
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["drafts"],
"properties": {
"cursor": { "type": "string" },
"drafts": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.draft.defs#draftView"
}
}
}
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/draft/updateDraft.json
================================================
{
"lexicon": 1,
"id": "app.bsky.draft.updateDraft",
"defs": {
"main": {
"type": "procedure",
"description": "Updates a draft using private storage (stash). If the draft ID points to a non-existing ID, the update will be silently ignored. This is done because updates don't enforce draft limit, so it accepts all writes, but will ignore invalid ones. Requires authentication.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["draft"],
"properties": {
"draft": {
"type": "ref",
"ref": "app.bsky.draft.defs#draftWithId"
}
}
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/embed/defs.json
================================================
{
"lexicon": 1,
"id": "app.bsky.embed.defs",
"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 }
}
}
}
}
================================================
FILE: lexicons/app/bsky/embed/external.json
================================================
{
"lexicon": 1,
"id": "app.bsky.embed.external",
"defs": {
"main": {
"type": "object",
"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": "#external"
}
}
},
"external": {
"type": "object",
"required": ["uri", "title", "description"],
"properties": {
"uri": { "type": "string", "format": "uri" },
"title": { "type": "string" },
"description": { "type": "string" },
"thumb": {
"type": "blob",
"accept": ["image/*"],
"maxSize": 1000000
}
}
},
"view": {
"type": "object",
"required": ["external"],
"properties": {
"external": {
"type": "ref",
"ref": "#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" }
}
}
}
}
================================================
FILE: lexicons/app/bsky/embed/images.json
================================================
{
"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": ["images"],
"properties": {
"images": {
"type": "array",
"items": { "type": "ref", "ref": "#image" },
"maxLength": 4
}
}
},
"image": {
"type": "object",
"required": ["image", "alt"],
"properties": {
"image": {
"type": "blob",
"accept": ["image/*"],
"maxSize": 1000000
},
"alt": {
"type": "string",
"description": "Alt text description of the image, for accessibility."
},
"aspectRatio": {
"type": "ref",
"ref": "app.bsky.embed.defs#aspectRatio"
}
}
},
"view": {
"type": "object",
"required": ["images"],
"properties": {
"images": {
"type": "array",
"items": { "type": "ref", "ref": "#viewImage" },
"maxLength": 4
}
}
},
"viewImage": {
"type": "object",
"required": ["thumb", "fullsize", "alt"],
"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": {
"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."
},
"alt": {
"type": "string",
"description": "Alt text description of the image, for accessibility."
},
"aspectRatio": {
"type": "ref",
"ref": "app.bsky.embed.defs#aspectRatio"
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/embed/record.json
================================================
{
"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.",
"defs": {
"main": {
"type": "object",
"required": ["record"],
"properties": {
"record": { "type": "ref", "ref": "com.atproto.repo.strongRef" }
}
},
"view": {
"type": "object",
"required": ["record"],
"properties": {
"record": {
"type": "union",
"refs": [
"#viewRecord",
"#viewNotFound",
"#viewBlocked",
"#viewDetached",
"app.bsky.feed.defs#generatorView",
"app.bsky.graph.defs#listView",
"app.bsky.labeler.defs#labelerView",
"app.bsky.graph.defs#starterPackViewBasic"
]
}
}
},
"viewRecord": {
"type": "object",
"required": ["uri", "cid", "author", "value", "indexedAt"],
"properties": {
"uri": { "type": "string", "format": "at-uri" },
"cid": { "type": "string", "format": "cid" },
"author": {
"type": "ref",
"ref": "app.bsky.actor.defs#profileViewBasic"
},
"value": {
"type": "unknown",
"description": "The record data itself."
},
"labels": {
"type": "array",
"items": { "type": "ref", "ref": "com.atproto.label.defs#label" }
},
"replyCount": { "type": "integer" },
"repostCount": { "type": "integer" },
"likeCount": { "type": "integer" },
"quoteCount": { "type": "integer" },
"embeds": {
"type": "array",
"items": {
"type": "union",
"refs": [
"app.bsky.embed.images#view",
"app.bsky.embed.video#view",
"app.bsky.embed.external#view",
"app.bsky.embed.record#view",
"app.bsky.embed.recordWithMedia#view"
]
}
},
"indexedAt": { "type": "string", "format": "datetime" }
}
},
"viewNotFound": {
"type": "object",
"required": ["uri", "notFound"],
"properties": {
"uri": { "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": "app.bsky.feed.defs#blockedAuthor" }
}
},
"viewDetached": {
"type": "object",
"required": ["uri", "detached"],
"properties": {
"uri": { "type": "string", "format": "at-uri" },
"detached": { "type": "boolean", "const": true }
}
}
}
}
================================================
FILE: lexicons/app/bsky/embed/recordWithMedia.json
================================================
{
"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": "app.bsky.embed.record"
},
"media": {
"type": "union",
"refs": [
"app.bsky.embed.images",
"app.bsky.embed.video",
"app.bsky.embed.external"
]
}
}
},
"view": {
"type": "object",
"required": ["record", "media"],
"properties": {
"record": {
"type": "ref",
"ref": "app.bsky.embed.record#view"
},
"media": {
"type": "union",
"refs": [
"app.bsky.embed.images#view",
"app.bsky.embed.video#view",
"app.bsky.embed.external#view"
]
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/embed/video.json
================================================
{
"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": "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": "#caption" },
"maxLength": 20
},
"alt": {
"type": "string",
"description": "Alt text description of the video, for accessibility.",
"maxGraphemes": 1000,
"maxLength": 10000
},
"aspectRatio": {
"type": "ref",
"ref": "app.bsky.embed.defs#aspectRatio"
},
"presentation": {
"type": "string",
"description": "A hint to the client about how to present the video.",
"knownValues": ["default", "gif"]
}
}
},
"caption": {
"type": "object",
"required": ["lang", "file"],
"properties": {
"lang": {
"type": "string",
"format": "language"
},
"file": {
"type": "blob",
"accept": ["text/vtt"],
"maxSize": 20000
}
}
},
"view": {
"type": "object",
"required": ["cid", "playlist"],
"properties": {
"cid": { "type": "string", "format": "cid" },
"playlist": { "type": "string", "format": "uri" },
"thumbnail": { "type": "string", "format": "uri" },
"alt": {
"type": "string",
"maxGraphemes": 1000,
"maxLength": 10000
},
"aspectRatio": {
"type": "ref",
"ref": "app.bsky.embed.defs#aspectRatio"
},
"presentation": {
"type": "string",
"description": "A hint to the client about how to present the video.",
"knownValues": ["default", "gif"]
}
}
}
}
}
================================================
FILE: lexicons/app/bsky/feed/defs.json
================================================
{
"lexicon": 1,
"id": "app.bsky.feed.defs",
"defs": {
"postView": {
"type": "object",
"required": ["uri", "cid", "author", "record", "indexedAt"],
"properties": {
"uri": { "type": "string", "format": "at-uri" },
"cid": { "type": "string", "format": "cid" },
"author": {
"type": "ref",
"ref": "app.bsky.actor.defs#profileViewBasic"
},
"record": { "type": "unknown" },
"embed": {
"type": "union",
"refs": [
"app.bsky.embed.images#view",
"app.bsky.embed.video#view",
"app.bsky.embed.external#view",
"app.bsky.embed.record#view",
"app.bsky.embed.recordWithMedia#view"
]
},
"bookmarkCount": { "type": "integer" },
"replyCount": { "type": "integer" },
"repostCount": { "type": "integer" },
"likeCount": { "type": "integer" },
"quoteCount": { "type": "integer" },
"indexedAt": { "type": "string", "format": "datetime" },
"viewer": { "type": "ref", "ref": "#viewerState" },
"labels": {
"type": "array",
"items": { "type": "ref", "ref": "com.atproto.label.defs#label" }
},
"threadgate": { "type": "ref", "ref": "#threadgateView" },
"debug": {
"type": "unknown",
"description": "Debug information for internal development"
}
}
},
"viewerState": {
"type": "object",
"description": "Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests.",
"properties": {
"repost": { "type": "string", "format": "at-uri" },
"like": { "type": "string", "format": "at-uri" },
"bookmarked": { "type": "boolean" },
"threadMuted": { "type": "boolean" },
"replyDisabled": { "type": "boolean" },
"embeddingDisabled": { "type": "boolean" },
"pinned": { "type": "boolean" }
}
},
"threadContext": {
"type": "object",
"description": "Metadata about this post within the context of the thread it is in.",
"properties": {
"rootAuthorLike": { "type": "string", "format": "at-uri" }
}
},
"feedViewPost": {
"type": "object",
"required": ["post"],
"properties": {
"post": { "type": "ref", "ref": "#postView" },
"reply": { "type": "ref", "ref": "#replyRef" },
"reason": { "type": "union", "refs": ["#reasonRepost", "#reasonPin"] },
"feedContext": {
"type": "string",
"description": "Context provided by feed generator that may be passed back alongside interactions.",
"maxLength": 2000
},
"reqId": {
"type": "string",
"description": "Unique identifier per request that may be passed back alongside interactions.",
"maxLength": 100
}
}
},
"replyRef": {
"type": "object",
"required": ["root", "parent"],
"properties": {
"root": {
"type": "union",
"refs": ["#postView", "#notFoundPost", "#blockedPost"]
},
"parent": {
"type": "union",
"refs": ["#postView", "#notFoundPost", "#blockedPost"]
},
"grandparentAuthor": {
"type": "ref",
"ref": "app.bsky.actor.defs#profileViewBasic",
"description": "When parent is a reply to another post, this is the author of that post."
}
}
},
"reasonRepost": {
"type": "object",
"required": ["by", "indexedAt"],
"properties": {
"by": { "type": "ref", "ref": "app.bsky.actor.defs#profileViewBasic" },
"uri": { "type": "string", "format": "at-uri" },
"cid": { "type": "string", "format": "cid" },
"indexedAt": { "type": "string", "format": "datetime" }
}
},
"reasonPin": {
"type": "object",
"properties": {}
},
"threadViewPost": {
"type": "object",
"required": ["post"],
"properties": {
"post": { "type": "ref", "ref": "#postView" },
"parent": {
"type": "union",
"refs": ["#threadViewPost", "#notFoundPost", "#blockedPost"]
},
"replies": {
"type": "array",
"items": {
"type": "union",
"refs": ["#threadViewPost", "#notFoundPost", "#blockedPost"]
}
},
"threadContext": { "type": "ref", "ref": "#threadContext" }
}
},
"notFoundPost": {
"type": "object",
"required": ["uri", "notFound"],
"properties": {
"uri": { "type": "string", "format": "at-uri" },
"notFound": { "type": "boolean", "const": true }
}
},
"blockedPost": {
"type": "object",
"required": ["uri", "blocked", "author"],
"properties": {
"uri": { "type": "string", "format": "at-uri" },
"blocked": { "type": "boolean", "const": true },
"author": { "type": "ref", "ref": "#blockedAuthor" }
}
},
"blockedAuthor": {
"type": "object",
"required": ["did"],
"properties": {
"did": { "type": "string", "format": "did" },
"viewer": { "type": "ref", "ref": "app.bsky.actor.defs#viewerState" }
}
},
"generatorView": {
"type": "object",
"required": ["uri", "cid", "did", "creator", "displayName", "indexedAt"],
"properties": {
"uri": { "type": "string", "format": "at-uri" },
"cid": { "type": "string", "format": "cid" },
"did": { "type": "string", "format": "did" },
"creator": { "type": "ref", "ref": "app.bsky.actor.defs#profileView" },
"displayName": { "type": "string" },
"description": {
"type": "string",
"maxGraphemes": 300,
"maxLength": 3000
},
"descriptionFacets": {
"type": "array",
"items": { "type": "ref", "ref": "app.bsky.richtext.facet" }
},
"avatar": { "type": "string", "format": "uri" },
"likeCount": { "type": "integer", "minimum": 0 },
"acceptsInteractions": { "type": "boolean" },
"labels": {
"type": "array",
"items": { "type": "ref", "ref": "com.atproto.label.defs#label" }
},
"viewer": { "type": "ref", "ref": "#generatorViewerState" },
"contentMode": {
"type": "string",
"knownValues": [
"app.bsky.feed.defs#contentModeUnspecified",
"app.bsky.feed.defs#contentModeVideo"
]
},
"indexedAt": { "type": "string", "format": "datetime" }
}
},
"generatorViewerState": {
"type": "object",
"properties": {
"like": { "type": "string", "format": "at-uri" }
}
},
"skeletonFeedPost": {
"type": "object",
"required": ["post"],
"properties": {
"post": { "type": "string", "format": "at-uri" },
"reason": {
"type": "union",
"refs": ["#skeletonReasonRepost", "#skeletonReasonPin"]
},
"feedContext": {
"type": "string",
"description": "Context that will be passed through to client and may be passed to feed generator back alongside interactions.",
"maxLength": 2000
}
}
},
"skeletonReasonRepost": {
"type": "object",
"required": ["repost"],
"properties": {
"repost":
Showing preview only (201K chars total). Download the full file or copy to clipboard to get everything.
gitextract_m_xioowf/ ├── .changeset/ │ ├── README.md │ ├── config.json │ ├── giant-goats-repeat.md │ └── nine-eyes-switch.md ├── .dockerignore ├── .eslintignore ├── .eslintrc ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ └── workflows/ │ ├── build-and-push-bsky-aws.yaml │ ├── build-and-push-bsky-ghcr.yaml │ ├── build-and-push-bsync-aws.yaml │ ├── build-and-push-bsync-ghcr.yaml │ ├── build-and-push-ozone-aws.yaml │ ├── build-and-push-ozone-ghcr.yaml │ ├── build-and-push-pds-aws.yaml │ ├── build-and-push-pds-ghcr.yaml │ ├── claude.yaml │ ├── publish.yaml │ ├── repo.yaml │ └── sync-internal.yaml ├── .gitignore ├── .npmrc ├── .nvmrc ├── .prettierignore ├── .prettierrc ├── .vscode/ │ ├── extensions.json │ └── settings.json ├── CONTRIBUTORS.md ├── LICENSE-APACHE.txt ├── LICENSE-MIT.txt ├── LICENSE.txt ├── Makefile ├── README.md ├── SECURITY.md ├── interop-test-files/ │ ├── README.md │ ├── crypto/ │ │ ├── signature-fixtures.json │ │ ├── w3c_didkey_K256.json │ │ └── w3c_didkey_P256.json │ └── syntax/ │ ├── atidentifier_syntax_invalid.txt │ ├── atidentifier_syntax_valid.txt │ ├── aturi_syntax_invalid.txt │ ├── aturi_syntax_valid.txt │ ├── datetime_parse_invalid.txt │ ├── datetime_syntax_invalid.txt │ ├── datetime_syntax_valid.txt │ ├── did_syntax_invalid.txt │ ├── did_syntax_valid.txt │ ├── handle_syntax_invalid.txt │ ├── handle_syntax_valid.txt │ ├── nsid_syntax_invalid.txt │ ├── nsid_syntax_valid.txt │ ├── recordkey_syntax_invalid.txt │ ├── recordkey_syntax_valid.txt │ ├── tid_syntax_invalid.txt │ └── tid_syntax_valid.txt ├── jest.config.js ├── jest.setup.ts ├── lexicons/ │ ├── app/ │ │ └── bsky/ │ │ ├── actor/ │ │ │ ├── defs.json │ │ │ ├── getPreferences.json │ │ │ ├── getProfile.json │ │ │ ├── getProfiles.json │ │ │ ├── getSuggestions.json │ │ │ ├── profile.json │ │ │ ├── putPreferences.json │ │ │ ├── searchActors.json │ │ │ ├── searchActorsTypeahead.json │ │ │ └── status.json │ │ ├── ageassurance/ │ │ │ ├── begin.json │ │ │ ├── defs.json │ │ │ ├── getConfig.json │ │ │ └── getState.json │ │ ├── authCreatePosts.json │ │ ├── authDeleteContent.json │ │ ├── authFullApp.json │ │ ├── authManageFeedDeclarations.json │ │ ├── authManageLabelerService.json │ │ ├── authManageModeration.json │ │ ├── authManageNotifications.json │ │ ├── authManageProfile.json │ │ ├── authViewAll.json │ │ ├── bookmark/ │ │ │ ├── createBookmark.json │ │ │ ├── defs.json │ │ │ ├── deleteBookmark.json │ │ │ └── getBookmarks.json │ │ ├── contact/ │ │ │ ├── defs.json │ │ │ ├── dismissMatch.json │ │ │ ├── getMatches.json │ │ │ ├── getSyncStatus.json │ │ │ ├── importContacts.json │ │ │ ├── removeData.json │ │ │ ├── sendNotification.json │ │ │ ├── startPhoneVerification.json │ │ │ └── verifyPhone.json │ │ ├── draft/ │ │ │ ├── createDraft.json │ │ │ ├── defs.json │ │ │ ├── deleteDraft.json │ │ │ ├── getDrafts.json │ │ │ └── updateDraft.json │ │ ├── embed/ │ │ │ ├── defs.json │ │ │ ├── external.json │ │ │ ├── images.json │ │ │ ├── record.json │ │ │ ├── recordWithMedia.json │ │ │ └── video.json │ │ ├── feed/ │ │ │ ├── defs.json │ │ │ ├── describeFeedGenerator.json │ │ │ ├── generator.json │ │ │ ├── getActorFeeds.json │ │ │ ├── getActorLikes.json │ │ │ ├── getAuthorFeed.json │ │ │ ├── getFeed.json │ │ │ ├── getFeedGenerator.json │ │ │ ├── getFeedGenerators.json │ │ │ ├── getFeedSkeleton.json │ │ │ ├── getLikes.json │ │ │ ├── getListFeed.json │ │ │ ├── getPostThread.json │ │ │ ├── getPosts.json │ │ │ ├── getQuotes.json │ │ │ ├── getRepostedBy.json │ │ │ ├── getSuggestedFeeds.json │ │ │ ├── getTimeline.json │ │ │ ├── like.json │ │ │ ├── post.json │ │ │ ├── postgate.json │ │ │ ├── repost.json │ │ │ ├── searchPosts.json │ │ │ ├── sendInteractions.json │ │ │ └── threadgate.json │ │ ├── graph/ │ │ │ ├── block.json │ │ │ ├── defs.json │ │ │ ├── follow.json │ │ │ ├── getActorStarterPacks.json │ │ │ ├── getBlocks.json │ │ │ ├── getFollowers.json │ │ │ ├── getFollows.json │ │ │ ├── getKnownFollowers.json │ │ │ ├── getList.json │ │ │ ├── getListBlocks.json │ │ │ ├── getListMutes.json │ │ │ ├── getLists.json │ │ │ ├── getListsWithMembership.json │ │ │ ├── getMutes.json │ │ │ ├── getRelationships.json │ │ │ ├── getStarterPack.json │ │ │ ├── getStarterPacks.json │ │ │ ├── getStarterPacksWithMembership.json │ │ │ ├── getSuggestedFollowsByActor.json │ │ │ ├── list.json │ │ │ ├── listblock.json │ │ │ ├── listitem.json │ │ │ ├── muteActor.json │ │ │ ├── muteActorList.json │ │ │ ├── muteThread.json │ │ │ ├── searchStarterPacks.json │ │ │ ├── starterpack.json │ │ │ ├── unmuteActor.json │ │ │ ├── unmuteActorList.json │ │ │ ├── unmuteThread.json │ │ │ └── verification.json │ │ ├── labeler/ │ │ │ ├── defs.json │ │ │ ├── getServices.json │ │ │ └── service.json │ │ ├── notification/ │ │ │ ├── declaration.json │ │ │ ├── defs.json │ │ │ ├── getPreferences.json │ │ │ ├── getUnreadCount.json │ │ │ ├── listActivitySubscriptions.json │ │ │ ├── listNotifications.json │ │ │ ├── putActivitySubscription.json │ │ │ ├── putPreferences.json │ │ │ ├── putPreferencesV2.json │ │ │ ├── registerPush.json │ │ │ ├── unregisterPush.json │ │ │ └── updateSeen.json │ │ ├── richtext/ │ │ │ └── facet.json │ │ ├── unspecced/ │ │ │ ├── defs.json │ │ │ ├── getAgeAssuranceState.json │ │ │ ├── getConfig.json │ │ │ ├── getOnboardingSuggestedStarterPacks.json │ │ │ ├── getOnboardingSuggestedStarterPacksSkeleton.json │ │ │ ├── getOnboardingSuggestedUsersSkeleton.json │ │ │ ├── getPopularFeedGenerators.json │ │ │ ├── getPostThreadOtherV2.json │ │ │ ├── getPostThreadV2.json │ │ │ ├── getSuggestedFeeds.json │ │ │ ├── getSuggestedFeedsSkeleton.json │ │ │ ├── getSuggestedOnboardingUsers.json │ │ │ ├── getSuggestedStarterPacks.json │ │ │ ├── getSuggestedStarterPacksSkeleton.json │ │ │ ├── getSuggestedUsers.json │ │ │ ├── getSuggestedUsersSkeleton.json │ │ │ ├── getSuggestionsSkeleton.json │ │ │ ├── getTaggedSuggestions.json │ │ │ ├── getTrendingTopics.json │ │ │ ├── getTrends.json │ │ │ ├── getTrendsSkeleton.json │ │ │ ├── initAgeAssurance.json │ │ │ ├── searchActorsSkeleton.json │ │ │ ├── searchPostsSkeleton.json │ │ │ └── searchStarterPacksSkeleton.json │ │ └── video/ │ │ ├── defs.json │ │ ├── getJobStatus.json │ │ ├── getUploadLimits.json │ │ └── uploadVideo.json │ ├── chat/ │ │ └── bsky/ │ │ ├── actor/ │ │ │ ├── declaration.json │ │ │ ├── defs.json │ │ │ ├── deleteAccount.json │ │ │ └── exportAccountData.json │ │ ├── authFullChatClient.json │ │ ├── convo/ │ │ │ ├── acceptConvo.json │ │ │ ├── addReaction.json │ │ │ ├── defs.json │ │ │ ├── deleteMessageForSelf.json │ │ │ ├── getConvo.json │ │ │ ├── getConvoAvailability.json │ │ │ ├── getConvoForMembers.json │ │ │ ├── getLog.json │ │ │ ├── getMessages.json │ │ │ ├── leaveConvo.json │ │ │ ├── listConvos.json │ │ │ ├── muteConvo.json │ │ │ ├── removeReaction.json │ │ │ ├── sendMessage.json │ │ │ ├── sendMessageBatch.json │ │ │ ├── unmuteConvo.json │ │ │ ├── updateAllRead.json │ │ │ └── updateRead.json │ │ └── moderation/ │ │ ├── getActorMetadata.json │ │ ├── getMessageContext.json │ │ └── updateActorAccess.json │ ├── com/ │ │ ├── atproto/ │ │ │ ├── admin/ │ │ │ │ ├── defs.json │ │ │ │ ├── deleteAccount.json │ │ │ │ ├── disableAccountInvites.json │ │ │ │ ├── disableInviteCodes.json │ │ │ │ ├── enableAccountInvites.json │ │ │ │ ├── getAccountInfo.json │ │ │ │ ├── getAccountInfos.json │ │ │ │ ├── getInviteCodes.json │ │ │ │ ├── getSubjectStatus.json │ │ │ │ ├── searchAccounts.json │ │ │ │ ├── sendEmail.json │ │ │ │ ├── updateAccountEmail.json │ │ │ │ ├── updateAccountHandle.json │ │ │ │ ├── updateAccountPassword.json │ │ │ │ ├── updateAccountSigningKey.json │ │ │ │ └── updateSubjectStatus.json │ │ │ ├── identity/ │ │ │ │ ├── defs.json │ │ │ │ ├── getRecommendedDidCredentials.json │ │ │ │ ├── refreshIdentity.json │ │ │ │ ├── requestPlcOperationSignature.json │ │ │ │ ├── resolveDid.json │ │ │ │ ├── resolveHandle.json │ │ │ │ ├── resolveIdentity.json │ │ │ │ ├── signPlcOperation.json │ │ │ │ ├── submitPlcOperation.json │ │ │ │ └── updateHandle.json │ │ │ ├── label/ │ │ │ │ ├── defs.json │ │ │ │ ├── queryLabels.json │ │ │ │ └── subscribeLabels.json │ │ │ ├── lexicon/ │ │ │ │ ├── resolveLexicon.json │ │ │ │ └── schema.json │ │ │ ├── moderation/ │ │ │ │ ├── createReport.json │ │ │ │ └── defs.json │ │ │ ├── repo/ │ │ │ │ ├── applyWrites.json │ │ │ │ ├── createRecord.json │ │ │ │ ├── defs.json │ │ │ │ ├── deleteRecord.json │ │ │ │ ├── describeRepo.json │ │ │ │ ├── getRecord.json │ │ │ │ ├── importRepo.json │ │ │ │ ├── listMissingBlobs.json │ │ │ │ ├── listRecords.json │ │ │ │ ├── putRecord.json │ │ │ │ ├── strongRef.json │ │ │ │ └── uploadBlob.json │ │ │ ├── server/ │ │ │ │ ├── activateAccount.json │ │ │ │ ├── checkAccountStatus.json │ │ │ │ ├── confirmEmail.json │ │ │ │ ├── createAccount.json │ │ │ │ ├── createAppPassword.json │ │ │ │ ├── createInviteCode.json │ │ │ │ ├── createInviteCodes.json │ │ │ │ ├── createSession.json │ │ │ │ ├── deactivateAccount.json │ │ │ │ ├── defs.json │ │ │ │ ├── deleteAccount.json │ │ │ │ ├── deleteSession.json │ │ │ │ ├── describeServer.json │ │ │ │ ├── getAccountInviteCodes.json │ │ │ │ ├── getServiceAuth.json │ │ │ │ ├── getSession.json │ │ │ │ ├── listAppPasswords.json │ │ │ │ ├── refreshSession.json │ │ │ │ ├── requestAccountDelete.json │ │ │ │ ├── requestEmailConfirmation.json │ │ │ │ ├── requestEmailUpdate.json │ │ │ │ ├── requestPasswordReset.json │ │ │ │ ├── reserveSigningKey.json │ │ │ │ ├── resetPassword.json │ │ │ │ ├── revokeAppPassword.json │ │ │ │ └── updateEmail.json │ │ │ ├── sync/ │ │ │ │ ├── defs.json │ │ │ │ ├── getBlob.json │ │ │ │ ├── getBlocks.json │ │ │ │ ├── getCheckout.json │ │ │ │ ├── getHead.json │ │ │ │ ├── getHostStatus.json │ │ │ │ ├── getLatestCommit.json │ │ │ │ ├── getRecord.json │ │ │ │ ├── getRepo.json │ │ │ │ ├── getRepoStatus.json │ │ │ │ ├── listBlobs.json │ │ │ │ ├── listHosts.json │ │ │ │ ├── listRepos.json │ │ │ │ ├── listReposByCollection.json │ │ │ │ ├── notifyOfUpdate.json │ │ │ │ ├── requestCrawl.json │ │ │ │ └── subscribeRepos.json │ │ │ └── temp/ │ │ │ ├── addReservedHandle.json │ │ │ ├── checkHandleAvailability.json │ │ │ ├── checkSignupQueue.json │ │ │ ├── dereferenceScope.json │ │ │ ├── fetchLabels.json │ │ │ ├── requestPhoneVerification.json │ │ │ └── revokeAccountCredentials.json │ │ └── germnetwork/ │ │ └── declaration.json │ └── tools/ │ └── ozone/ │ ├── communication/ │ │ ├── createTemplate.json │ │ ├── defs.json │ │ ├── deleteTemplate.json │ │ ├── listTemplates.json │ │ └── updateTemplate.json │ ├── hosting/ │ │ └── getAccountHistory.json │ ├── moderation/ │ │ ├── cancelScheduledActions.json │ │ ├── defs.json │ │ ├── emitEvent.json │ │ ├── getAccountTimeline.json │ │ ├── getEvent.json │ │ ├── getRecord.json │ │ ├── getRecords.json │ │ ├── getRepo.json │ │ ├── getReporterStats.json │ │ ├── getRepos.json │ │ ├── getSubjects.json │ │ ├── listScheduledActions.json │ │ ├── queryEvents.json │ │ ├── queryStatuses.json │ │ ├── scheduleAction.json │ │ └── searchRepos.json │ ├── report/ │ │ └── defs.json │ ├── safelink/ │ │ ├── addRule.json │ │ ├── defs.json │ │ ├── queryEvents.json │ │ ├── queryRules.json │ │ ├── removeRule.json │ │ └── updateRule.json │ ├── server/ │ │ └── getConfig.json │ ├── set/ │ │ ├── addValues.json │ │ ├── defs.json │ │ ├── deleteSet.json │ │ ├── deleteValues.json │ │ ├── getValues.json │ │ ├── querySets.json │ │ └── upsertSet.json │ ├── setting/ │ │ ├── defs.json │ │ ├── listOptions.json │ │ ├── removeOptions.json │ │ └── upsertOption.json │ ├── signature/ │ │ ├── defs.json │ │ ├── findCorrelation.json │ │ ├── findRelatedAccounts.json │ │ └── searchAccounts.json │ ├── team/ │ │ ├── addMember.json │ │ ├── defs.json │ │ ├── deleteMember.json │ │ ├── listMembers.json │ │ └── updateMember.json │ └── verification/ │ ├── defs.json │ ├── grantVerifications.json │ ├── listVerifications.json │ └── revokeVerifications.json ├── package.json ├── packages/ │ ├── README.md │ ├── api/ │ │ ├── CHANGELOG.md │ │ ├── OAUTH.md │ │ ├── README.md │ │ ├── definitions/ │ │ │ └── labels.json │ │ ├── docs/ │ │ │ └── moderation.md │ │ ├── jest.config.js │ │ ├── jest.d.ts │ │ ├── jest.setup.ts │ │ ├── package.json │ │ ├── scripts/ │ │ │ ├── code/ │ │ │ │ └── labels.mjs │ │ │ └── generate-code.mjs │ │ ├── src/ │ │ │ ├── age-assurance.test.ts │ │ │ ├── age-assurance.ts │ │ │ ├── agent.ts │ │ │ ├── atp-agent.ts │ │ │ ├── bsky-agent.ts │ │ │ ├── client/ │ │ │ │ ├── index.ts │ │ │ │ ├── lexicons.ts │ │ │ │ ├── types/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── bsky/ │ │ │ │ │ │ ├── actor/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getPreferences.ts │ │ │ │ │ │ │ ├── getProfile.ts │ │ │ │ │ │ │ ├── getProfiles.ts │ │ │ │ │ │ │ ├── getSuggestions.ts │ │ │ │ │ │ │ ├── profile.ts │ │ │ │ │ │ │ ├── putPreferences.ts │ │ │ │ │ │ │ ├── searchActors.ts │ │ │ │ │ │ │ ├── searchActorsTypeahead.ts │ │ │ │ │ │ │ └── status.ts │ │ │ │ │ │ ├── ageassurance/ │ │ │ │ │ │ │ ├── begin.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getConfig.ts │ │ │ │ │ │ │ └── getState.ts │ │ │ │ │ │ ├── bookmark/ │ │ │ │ │ │ │ ├── createBookmark.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteBookmark.ts │ │ │ │ │ │ │ └── getBookmarks.ts │ │ │ │ │ │ ├── contact/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── dismissMatch.ts │ │ │ │ │ │ │ ├── getMatches.ts │ │ │ │ │ │ │ ├── getSyncStatus.ts │ │ │ │ │ │ │ ├── importContacts.ts │ │ │ │ │ │ │ ├── removeData.ts │ │ │ │ │ │ │ ├── sendNotification.ts │ │ │ │ │ │ │ ├── startPhoneVerification.ts │ │ │ │ │ │ │ └── verifyPhone.ts │ │ │ │ │ │ ├── draft/ │ │ │ │ │ │ │ ├── createDraft.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteDraft.ts │ │ │ │ │ │ │ ├── getDrafts.ts │ │ │ │ │ │ │ └── updateDraft.ts │ │ │ │ │ │ ├── embed/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── external.ts │ │ │ │ │ │ │ ├── images.ts │ │ │ │ │ │ │ ├── record.ts │ │ │ │ │ │ │ ├── recordWithMedia.ts │ │ │ │ │ │ │ └── video.ts │ │ │ │ │ │ ├── feed/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── describeFeedGenerator.ts │ │ │ │ │ │ │ ├── generator.ts │ │ │ │ │ │ │ ├── getActorFeeds.ts │ │ │ │ │ │ │ ├── getActorLikes.ts │ │ │ │ │ │ │ ├── getAuthorFeed.ts │ │ │ │ │ │ │ ├── getFeed.ts │ │ │ │ │ │ │ ├── getFeedGenerator.ts │ │ │ │ │ │ │ ├── getFeedGenerators.ts │ │ │ │ │ │ │ ├── getFeedSkeleton.ts │ │ │ │ │ │ │ ├── getLikes.ts │ │ │ │ │ │ │ ├── getListFeed.ts │ │ │ │ │ │ │ ├── getPostThread.ts │ │ │ │ │ │ │ ├── getPosts.ts │ │ │ │ │ │ │ ├── getQuotes.ts │ │ │ │ │ │ │ ├── getRepostedBy.ts │ │ │ │ │ │ │ ├── getSuggestedFeeds.ts │ │ │ │ │ │ │ ├── getTimeline.ts │ │ │ │ │ │ │ ├── like.ts │ │ │ │ │ │ │ ├── post.ts │ │ │ │ │ │ │ ├── postgate.ts │ │ │ │ │ │ │ ├── repost.ts │ │ │ │ │ │ │ ├── searchPosts.ts │ │ │ │ │ │ │ ├── sendInteractions.ts │ │ │ │ │ │ │ └── threadgate.ts │ │ │ │ │ │ ├── graph/ │ │ │ │ │ │ │ ├── block.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── follow.ts │ │ │ │ │ │ │ ├── getActorStarterPacks.ts │ │ │ │ │ │ │ ├── getBlocks.ts │ │ │ │ │ │ │ ├── getFollowers.ts │ │ │ │ │ │ │ ├── getFollows.ts │ │ │ │ │ │ │ ├── getKnownFollowers.ts │ │ │ │ │ │ │ ├── getList.ts │ │ │ │ │ │ │ ├── getListBlocks.ts │ │ │ │ │ │ │ ├── getListMutes.ts │ │ │ │ │ │ │ ├── getLists.ts │ │ │ │ │ │ │ ├── getListsWithMembership.ts │ │ │ │ │ │ │ ├── getMutes.ts │ │ │ │ │ │ │ ├── getRelationships.ts │ │ │ │ │ │ │ ├── getStarterPack.ts │ │ │ │ │ │ │ ├── getStarterPacks.ts │ │ │ │ │ │ │ ├── getStarterPacksWithMembership.ts │ │ │ │ │ │ │ ├── getSuggestedFollowsByActor.ts │ │ │ │ │ │ │ ├── list.ts │ │ │ │ │ │ │ ├── listblock.ts │ │ │ │ │ │ │ ├── listitem.ts │ │ │ │ │ │ │ ├── muteActor.ts │ │ │ │ │ │ │ ├── muteActorList.ts │ │ │ │ │ │ │ ├── muteThread.ts │ │ │ │ │ │ │ ├── searchStarterPacks.ts │ │ │ │ │ │ │ ├── starterpack.ts │ │ │ │ │ │ │ ├── unmuteActor.ts │ │ │ │ │ │ │ ├── unmuteActorList.ts │ │ │ │ │ │ │ ├── unmuteThread.ts │ │ │ │ │ │ │ └── verification.ts │ │ │ │ │ │ ├── labeler/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getServices.ts │ │ │ │ │ │ │ └── service.ts │ │ │ │ │ │ ├── notification/ │ │ │ │ │ │ │ ├── declaration.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getPreferences.ts │ │ │ │ │ │ │ ├── getUnreadCount.ts │ │ │ │ │ │ │ ├── listActivitySubscriptions.ts │ │ │ │ │ │ │ ├── listNotifications.ts │ │ │ │ │ │ │ ├── putActivitySubscription.ts │ │ │ │ │ │ │ ├── putPreferences.ts │ │ │ │ │ │ │ ├── putPreferencesV2.ts │ │ │ │ │ │ │ ├── registerPush.ts │ │ │ │ │ │ │ ├── unregisterPush.ts │ │ │ │ │ │ │ └── updateSeen.ts │ │ │ │ │ │ ├── richtext/ │ │ │ │ │ │ │ └── facet.ts │ │ │ │ │ │ ├── unspecced/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getAgeAssuranceState.ts │ │ │ │ │ │ │ ├── getConfig.ts │ │ │ │ │ │ │ ├── getOnboardingSuggestedStarterPacks.ts │ │ │ │ │ │ │ ├── getOnboardingSuggestedStarterPacksSkeleton.ts │ │ │ │ │ │ │ ├── getOnboardingSuggestedUsersSkeleton.ts │ │ │ │ │ │ │ ├── getPopularFeedGenerators.ts │ │ │ │ │ │ │ ├── getPostThreadOtherV2.ts │ │ │ │ │ │ │ ├── getPostThreadV2.ts │ │ │ │ │ │ │ ├── getSuggestedFeeds.ts │ │ │ │ │ │ │ ├── getSuggestedFeedsSkeleton.ts │ │ │ │ │ │ │ ├── getSuggestedOnboardingUsers.ts │ │ │ │ │ │ │ ├── getSuggestedStarterPacks.ts │ │ │ │ │ │ │ ├── getSuggestedStarterPacksSkeleton.ts │ │ │ │ │ │ │ ├── getSuggestedUsers.ts │ │ │ │ │ │ │ ├── getSuggestedUsersSkeleton.ts │ │ │ │ │ │ │ ├── getSuggestionsSkeleton.ts │ │ │ │ │ │ │ ├── getTaggedSuggestions.ts │ │ │ │ │ │ │ ├── getTrendingTopics.ts │ │ │ │ │ │ │ ├── getTrends.ts │ │ │ │ │ │ │ ├── getTrendsSkeleton.ts │ │ │ │ │ │ │ ├── initAgeAssurance.ts │ │ │ │ │ │ │ ├── searchActorsSkeleton.ts │ │ │ │ │ │ │ ├── searchPostsSkeleton.ts │ │ │ │ │ │ │ └── searchStarterPacksSkeleton.ts │ │ │ │ │ │ └── video/ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── getJobStatus.ts │ │ │ │ │ │ ├── getUploadLimits.ts │ │ │ │ │ │ └── uploadVideo.ts │ │ │ │ │ ├── chat/ │ │ │ │ │ │ └── bsky/ │ │ │ │ │ │ ├── actor/ │ │ │ │ │ │ │ ├── declaration.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteAccount.ts │ │ │ │ │ │ │ └── exportAccountData.ts │ │ │ │ │ │ ├── convo/ │ │ │ │ │ │ │ ├── acceptConvo.ts │ │ │ │ │ │ │ ├── addReaction.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteMessageForSelf.ts │ │ │ │ │ │ │ ├── getConvo.ts │ │ │ │ │ │ │ ├── getConvoAvailability.ts │ │ │ │ │ │ │ ├── getConvoForMembers.ts │ │ │ │ │ │ │ ├── getLog.ts │ │ │ │ │ │ │ ├── getMessages.ts │ │ │ │ │ │ │ ├── leaveConvo.ts │ │ │ │ │ │ │ ├── listConvos.ts │ │ │ │ │ │ │ ├── muteConvo.ts │ │ │ │ │ │ │ ├── removeReaction.ts │ │ │ │ │ │ │ ├── sendMessage.ts │ │ │ │ │ │ │ ├── sendMessageBatch.ts │ │ │ │ │ │ │ ├── unmuteConvo.ts │ │ │ │ │ │ │ ├── updateAllRead.ts │ │ │ │ │ │ │ └── updateRead.ts │ │ │ │ │ │ └── moderation/ │ │ │ │ │ │ ├── getActorMetadata.ts │ │ │ │ │ │ ├── getMessageContext.ts │ │ │ │ │ │ └── updateActorAccess.ts │ │ │ │ │ ├── com/ │ │ │ │ │ │ ├── atproto/ │ │ │ │ │ │ │ ├── admin/ │ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ │ ├── deleteAccount.ts │ │ │ │ │ │ │ │ ├── disableAccountInvites.ts │ │ │ │ │ │ │ │ ├── disableInviteCodes.ts │ │ │ │ │ │ │ │ ├── enableAccountInvites.ts │ │ │ │ │ │ │ │ ├── getAccountInfo.ts │ │ │ │ │ │ │ │ ├── getAccountInfos.ts │ │ │ │ │ │ │ │ ├── getInviteCodes.ts │ │ │ │ │ │ │ │ ├── getSubjectStatus.ts │ │ │ │ │ │ │ │ ├── searchAccounts.ts │ │ │ │ │ │ │ │ ├── sendEmail.ts │ │ │ │ │ │ │ │ ├── updateAccountEmail.ts │ │ │ │ │ │ │ │ ├── updateAccountHandle.ts │ │ │ │ │ │ │ │ ├── updateAccountPassword.ts │ │ │ │ │ │ │ │ ├── updateAccountSigningKey.ts │ │ │ │ │ │ │ │ └── updateSubjectStatus.ts │ │ │ │ │ │ │ ├── identity/ │ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ │ ├── getRecommendedDidCredentials.ts │ │ │ │ │ │ │ │ ├── refreshIdentity.ts │ │ │ │ │ │ │ │ ├── requestPlcOperationSignature.ts │ │ │ │ │ │ │ │ ├── resolveDid.ts │ │ │ │ │ │ │ │ ├── resolveHandle.ts │ │ │ │ │ │ │ │ ├── resolveIdentity.ts │ │ │ │ │ │ │ │ ├── signPlcOperation.ts │ │ │ │ │ │ │ │ ├── submitPlcOperation.ts │ │ │ │ │ │ │ │ └── updateHandle.ts │ │ │ │ │ │ │ ├── label/ │ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ │ ├── queryLabels.ts │ │ │ │ │ │ │ │ └── subscribeLabels.ts │ │ │ │ │ │ │ ├── lexicon/ │ │ │ │ │ │ │ │ ├── resolveLexicon.ts │ │ │ │ │ │ │ │ └── schema.ts │ │ │ │ │ │ │ ├── moderation/ │ │ │ │ │ │ │ │ ├── createReport.ts │ │ │ │ │ │ │ │ └── defs.ts │ │ │ │ │ │ │ ├── repo/ │ │ │ │ │ │ │ │ ├── applyWrites.ts │ │ │ │ │ │ │ │ ├── createRecord.ts │ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ │ ├── deleteRecord.ts │ │ │ │ │ │ │ │ ├── describeRepo.ts │ │ │ │ │ │ │ │ ├── getRecord.ts │ │ │ │ │ │ │ │ ├── importRepo.ts │ │ │ │ │ │ │ │ ├── listMissingBlobs.ts │ │ │ │ │ │ │ │ ├── listRecords.ts │ │ │ │ │ │ │ │ ├── putRecord.ts │ │ │ │ │ │ │ │ ├── strongRef.ts │ │ │ │ │ │ │ │ └── uploadBlob.ts │ │ │ │ │ │ │ ├── server/ │ │ │ │ │ │ │ │ ├── activateAccount.ts │ │ │ │ │ │ │ │ ├── checkAccountStatus.ts │ │ │ │ │ │ │ │ ├── confirmEmail.ts │ │ │ │ │ │ │ │ ├── createAccount.ts │ │ │ │ │ │ │ │ ├── createAppPassword.ts │ │ │ │ │ │ │ │ ├── createInviteCode.ts │ │ │ │ │ │ │ │ ├── createInviteCodes.ts │ │ │ │ │ │ │ │ ├── createSession.ts │ │ │ │ │ │ │ │ ├── deactivateAccount.ts │ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ │ ├── deleteAccount.ts │ │ │ │ │ │ │ │ ├── deleteSession.ts │ │ │ │ │ │ │ │ ├── describeServer.ts │ │ │ │ │ │ │ │ ├── getAccountInviteCodes.ts │ │ │ │ │ │ │ │ ├── getServiceAuth.ts │ │ │ │ │ │ │ │ ├── getSession.ts │ │ │ │ │ │ │ │ ├── listAppPasswords.ts │ │ │ │ │ │ │ │ ├── refreshSession.ts │ │ │ │ │ │ │ │ ├── requestAccountDelete.ts │ │ │ │ │ │ │ │ ├── requestEmailConfirmation.ts │ │ │ │ │ │ │ │ ├── requestEmailUpdate.ts │ │ │ │ │ │ │ │ ├── requestPasswordReset.ts │ │ │ │ │ │ │ │ ├── reserveSigningKey.ts │ │ │ │ │ │ │ │ ├── resetPassword.ts │ │ │ │ │ │ │ │ ├── revokeAppPassword.ts │ │ │ │ │ │ │ │ └── updateEmail.ts │ │ │ │ │ │ │ ├── sync/ │ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ │ ├── getBlob.ts │ │ │ │ │ │ │ │ ├── getBlocks.ts │ │ │ │ │ │ │ │ ├── getCheckout.ts │ │ │ │ │ │ │ │ ├── getHead.ts │ │ │ │ │ │ │ │ ├── getHostStatus.ts │ │ │ │ │ │ │ │ ├── getLatestCommit.ts │ │ │ │ │ │ │ │ ├── getRecord.ts │ │ │ │ │ │ │ │ ├── getRepo.ts │ │ │ │ │ │ │ │ ├── getRepoStatus.ts │ │ │ │ │ │ │ │ ├── listBlobs.ts │ │ │ │ │ │ │ │ ├── listHosts.ts │ │ │ │ │ │ │ │ ├── listRepos.ts │ │ │ │ │ │ │ │ ├── listReposByCollection.ts │ │ │ │ │ │ │ │ ├── notifyOfUpdate.ts │ │ │ │ │ │ │ │ ├── requestCrawl.ts │ │ │ │ │ │ │ │ └── subscribeRepos.ts │ │ │ │ │ │ │ └── temp/ │ │ │ │ │ │ │ ├── addReservedHandle.ts │ │ │ │ │ │ │ ├── checkHandleAvailability.ts │ │ │ │ │ │ │ ├── checkSignupQueue.ts │ │ │ │ │ │ │ ├── dereferenceScope.ts │ │ │ │ │ │ │ ├── fetchLabels.ts │ │ │ │ │ │ │ ├── requestPhoneVerification.ts │ │ │ │ │ │ │ └── revokeAccountCredentials.ts │ │ │ │ │ │ └── germnetwork/ │ │ │ │ │ │ └── declaration.ts │ │ │ │ │ └── tools/ │ │ │ │ │ └── ozone/ │ │ │ │ │ ├── communication/ │ │ │ │ │ │ ├── createTemplate.ts │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── deleteTemplate.ts │ │ │ │ │ │ ├── listTemplates.ts │ │ │ │ │ │ └── updateTemplate.ts │ │ │ │ │ ├── hosting/ │ │ │ │ │ │ └── getAccountHistory.ts │ │ │ │ │ ├── moderation/ │ │ │ │ │ │ ├── cancelScheduledActions.ts │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── emitEvent.ts │ │ │ │ │ │ ├── getAccountTimeline.ts │ │ │ │ │ │ ├── getEvent.ts │ │ │ │ │ │ ├── getRecord.ts │ │ │ │ │ │ ├── getRecords.ts │ │ │ │ │ │ ├── getRepo.ts │ │ │ │ │ │ ├── getReporterStats.ts │ │ │ │ │ │ ├── getRepos.ts │ │ │ │ │ │ ├── getSubjects.ts │ │ │ │ │ │ ├── listScheduledActions.ts │ │ │ │ │ │ ├── queryEvents.ts │ │ │ │ │ │ ├── queryStatuses.ts │ │ │ │ │ │ ├── scheduleAction.ts │ │ │ │ │ │ └── searchRepos.ts │ │ │ │ │ ├── report/ │ │ │ │ │ │ └── defs.ts │ │ │ │ │ ├── safelink/ │ │ │ │ │ │ ├── addRule.ts │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── queryEvents.ts │ │ │ │ │ │ ├── queryRules.ts │ │ │ │ │ │ ├── removeRule.ts │ │ │ │ │ │ └── updateRule.ts │ │ │ │ │ ├── server/ │ │ │ │ │ │ └── getConfig.ts │ │ │ │ │ ├── set/ │ │ │ │ │ │ ├── addValues.ts │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── deleteSet.ts │ │ │ │ │ │ ├── deleteValues.ts │ │ │ │ │ │ ├── getValues.ts │ │ │ │ │ │ ├── querySets.ts │ │ │ │ │ │ └── upsertSet.ts │ │ │ │ │ ├── setting/ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── listOptions.ts │ │ │ │ │ │ ├── removeOptions.ts │ │ │ │ │ │ └── upsertOption.ts │ │ │ │ │ ├── signature/ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── findCorrelation.ts │ │ │ │ │ │ ├── findRelatedAccounts.ts │ │ │ │ │ │ └── searchAccounts.ts │ │ │ │ │ ├── team/ │ │ │ │ │ │ ├── addMember.ts │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── deleteMember.ts │ │ │ │ │ │ ├── listMembers.ts │ │ │ │ │ │ └── updateMember.ts │ │ │ │ │ └── verification/ │ │ │ │ │ ├── defs.ts │ │ │ │ │ ├── grantVerifications.ts │ │ │ │ │ ├── listVerifications.ts │ │ │ │ │ └── revokeVerifications.ts │ │ │ │ └── util.ts │ │ │ ├── const.ts │ │ │ ├── index.ts │ │ │ ├── mocker.ts │ │ │ ├── moderation/ │ │ │ │ ├── const/ │ │ │ │ │ └── labels.ts │ │ │ │ ├── decision.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mutewords.ts │ │ │ │ ├── subjects/ │ │ │ │ │ ├── account.ts │ │ │ │ │ ├── feed-generator.ts │ │ │ │ │ ├── notification.ts │ │ │ │ │ ├── post.ts │ │ │ │ │ ├── profile.ts │ │ │ │ │ └── user-list.ts │ │ │ │ ├── types.ts │ │ │ │ ├── ui.ts │ │ │ │ └── util.ts │ │ │ ├── predicate.ts │ │ │ ├── rich-text/ │ │ │ │ ├── detection.ts │ │ │ │ ├── rich-text.ts │ │ │ │ ├── sanitization.ts │ │ │ │ ├── unicode.ts │ │ │ │ └── util.ts │ │ │ ├── session-manager.ts │ │ │ ├── types.ts │ │ │ └── util.ts │ │ ├── tests/ │ │ │ ├── atp-agent.test.ts │ │ │ ├── dispatcher.test.ts │ │ │ ├── errors.test.ts │ │ │ ├── moderation-behaviors.test.ts │ │ │ ├── moderation-custom-labels.test.ts │ │ │ ├── moderation-mutewords.test.ts │ │ │ ├── moderation-prefs.test.ts │ │ │ ├── moderation-quoteposts.test.ts │ │ │ ├── moderation.test.ts │ │ │ ├── rich-text-detection.test.ts │ │ │ ├── rich-text-sanitization.test.ts │ │ │ ├── rich-text.test.ts │ │ │ └── util/ │ │ │ ├── echo-server.ts │ │ │ └── moderation-behavior.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── tsconfig.tests.json │ ├── aws/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── bunny.ts │ │ │ ├── cloudfront.ts │ │ │ ├── index.ts │ │ │ ├── kms.ts │ │ │ ├── s3.ts │ │ │ ├── types.ts │ │ │ └── util.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── bsky/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── bin/ │ │ │ └── migration-create.ts │ │ ├── buf.gen.yaml │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── proto/ │ │ │ ├── bsky.proto │ │ │ ├── courier.proto │ │ │ └── rolodex.proto │ │ ├── src/ │ │ │ ├── api/ │ │ │ │ ├── age-assurance/ │ │ │ │ │ ├── const.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── kws/ │ │ │ │ │ │ ├── age-verified.ts │ │ │ │ │ │ ├── const.ts │ │ │ │ │ │ ├── external-payload.test.ts │ │ │ │ │ │ └── external-payload.ts │ │ │ │ │ ├── redirects/ │ │ │ │ │ │ └── kws-age-verified.ts │ │ │ │ │ ├── stash.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── util.ts │ │ │ │ │ └── webhooks/ │ │ │ │ │ └── kws-age-verified.ts │ │ │ │ ├── app/ │ │ │ │ │ └── bsky/ │ │ │ │ │ ├── actor/ │ │ │ │ │ │ ├── getProfile.ts │ │ │ │ │ │ ├── getProfiles.ts │ │ │ │ │ │ ├── getSuggestions.ts │ │ │ │ │ │ ├── searchActors.ts │ │ │ │ │ │ └── searchActorsTypeahead.ts │ │ │ │ │ ├── ageassurance/ │ │ │ │ │ │ ├── begin.ts │ │ │ │ │ │ ├── getConfig.ts │ │ │ │ │ │ └── getState.ts │ │ │ │ │ ├── bookmark/ │ │ │ │ │ │ ├── createBookmark.ts │ │ │ │ │ │ ├── deleteBookmark.ts │ │ │ │ │ │ ├── getBookmarks.ts │ │ │ │ │ │ └── util.ts │ │ │ │ │ ├── contact/ │ │ │ │ │ │ ├── dismissMatch.ts │ │ │ │ │ │ ├── getMatches.ts │ │ │ │ │ │ ├── getSyncStatus.ts │ │ │ │ │ │ ├── importContacts.ts │ │ │ │ │ │ ├── removeData.ts │ │ │ │ │ │ ├── sendNotification.ts │ │ │ │ │ │ ├── startPhoneVerification.ts │ │ │ │ │ │ ├── util.ts │ │ │ │ │ │ └── verifyPhone.ts │ │ │ │ │ ├── draft/ │ │ │ │ │ │ ├── createDraft.ts │ │ │ │ │ │ ├── deleteDraft.ts │ │ │ │ │ │ ├── getDrafts.ts │ │ │ │ │ │ └── updateDraft.ts │ │ │ │ │ ├── feed/ │ │ │ │ │ │ ├── getActorFeeds.ts │ │ │ │ │ │ ├── getActorLikes.ts │ │ │ │ │ │ ├── getAuthorFeed.ts │ │ │ │ │ │ ├── getFeed.ts │ │ │ │ │ │ ├── getFeedGenerator.ts │ │ │ │ │ │ ├── getFeedGenerators.ts │ │ │ │ │ │ ├── getLikes.ts │ │ │ │ │ │ ├── getListFeed.ts │ │ │ │ │ │ ├── getPostThread.ts │ │ │ │ │ │ ├── getPosts.ts │ │ │ │ │ │ ├── getQuotes.ts │ │ │ │ │ │ ├── getRepostedBy.ts │ │ │ │ │ │ ├── getSuggestedFeeds.ts │ │ │ │ │ │ ├── getTimeline.ts │ │ │ │ │ │ └── searchPosts.ts │ │ │ │ │ ├── graph/ │ │ │ │ │ │ ├── getActorStarterPacks.ts │ │ │ │ │ │ ├── getBlocks.ts │ │ │ │ │ │ ├── getFollowers.ts │ │ │ │ │ │ ├── getFollows.ts │ │ │ │ │ │ ├── getKnownFollowers.ts │ │ │ │ │ │ ├── getList.ts │ │ │ │ │ │ ├── getListBlocks.ts │ │ │ │ │ │ ├── getListMutes.ts │ │ │ │ │ │ ├── getLists.ts │ │ │ │ │ │ ├── getListsWithMembership.ts │ │ │ │ │ │ ├── getMutes.ts │ │ │ │ │ │ ├── getRelationships.ts │ │ │ │ │ │ ├── getStarterPack.ts │ │ │ │ │ │ ├── getStarterPacks.ts │ │ │ │ │ │ ├── getStarterPacksWithMembership.ts │ │ │ │ │ │ ├── getSuggestedFollowsByActor.ts │ │ │ │ │ │ ├── muteActor.ts │ │ │ │ │ │ ├── muteActorList.ts │ │ │ │ │ │ ├── muteThread.ts │ │ │ │ │ │ ├── searchStarterPacks.ts │ │ │ │ │ │ ├── unmuteActor.ts │ │ │ │ │ │ ├── unmuteActorList.ts │ │ │ │ │ │ └── unmuteThread.ts │ │ │ │ │ ├── labeler/ │ │ │ │ │ │ └── getServices.ts │ │ │ │ │ ├── notification/ │ │ │ │ │ │ ├── getPreferences.ts │ │ │ │ │ │ ├── getUnreadCount.ts │ │ │ │ │ │ ├── listActivitySubscriptions.ts │ │ │ │ │ │ ├── listNotifications.ts │ │ │ │ │ │ ├── putActivitySubscription.ts │ │ │ │ │ │ ├── putPreferences.ts │ │ │ │ │ │ ├── putPreferencesV2.ts │ │ │ │ │ │ ├── registerPush.ts │ │ │ │ │ │ ├── unregisterPush.ts │ │ │ │ │ │ ├── updateSeen.ts │ │ │ │ │ │ └── util.ts │ │ │ │ │ └── unspecced/ │ │ │ │ │ ├── getAgeAssuranceState.ts │ │ │ │ │ ├── getConfig.ts │ │ │ │ │ ├── getOnboardingSuggestedStarterPacks.ts │ │ │ │ │ ├── getPopularFeedGenerators.ts │ │ │ │ │ ├── getPostThreadOtherV2.ts │ │ │ │ │ ├── getPostThreadV2.ts │ │ │ │ │ ├── getSuggestedFeeds.ts │ │ │ │ │ ├── getSuggestedOnboardingUsers.ts │ │ │ │ │ ├── getSuggestedStarterPacks.ts │ │ │ │ │ ├── getSuggestedUsers.ts │ │ │ │ │ ├── getTaggedSuggestions.ts │ │ │ │ │ ├── getTrendingTopics.ts │ │ │ │ │ ├── getTrends.ts │ │ │ │ │ └── initAgeAssurance.ts │ │ │ │ ├── blob-dispatcher.ts │ │ │ │ ├── blob-resolver.ts │ │ │ │ ├── com/ │ │ │ │ │ └── atproto/ │ │ │ │ │ ├── admin/ │ │ │ │ │ │ ├── getAccountInfos.ts │ │ │ │ │ │ ├── getSubjectStatus.ts │ │ │ │ │ │ └── updateSubjectStatus.ts │ │ │ │ │ ├── identity/ │ │ │ │ │ │ └── resolveHandle.ts │ │ │ │ │ ├── label/ │ │ │ │ │ │ └── queryLabels.ts │ │ │ │ │ ├── repo/ │ │ │ │ │ │ └── getRecord.ts │ │ │ │ │ └── temp/ │ │ │ │ │ └── fetchLabels.ts │ │ │ │ ├── external.ts │ │ │ │ ├── health.ts │ │ │ │ ├── index.ts │ │ │ │ ├── kws/ │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── util.ts │ │ │ │ │ └── webhook.ts │ │ │ │ ├── sitemap.ts │ │ │ │ ├── util.ts │ │ │ │ └── well-known.ts │ │ │ ├── auth-verifier.ts │ │ │ ├── bsync.ts │ │ │ ├── cache/ │ │ │ │ └── read-through.ts │ │ │ ├── config.ts │ │ │ ├── context.ts │ │ │ ├── courier.ts │ │ │ ├── data-plane/ │ │ │ │ ├── bsync/ │ │ │ │ │ └── index.ts │ │ │ │ ├── client/ │ │ │ │ │ ├── hosts.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── util.ts │ │ │ │ ├── index.ts │ │ │ │ └── server/ │ │ │ │ ├── background.ts │ │ │ │ ├── db/ │ │ │ │ │ ├── database-schema.ts │ │ │ │ │ ├── db.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── migrations/ │ │ │ │ │ │ ├── 20230309T045948368Z-init.ts │ │ │ │ │ │ ├── 20230408T152211201Z-notification-init.ts │ │ │ │ │ │ ├── 20230417T210628672Z-moderation-init.ts │ │ │ │ │ │ ├── 20230420T211446071Z-did-cache.ts │ │ │ │ │ │ ├── 20230427T194702079Z-notif-record-index.ts │ │ │ │ │ │ ├── 20230605T144730094Z-post-profile-aggs.ts │ │ │ │ │ │ ├── 20230607T211442112Z-feed-generator-init.ts │ │ │ │ │ │ ├── 20230608T155101190Z-algo-whats-hot-view.ts │ │ │ │ │ │ ├── 20230608T201813132Z-mute-lists.ts │ │ │ │ │ │ ├── 20230608T205147239Z-mutes.ts │ │ │ │ │ │ ├── 20230609T153623961Z-blocks.ts │ │ │ │ │ │ ├── 20230609T232122649Z-actor-deletion-indexes.ts │ │ │ │ │ │ ├── 20230610T203555962Z-suggested-follows.ts │ │ │ │ │ │ ├── 20230611T215300060Z-actor-state.ts │ │ │ │ │ │ ├── 20230620T161134972Z-post-langs.ts │ │ │ │ │ │ ├── 20230627T212437895Z-optional-handle.ts │ │ │ │ │ │ ├── 20230629T220835893Z-remove-post-hierarchy.ts │ │ │ │ │ │ ├── 20230703T045536691Z-feed-and-label-indices.ts │ │ │ │ │ │ ├── 20230720T164800037Z-posts-cursor-idx.ts │ │ │ │ │ │ ├── 20230807T035309811Z-feed-item-delete-invite-for-user-idx.ts │ │ │ │ │ │ ├── 20230808T172902639Z-repo-rev.ts │ │ │ │ │ │ ├── 20230810T203349843Z-action-duration.ts │ │ │ │ │ │ ├── 20230817T195936007Z-native-notifications.ts │ │ │ │ │ │ ├── 20230830T205507322Z-suggested-feeds.ts │ │ │ │ │ │ ├── 20230904T211011773Z-block-lists.ts │ │ │ │ │ │ ├── 20230906T222220386Z-thread-gating.ts │ │ │ │ │ │ ├── 20230920T213858047Z-add-tags-to-post.ts │ │ │ │ │ │ ├── 20230929T192920807Z-record-cursor-indexes.ts │ │ │ │ │ │ ├── 20231003T202833377Z-create-moderation-subject-status.ts │ │ │ │ │ │ ├── 20231220T225126090Z-blob-takedowns.ts │ │ │ │ │ │ ├── 20240124T023719200Z-tagged-suggestions.ts │ │ │ │ │ │ ├── 20240226T225725627Z-labelers.ts │ │ │ │ │ │ ├── 20240530T170337073Z-account-deactivation.ts │ │ │ │ │ │ ├── 20240606T171229898Z-thread-mutes.ts │ │ │ │ │ │ ├── 20240606T222548219Z-starter-packs.ts │ │ │ │ │ │ ├── 20240719T203853939Z-priority-notifs.ts │ │ │ │ │ │ ├── 20240723T220700077Z-quotes-post-aggs.ts │ │ │ │ │ │ ├── 20240723T220703655Z-quotes.ts │ │ │ │ │ │ ├── 20240801T193939827Z-post-gate.ts │ │ │ │ │ │ ├── 20240808T224251220Z-post-gate-flags.ts │ │ │ │ │ │ ├── 20240829T211238293Z-simplify-actor-sync.ts │ │ │ │ │ │ ├── 20240831T134810923Z-pinned-posts.ts │ │ │ │ │ │ ├── 20241114T153108102Z-add-starter-packs-name.ts │ │ │ │ │ │ ├── 20250116T222618297Z-post-embed-video.ts │ │ │ │ │ │ ├── 20250207T174822012Z-add-label-exp.ts │ │ │ │ │ │ ├── 20250404T163421487Z-verifications.ts │ │ │ │ │ │ ├── 20250526T023712742Z-like-repost-via.ts │ │ │ │ │ │ ├── 20250528T221913281Z-add-record-tags.ts │ │ │ │ │ │ ├── 20250602T190357447Z-add-private-data.ts │ │ │ │ │ │ ├── 20250611T140649895Z-add-activity-subscription.ts │ │ │ │ │ │ ├── 20250627T025331240Z-add-actor-age-assurance-columns.ts │ │ │ │ │ │ ├── 20250812T183735692Z-add-bookmarks.ts │ │ │ │ │ │ ├── 20250813T174955711Z-add-post-agg-bookmarks.ts │ │ │ │ │ │ ├── 20251120T004738098Z-update-actor-age-assurance-v2.ts │ │ │ │ │ │ ├── 20260112T133951271Z-add-drafts.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── provider.ts │ │ │ │ │ ├── pagination.ts │ │ │ │ │ ├── tables/ │ │ │ │ │ │ ├── activity-subscription.ts │ │ │ │ │ │ ├── actor-block.ts │ │ │ │ │ │ ├── actor-state.ts │ │ │ │ │ │ ├── actor-sync.ts │ │ │ │ │ │ ├── actor.ts │ │ │ │ │ │ ├── algo.ts │ │ │ │ │ │ ├── blob-takedown.ts │ │ │ │ │ │ ├── bookmark.ts │ │ │ │ │ │ ├── did-cache.ts │ │ │ │ │ │ ├── draft.ts │ │ │ │ │ │ ├── duplicate-record.ts │ │ │ │ │ │ ├── feed-generator.ts │ │ │ │ │ │ ├── feed-item.ts │ │ │ │ │ │ ├── follow.ts │ │ │ │ │ │ ├── label.ts │ │ │ │ │ │ ├── labeler.ts │ │ │ │ │ │ ├── like.ts │ │ │ │ │ │ ├── list-block.ts │ │ │ │ │ │ ├── list-item.ts │ │ │ │ │ │ ├── list-mute.ts │ │ │ │ │ │ ├── list.ts │ │ │ │ │ │ ├── mute.ts │ │ │ │ │ │ ├── notification-push-token.ts │ │ │ │ │ │ ├── notification.ts │ │ │ │ │ │ ├── post-agg.ts │ │ │ │ │ │ ├── post-embed.ts │ │ │ │ │ │ ├── post-gate.ts │ │ │ │ │ │ ├── post.ts │ │ │ │ │ │ ├── private-data.ts │ │ │ │ │ │ ├── profile-agg.ts │ │ │ │ │ │ ├── profile.ts │ │ │ │ │ │ ├── quote.ts │ │ │ │ │ │ ├── record.ts │ │ │ │ │ │ ├── repost.ts │ │ │ │ │ │ ├── starter-pack.ts │ │ │ │ │ │ ├── subscription.ts │ │ │ │ │ │ ├── suggested-feed.ts │ │ │ │ │ │ ├── suggested-follow.ts │ │ │ │ │ │ ├── tagged-suggestion.ts │ │ │ │ │ │ ├── thread-gate.ts │ │ │ │ │ │ ├── thread-mute.ts │ │ │ │ │ │ ├── verification.ts │ │ │ │ │ │ └── view-param.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── util.ts │ │ │ │ ├── index.ts │ │ │ │ ├── indexing/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── plugins/ │ │ │ │ │ │ ├── block.ts │ │ │ │ │ │ ├── chat-declaration.ts │ │ │ │ │ │ ├── feed-generator.ts │ │ │ │ │ │ ├── follow.ts │ │ │ │ │ │ ├── germ-declaration.ts │ │ │ │ │ │ ├── labeler.ts │ │ │ │ │ │ ├── like.ts │ │ │ │ │ │ ├── list-block.ts │ │ │ │ │ │ ├── list-item.ts │ │ │ │ │ │ ├── list.ts │ │ │ │ │ │ ├── notif-declaration.ts │ │ │ │ │ │ ├── post-gate.ts │ │ │ │ │ │ ├── post.ts │ │ │ │ │ │ ├── profile.ts │ │ │ │ │ │ ├── repost.ts │ │ │ │ │ │ ├── starter-pack.ts │ │ │ │ │ │ ├── status.ts │ │ │ │ │ │ ├── thread-gate.ts │ │ │ │ │ │ └── verification.ts │ │ │ │ │ └── processor.ts │ │ │ │ ├── routes/ │ │ │ │ │ ├── activity-subscription.ts │ │ │ │ │ ├── blocks.ts │ │ │ │ │ ├── bookmarks.ts │ │ │ │ │ ├── drafts.ts │ │ │ │ │ ├── feed-gens.ts │ │ │ │ │ ├── feeds.ts │ │ │ │ │ ├── follows.ts │ │ │ │ │ ├── identity.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── interactions.ts │ │ │ │ │ ├── labels.ts │ │ │ │ │ ├── likes.ts │ │ │ │ │ ├── lists.ts │ │ │ │ │ ├── moderation.ts │ │ │ │ │ ├── mutes.ts │ │ │ │ │ ├── notifs.ts │ │ │ │ │ ├── profile.ts │ │ │ │ │ ├── quotes.ts │ │ │ │ │ ├── records.ts │ │ │ │ │ ├── relationships.ts │ │ │ │ │ ├── reposts.ts │ │ │ │ │ ├── search.ts │ │ │ │ │ ├── sitemap.ts │ │ │ │ │ ├── starter-packs.ts │ │ │ │ │ ├── suggestions.ts │ │ │ │ │ ├── sync.ts │ │ │ │ │ └── threads.ts │ │ │ │ ├── subscription.ts │ │ │ │ └── util.ts │ │ │ ├── error.ts │ │ │ ├── etcd.ts │ │ │ ├── feature-gates/ │ │ │ │ ├── README.md │ │ │ │ ├── gates.ts │ │ │ │ ├── index.ts │ │ │ │ ├── metrics.test.ts │ │ │ │ ├── metrics.ts │ │ │ │ ├── types.ts │ │ │ │ ├── utils.test.ts │ │ │ │ └── utils.ts │ │ │ ├── hydration/ │ │ │ │ ├── actor.ts │ │ │ │ ├── feed.ts │ │ │ │ ├── graph.ts │ │ │ │ ├── hydrator.ts │ │ │ │ ├── label.ts │ │ │ │ └── util.ts │ │ │ ├── image/ │ │ │ │ ├── index.ts │ │ │ │ ├── invalidator.ts │ │ │ │ ├── logger.ts │ │ │ │ ├── server.ts │ │ │ │ ├── sharp.ts │ │ │ │ ├── uri.ts │ │ │ │ └── util.ts │ │ │ ├── index.ts │ │ │ ├── kws.ts │ │ │ ├── lexicon/ │ │ │ │ ├── index.ts │ │ │ │ ├── lexicons.ts │ │ │ │ ├── types/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── bsky/ │ │ │ │ │ │ ├── actor/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getPreferences.ts │ │ │ │ │ │ │ ├── getProfile.ts │ │ │ │ │ │ │ ├── getProfiles.ts │ │ │ │ │ │ │ ├── getSuggestions.ts │ │ │ │ │ │ │ ├── profile.ts │ │ │ │ │ │ │ ├── putPreferences.ts │ │ │ │ │ │ │ ├── searchActors.ts │ │ │ │ │ │ │ ├── searchActorsTypeahead.ts │ │ │ │ │ │ │ └── status.ts │ │ │ │ │ │ ├── ageassurance/ │ │ │ │ │ │ │ ├── begin.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getConfig.ts │ │ │ │ │ │ │ └── getState.ts │ │ │ │ │ │ ├── bookmark/ │ │ │ │ │ │ │ ├── createBookmark.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteBookmark.ts │ │ │ │ │ │ │ └── getBookmarks.ts │ │ │ │ │ │ ├── contact/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── dismissMatch.ts │ │ │ │ │ │ │ ├── getMatches.ts │ │ │ │ │ │ │ ├── getSyncStatus.ts │ │ │ │ │ │ │ ├── importContacts.ts │ │ │ │ │ │ │ ├── removeData.ts │ │ │ │ │ │ │ ├── sendNotification.ts │ │ │ │ │ │ │ ├── startPhoneVerification.ts │ │ │ │ │ │ │ └── verifyPhone.ts │ │ │ │ │ │ ├── draft/ │ │ │ │ │ │ │ ├── createDraft.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteDraft.ts │ │ │ │ │ │ │ ├── getDrafts.ts │ │ │ │ │ │ │ └── updateDraft.ts │ │ │ │ │ │ ├── embed/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── external.ts │ │ │ │ │ │ │ ├── images.ts │ │ │ │ │ │ │ ├── record.ts │ │ │ │ │ │ │ ├── recordWithMedia.ts │ │ │ │ │ │ │ └── video.ts │ │ │ │ │ │ ├── feed/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── describeFeedGenerator.ts │ │ │ │ │ │ │ ├── generator.ts │ │ │ │ │ │ │ ├── getActorFeeds.ts │ │ │ │ │ │ │ ├── getActorLikes.ts │ │ │ │ │ │ │ ├── getAuthorFeed.ts │ │ │ │ │ │ │ ├── getFeed.ts │ │ │ │ │ │ │ ├── getFeedGenerator.ts │ │ │ │ │ │ │ ├── getFeedGenerators.ts │ │ │ │ │ │ │ ├── getFeedSkeleton.ts │ │ │ │ │ │ │ ├── getLikes.ts │ │ │ │ │ │ │ ├── getListFeed.ts │ │ │ │ │ │ │ ├── getPostThread.ts │ │ │ │ │ │ │ ├── getPosts.ts │ │ │ │ │ │ │ ├── getQuotes.ts │ │ │ │ │ │ │ ├── getRepostedBy.ts │ │ │ │ │ │ │ ├── getSuggestedFeeds.ts │ │ │ │ │ │ │ ├── getTimeline.ts │ │ │ │ │ │ │ ├── like.ts │ │ │ │ │ │ │ ├── post.ts │ │ │ │ │ │ │ ├── postgate.ts │ │ │ │ │ │ │ ├── repost.ts │ │ │ │ │ │ │ ├── searchPosts.ts │ │ │ │ │ │ │ ├── sendInteractions.ts │ │ │ │ │ │ │ └── threadgate.ts │ │ │ │ │ │ ├── graph/ │ │ │ │ │ │ │ ├── block.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── follow.ts │ │ │ │ │ │ │ ├── getActorStarterPacks.ts │ │ │ │ │ │ │ ├── getBlocks.ts │ │ │ │ │ │ │ ├── getFollowers.ts │ │ │ │ │ │ │ ├── getFollows.ts │ │ │ │ │ │ │ ├── getKnownFollowers.ts │ │ │ │ │ │ │ ├── getList.ts │ │ │ │ │ │ │ ├── getListBlocks.ts │ │ │ │ │ │ │ ├── getListMutes.ts │ │ │ │ │ │ │ ├── getLists.ts │ │ │ │ │ │ │ ├── getListsWithMembership.ts │ │ │ │ │ │ │ ├── getMutes.ts │ │ │ │ │ │ │ ├── getRelationships.ts │ │ │ │ │ │ │ ├── getStarterPack.ts │ │ │ │ │ │ │ ├── getStarterPacks.ts │ │ │ │ │ │ │ ├── getStarterPacksWithMembership.ts │ │ │ │ │ │ │ ├── getSuggestedFollowsByActor.ts │ │ │ │ │ │ │ ├── list.ts │ │ │ │ │ │ │ ├── listblock.ts │ │ │ │ │ │ │ ├── listitem.ts │ │ │ │ │ │ │ ├── muteActor.ts │ │ │ │ │ │ │ ├── muteActorList.ts │ │ │ │ │ │ │ ├── muteThread.ts │ │ │ │ │ │ │ ├── searchStarterPacks.ts │ │ │ │ │ │ │ ├── starterpack.ts │ │ │ │ │ │ │ ├── unmuteActor.ts │ │ │ │ │ │ │ ├── unmuteActorList.ts │ │ │ │ │ │ │ ├── unmuteThread.ts │ │ │ │ │ │ │ └── verification.ts │ │ │ │ │ │ ├── labeler/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getServices.ts │ │ │ │ │ │ │ └── service.ts │ │ │ │ │ │ ├── notification/ │ │ │ │ │ │ │ ├── declaration.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getPreferences.ts │ │ │ │ │ │ │ ├── getUnreadCount.ts │ │ │ │ │ │ │ ├── listActivitySubscriptions.ts │ │ │ │ │ │ │ ├── listNotifications.ts │ │ │ │ │ │ │ ├── putActivitySubscription.ts │ │ │ │ │ │ │ ├── putPreferences.ts │ │ │ │ │ │ │ ├── putPreferencesV2.ts │ │ │ │ │ │ │ ├── registerPush.ts │ │ │ │ │ │ │ ├── unregisterPush.ts │ │ │ │ │ │ │ └── updateSeen.ts │ │ │ │ │ │ ├── richtext/ │ │ │ │ │ │ │ └── facet.ts │ │ │ │ │ │ ├── unspecced/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getAgeAssuranceState.ts │ │ │ │ │ │ │ ├── getConfig.ts │ │ │ │ │ │ │ ├── getOnboardingSuggestedStarterPacks.ts │ │ │ │ │ │ │ ├── getOnboardingSuggestedStarterPacksSkeleton.ts │ │ │ │ │ │ │ ├── getOnboardingSuggestedUsersSkeleton.ts │ │ │ │ │ │ │ ├── getPopularFeedGenerators.ts │ │ │ │ │ │ │ ├── getPostThreadOtherV2.ts │ │ │ │ │ │ │ ├── getPostThreadV2.ts │ │ │ │ │ │ │ ├── getSuggestedFeeds.ts │ │ │ │ │ │ │ ├── getSuggestedFeedsSkeleton.ts │ │ │ │ │ │ │ ├── getSuggestedOnboardingUsers.ts │ │ │ │ │ │ │ ├── getSuggestedStarterPacks.ts │ │ │ │ │ │ │ ├── getSuggestedStarterPacksSkeleton.ts │ │ │ │ │ │ │ ├── getSuggestedUsers.ts │ │ │ │ │ │ │ ├── getSuggestedUsersSkeleton.ts │ │ │ │ │ │ │ ├── getSuggestionsSkeleton.ts │ │ │ │ │ │ │ ├── getTaggedSuggestions.ts │ │ │ │ │ │ │ ├── getTrendingTopics.ts │ │ │ │ │ │ │ ├── getTrends.ts │ │ │ │ │ │ │ ├── getTrendsSkeleton.ts │ │ │ │ │ │ │ ├── initAgeAssurance.ts │ │ │ │ │ │ │ ├── searchActorsSkeleton.ts │ │ │ │ │ │ │ ├── searchPostsSkeleton.ts │ │ │ │ │ │ │ └── searchStarterPacksSkeleton.ts │ │ │ │ │ │ └── video/ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── getJobStatus.ts │ │ │ │ │ │ ├── getUploadLimits.ts │ │ │ │ │ │ └── uploadVideo.ts │ │ │ │ │ ├── chat/ │ │ │ │ │ │ └── bsky/ │ │ │ │ │ │ ├── actor/ │ │ │ │ │ │ │ ├── declaration.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteAccount.ts │ │ │ │ │ │ │ └── exportAccountData.ts │ │ │ │ │ │ ├── convo/ │ │ │ │ │ │ │ ├── acceptConvo.ts │ │ │ │ │ │ │ ├── addReaction.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteMessageForSelf.ts │ │ │ │ │ │ │ ├── getConvo.ts │ │ │ │ │ │ │ ├── getConvoAvailability.ts │ │ │ │ │ │ │ ├── getConvoForMembers.ts │ │ │ │ │ │ │ ├── getLog.ts │ │ │ │ │ │ │ ├── getMessages.ts │ │ │ │ │ │ │ ├── leaveConvo.ts │ │ │ │ │ │ │ ├── listConvos.ts │ │ │ │ │ │ │ ├── muteConvo.ts │ │ │ │ │ │ │ ├── removeReaction.ts │ │ │ │ │ │ │ ├── sendMessage.ts │ │ │ │ │ │ │ ├── sendMessageBatch.ts │ │ │ │ │ │ │ ├── unmuteConvo.ts │ │ │ │ │ │ │ ├── updateAllRead.ts │ │ │ │ │ │ │ └── updateRead.ts │ │ │ │ │ │ └── moderation/ │ │ │ │ │ │ ├── getActorMetadata.ts │ │ │ │ │ │ ├── getMessageContext.ts │ │ │ │ │ │ └── updateActorAccess.ts │ │ │ │ │ └── com/ │ │ │ │ │ ├── atproto/ │ │ │ │ │ │ ├── admin/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteAccount.ts │ │ │ │ │ │ │ ├── disableAccountInvites.ts │ │ │ │ │ │ │ ├── disableInviteCodes.ts │ │ │ │ │ │ │ ├── enableAccountInvites.ts │ │ │ │ │ │ │ ├── getAccountInfo.ts │ │ │ │ │ │ │ ├── getAccountInfos.ts │ │ │ │ │ │ │ ├── getInviteCodes.ts │ │ │ │ │ │ │ ├── getSubjectStatus.ts │ │ │ │ │ │ │ ├── searchAccounts.ts │ │ │ │ │ │ │ ├── sendEmail.ts │ │ │ │ │ │ │ ├── updateAccountEmail.ts │ │ │ │ │ │ │ ├── updateAccountHandle.ts │ │ │ │ │ │ │ ├── updateAccountPassword.ts │ │ │ │ │ │ │ ├── updateAccountSigningKey.ts │ │ │ │ │ │ │ └── updateSubjectStatus.ts │ │ │ │ │ │ ├── identity/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getRecommendedDidCredentials.ts │ │ │ │ │ │ │ ├── refreshIdentity.ts │ │ │ │ │ │ │ ├── requestPlcOperationSignature.ts │ │ │ │ │ │ │ ├── resolveDid.ts │ │ │ │ │ │ │ ├── resolveHandle.ts │ │ │ │ │ │ │ ├── resolveIdentity.ts │ │ │ │ │ │ │ ├── signPlcOperation.ts │ │ │ │ │ │ │ ├── submitPlcOperation.ts │ │ │ │ │ │ │ └── updateHandle.ts │ │ │ │ │ │ ├── label/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── queryLabels.ts │ │ │ │ │ │ │ └── subscribeLabels.ts │ │ │ │ │ │ ├── lexicon/ │ │ │ │ │ │ │ ├── resolveLexicon.ts │ │ │ │ │ │ │ └── schema.ts │ │ │ │ │ │ ├── moderation/ │ │ │ │ │ │ │ ├── createReport.ts │ │ │ │ │ │ │ └── defs.ts │ │ │ │ │ │ ├── repo/ │ │ │ │ │ │ │ ├── applyWrites.ts │ │ │ │ │ │ │ ├── createRecord.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteRecord.ts │ │ │ │ │ │ │ ├── describeRepo.ts │ │ │ │ │ │ │ ├── getRecord.ts │ │ │ │ │ │ │ ├── importRepo.ts │ │ │ │ │ │ │ ├── listMissingBlobs.ts │ │ │ │ │ │ │ ├── listRecords.ts │ │ │ │ │ │ │ ├── putRecord.ts │ │ │ │ │ │ │ ├── strongRef.ts │ │ │ │ │ │ │ └── uploadBlob.ts │ │ │ │ │ │ ├── server/ │ │ │ │ │ │ │ ├── activateAccount.ts │ │ │ │ │ │ │ ├── checkAccountStatus.ts │ │ │ │ │ │ │ ├── confirmEmail.ts │ │ │ │ │ │ │ ├── createAccount.ts │ │ │ │ │ │ │ ├── createAppPassword.ts │ │ │ │ │ │ │ ├── createInviteCode.ts │ │ │ │ │ │ │ ├── createInviteCodes.ts │ │ │ │ │ │ │ ├── createSession.ts │ │ │ │ │ │ │ ├── deactivateAccount.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteAccount.ts │ │ │ │ │ │ │ ├── deleteSession.ts │ │ │ │ │ │ │ ├── describeServer.ts │ │ │ │ │ │ │ ├── getAccountInviteCodes.ts │ │ │ │ │ │ │ ├── getServiceAuth.ts │ │ │ │ │ │ │ ├── getSession.ts │ │ │ │ │ │ │ ├── listAppPasswords.ts │ │ │ │ │ │ │ ├── refreshSession.ts │ │ │ │ │ │ │ ├── requestAccountDelete.ts │ │ │ │ │ │ │ ├── requestEmailConfirmation.ts │ │ │ │ │ │ │ ├── requestEmailUpdate.ts │ │ │ │ │ │ │ ├── requestPasswordReset.ts │ │ │ │ │ │ │ ├── reserveSigningKey.ts │ │ │ │ │ │ │ ├── resetPassword.ts │ │ │ │ │ │ │ ├── revokeAppPassword.ts │ │ │ │ │ │ │ └── updateEmail.ts │ │ │ │ │ │ ├── sync/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getBlob.ts │ │ │ │ │ │ │ ├── getBlocks.ts │ │ │ │ │ │ │ ├── getCheckout.ts │ │ │ │ │ │ │ ├── getHead.ts │ │ │ │ │ │ │ ├── getHostStatus.ts │ │ │ │ │ │ │ ├── getLatestCommit.ts │ │ │ │ │ │ │ ├── getRecord.ts │ │ │ │ │ │ │ ├── getRepo.ts │ │ │ │ │ │ │ ├── getRepoStatus.ts │ │ │ │ │ │ │ ├── listBlobs.ts │ │ │ │ │ │ │ ├── listHosts.ts │ │ │ │ │ │ │ ├── listRepos.ts │ │ │ │ │ │ │ ├── listReposByCollection.ts │ │ │ │ │ │ │ ├── notifyOfUpdate.ts │ │ │ │ │ │ │ ├── requestCrawl.ts │ │ │ │ │ │ │ └── subscribeRepos.ts │ │ │ │ │ │ └── temp/ │ │ │ │ │ │ ├── addReservedHandle.ts │ │ │ │ │ │ ├── checkHandleAvailability.ts │ │ │ │ │ │ ├── checkSignupQueue.ts │ │ │ │ │ │ ├── dereferenceScope.ts │ │ │ │ │ │ ├── fetchLabels.ts │ │ │ │ │ │ ├── requestPhoneVerification.ts │ │ │ │ │ │ └── revokeAccountCredentials.ts │ │ │ │ │ └── germnetwork/ │ │ │ │ │ └── declaration.ts │ │ │ │ └── util.ts │ │ │ ├── logger.ts │ │ │ ├── pipeline.ts │ │ │ ├── proto/ │ │ │ │ ├── bsky_connect.ts │ │ │ │ ├── bsky_pb.ts │ │ │ │ ├── bsync_connect.ts │ │ │ │ ├── bsync_pb.ts │ │ │ │ ├── courier_connect.ts │ │ │ │ ├── courier_pb.ts │ │ │ │ ├── rolodex_connect.ts │ │ │ │ └── rolodex_pb.ts │ │ │ ├── redis.ts │ │ │ ├── rolodex.ts │ │ │ ├── stash.ts │ │ │ ├── util/ │ │ │ │ ├── debug.ts │ │ │ │ ├── http.ts │ │ │ │ ├── retry.ts │ │ │ │ └── uris.ts │ │ │ ├── util.ts │ │ │ └── views/ │ │ │ ├── index.ts │ │ │ ├── threads-v2.ts │ │ │ ├── types.ts │ │ │ └── util.ts │ │ ├── test.env │ │ ├── tests/ │ │ │ ├── __snapshots__/ │ │ │ │ └── feed-generation.test.ts.snap │ │ │ ├── _util.ts │ │ │ ├── admin/ │ │ │ │ ├── admin-auth.test.ts │ │ │ │ └── moderation.test.ts │ │ │ ├── auth.test.ts │ │ │ ├── blob-resolver.test.ts │ │ │ ├── data-plane/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── indexing.test.ts.snap │ │ │ │ ├── db.test.ts │ │ │ │ ├── duplicate-records.test.ts │ │ │ │ ├── handle-invalidation.test.ts │ │ │ │ ├── indexing.test.ts │ │ │ │ ├── subscription.test.ts │ │ │ │ └── thread-mutes.test.ts │ │ │ ├── entryway-auth.test.ts │ │ │ ├── etcd.test.ts │ │ │ ├── feed-generation.test.ts │ │ │ ├── hydration/ │ │ │ │ └── util.test.ts │ │ │ ├── image/ │ │ │ │ ├── server.test.ts │ │ │ │ ├── sharp.test.ts │ │ │ │ └── uri.test.ts │ │ │ ├── label-hydration.test.ts │ │ │ ├── postgates.test.ts │ │ │ ├── query-labels.test.ts │ │ │ ├── redis-cache.test.ts │ │ │ ├── seed/ │ │ │ │ ├── feed-hidden-replies.ts │ │ │ │ ├── get-suggested-starter-packs.ts │ │ │ │ ├── get-trends.ts │ │ │ │ ├── known-followers.ts │ │ │ │ └── postgates.ts │ │ │ ├── server.test.ts │ │ │ ├── sitemap.test.ts │ │ │ ├── stash.test.ts │ │ │ ├── utils.test.ts │ │ │ └── views/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── actor-search.test.ts.snap │ │ │ │ ├── author-feed.test.ts.snap │ │ │ │ ├── block-lists.test.ts.snap │ │ │ │ ├── blocks.test.ts.snap │ │ │ │ ├── bookmarks.test.ts.snap │ │ │ │ ├── follows.test.ts.snap │ │ │ │ ├── labeler-service.test.ts.snap │ │ │ │ ├── likes.test.ts.snap │ │ │ │ ├── list-feed.test.ts.snap │ │ │ │ ├── lists.test.ts.snap │ │ │ │ ├── mute-lists.test.ts.snap │ │ │ │ ├── mutes.test.ts.snap │ │ │ │ ├── notifications.test.ts.snap │ │ │ │ ├── posts.test.ts.snap │ │ │ │ ├── profile.test.ts.snap │ │ │ │ ├── quotes.test.ts.snap │ │ │ │ ├── reposts.test.ts.snap │ │ │ │ ├── starter-packs.test.ts.snap │ │ │ │ ├── thread-v2.test.ts.snap │ │ │ │ ├── thread.test.ts.snap │ │ │ │ ├── threadgating.test.ts.snap │ │ │ │ └── timeline.test.ts.snap │ │ │ ├── account-deactivation.test.ts │ │ │ ├── actor-likes.test.ts │ │ │ ├── actor-search.test.ts │ │ │ ├── age-assurance-v2.test.ts │ │ │ ├── age-assurance.test.ts │ │ │ ├── author-feed.test.ts │ │ │ ├── block-lists.test.ts │ │ │ ├── blocks.test.ts │ │ │ ├── bookmarks.test.ts │ │ │ ├── drafts.test.ts │ │ │ ├── feed-hidden-replies.test.ts │ │ │ ├── feed-view-post.test.ts │ │ │ ├── follows.test.ts │ │ │ ├── get-config.test.ts │ │ │ ├── get-suggested-onboarding-users.test.ts │ │ │ ├── get-suggested-starter-packs.test.ts │ │ │ ├── get-trends.test.ts │ │ │ ├── known-followers.test.ts │ │ │ ├── labeler-service.test.ts │ │ │ ├── labels-needs-review.test.ts │ │ │ ├── labels-takedown.test.ts │ │ │ ├── likes.test.ts │ │ │ ├── list-feed.test.ts │ │ │ ├── lists.test.ts │ │ │ ├── mute-lists.test.ts │ │ │ ├── mutes.test.ts │ │ │ ├── notifications.test.ts │ │ │ ├── post-search.test.ts │ │ │ ├── posts-debug.test.ts │ │ │ ├── posts.test.ts │ │ │ ├── profile-debug.test.ts │ │ │ ├── profile.test.ts │ │ │ ├── quotes.test.ts │ │ │ ├── reposts.test.ts │ │ │ ├── starter-packs.test.ts │ │ │ ├── suggestions.test.ts │ │ │ ├── thread-v2.test.ts │ │ │ ├── thread.test.ts │ │ │ ├── threadgating.test.ts │ │ │ ├── timeline.test.ts │ │ │ └── verification.test.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── tsconfig.tests.json │ ├── bsync/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── bin/ │ │ │ └── migration-create.ts │ │ ├── buf.gen.yaml │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── proto/ │ │ │ └── bsync.proto │ │ ├── src/ │ │ │ ├── client.ts │ │ │ ├── config.ts │ │ │ ├── context.ts │ │ │ ├── db/ │ │ │ │ ├── index.ts │ │ │ │ ├── migrations/ │ │ │ │ │ ├── 20240108T220751294Z-init.ts │ │ │ │ │ ├── 20240717T224303472Z-notif-ops.ts │ │ │ │ │ ├── 20250527T022203400Z-add-operation.ts │ │ │ │ │ ├── 20250603T163446567Z-alter-operation.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── provider.ts │ │ │ │ ├── schema/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── mute_item.ts │ │ │ │ │ ├── mute_op.ts │ │ │ │ │ ├── notif_item.ts │ │ │ │ │ ├── notif_op.ts │ │ │ │ │ └── operation.ts │ │ │ │ └── types.ts │ │ │ ├── index.ts │ │ │ ├── logger.ts │ │ │ ├── proto/ │ │ │ │ ├── bsync_connect.ts │ │ │ │ └── bsync_pb.ts │ │ │ └── routes/ │ │ │ ├── add-mute-operation.ts │ │ │ ├── add-notif-operation.ts │ │ │ ├── auth.ts │ │ │ ├── delete-operations.ts │ │ │ ├── index.ts │ │ │ ├── put-operation.ts │ │ │ ├── scan-mute-operations.ts │ │ │ ├── scan-notif-operations.ts │ │ │ ├── scan-operations.ts │ │ │ └── util.ts │ │ ├── tests/ │ │ │ ├── delete-operations.test.ts │ │ │ ├── mutes.test.ts │ │ │ ├── notifications.test.ts │ │ │ └── operations.test.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── tsconfig.tests.json │ ├── common/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── buffers.ts │ │ │ ├── dates.ts │ │ │ ├── env.ts │ │ │ ├── fs.ts │ │ │ ├── index.ts │ │ │ ├── ipld-multi.ts │ │ │ ├── ipld.ts │ │ │ ├── logger.ts │ │ │ ├── obfuscate.ts │ │ │ └── streams.ts │ │ ├── tests/ │ │ │ ├── ipld-multi.test.ts │ │ │ ├── ipld-vectors.ts │ │ │ ├── ipld.test.ts │ │ │ └── streams.test.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── tsconfig.tests.json │ ├── common-web/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── arrays.ts │ │ │ ├── async.ts │ │ │ ├── check.ts │ │ │ ├── did-doc.ts │ │ │ ├── index.ts │ │ │ ├── ipld.ts │ │ │ ├── retry.ts │ │ │ ├── strings.ts │ │ │ ├── tid.ts │ │ │ ├── times.ts │ │ │ ├── types.ts │ │ │ └── util.ts │ │ ├── tests/ │ │ │ ├── check.test.ts │ │ │ ├── retry.test.ts │ │ │ ├── tid.test.ts │ │ │ └── util.test.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── tsconfig.tests.json │ ├── crypto/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── const.ts │ │ │ ├── did.ts │ │ │ ├── index.ts │ │ │ ├── multibase.ts │ │ │ ├── p256/ │ │ │ │ ├── encoding.ts │ │ │ │ ├── keypair.ts │ │ │ │ ├── operations.ts │ │ │ │ └── plugin.ts │ │ │ ├── plugins.ts │ │ │ ├── random.ts │ │ │ ├── secp256k1/ │ │ │ │ ├── encoding.ts │ │ │ │ ├── keypair.ts │ │ │ │ ├── operations.ts │ │ │ │ └── plugin.ts │ │ │ ├── sha.ts │ │ │ ├── types.ts │ │ │ ├── utils.ts │ │ │ └── verify.ts │ │ ├── tests/ │ │ │ ├── did.test.ts │ │ │ ├── key-compression.test.ts │ │ │ ├── keypairs.test.ts │ │ │ ├── random.test.ts │ │ │ └── signatures.test.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── tsconfig.tests.json │ ├── dev-env/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── bin.ts │ │ │ ├── bsky.ts │ │ │ ├── bsync.ts │ │ │ ├── const.ts │ │ │ ├── env.ts │ │ │ ├── feed-gen.ts │ │ │ ├── index.ts │ │ │ ├── introspect.ts │ │ │ ├── mock/ │ │ │ │ ├── data.ts │ │ │ │ ├── img/ │ │ │ │ │ ├── blur-hash-avatar-b64.ts │ │ │ │ │ └── labeled-img-b64.ts │ │ │ │ └── index.ts │ │ │ ├── moderator-client.ts │ │ │ ├── network-no-appview.ts │ │ │ ├── network.ts │ │ │ ├── ozone.ts │ │ │ ├── pds.ts │ │ │ ├── plc.ts │ │ │ ├── seed/ │ │ │ │ ├── author-feed.ts │ │ │ │ ├── basic.ts │ │ │ │ ├── client.ts │ │ │ │ ├── follows.ts │ │ │ │ ├── index.ts │ │ │ │ ├── likes.ts │ │ │ │ ├── quotes.ts │ │ │ │ ├── reposts.ts │ │ │ │ ├── thread-v2.ts │ │ │ │ ├── users-bulk.ts │ │ │ │ ├── users.ts │ │ │ │ └── verifications.ts │ │ │ ├── service-profile-lexicon.ts │ │ │ ├── service-profile-ozone.ts │ │ │ ├── service-profile.ts │ │ │ ├── types.ts │ │ │ └── util.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── dev-infra/ │ │ ├── README.md │ │ ├── _common.sh │ │ ├── docker-compose.yaml │ │ ├── with-test-db.sh │ │ └── with-test-redis-and-db.sh │ ├── did/ │ │ ├── CHANGELOG.md │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── atproto.ts │ │ │ ├── did-document.ts │ │ │ ├── did-error.ts │ │ │ ├── did.ts │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ └── uri.ts │ │ │ ├── methods/ │ │ │ │ ├── plc.ts │ │ │ │ └── web.ts │ │ │ ├── methods.ts │ │ │ └── utils.ts │ │ ├── tests/ │ │ │ └── methods/ │ │ │ ├── plc.test.ts │ │ │ └── web.test.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── identity/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── did/ │ │ │ │ ├── atproto-data.ts │ │ │ │ ├── base-resolver.ts │ │ │ │ ├── did-resolver.ts │ │ │ │ ├── index.ts │ │ │ │ ├── memory-cache.ts │ │ │ │ ├── plc-resolver.ts │ │ │ │ ├── util.ts │ │ │ │ └── web-resolver.ts │ │ │ ├── errors.ts │ │ │ ├── handle/ │ │ │ │ └── index.ts │ │ │ ├── id-resolver.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── test.env │ │ ├── tests/ │ │ │ ├── did-cache.test.ts │ │ │ ├── did-document.test.ts │ │ │ ├── did-resolver.test.ts │ │ │ ├── handle-resolver.test.ts │ │ │ └── web/ │ │ │ ├── db.ts │ │ │ └── server.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── tsconfig.tests.json │ ├── internal/ │ │ ├── did-resolver/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── create-did-resolver.ts │ │ │ │ ├── did-cache-memory.ts │ │ │ │ ├── did-cache.ts │ │ │ │ ├── did-method.ts │ │ │ │ ├── did-resolver-base.ts │ │ │ │ ├── did-resolver-common.ts │ │ │ │ ├── did-resolver.ts │ │ │ │ ├── index.ts │ │ │ │ ├── methods/ │ │ │ │ │ ├── plc.ts │ │ │ │ │ └── web.ts │ │ │ │ ├── methods.ts │ │ │ │ └── util.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── fetch/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── fetch-error.ts │ │ │ │ ├── fetch-request.ts │ │ │ │ ├── fetch-response.ts │ │ │ │ ├── fetch-wrap.ts │ │ │ │ ├── fetch.ts │ │ │ │ ├── index.ts │ │ │ │ ├── transformed-response.ts │ │ │ │ └── util.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── fetch-node/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ ├── safe.ts │ │ │ │ ├── unicast.ts │ │ │ │ └── util.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── handle-resolver/ │ │ │ ├── CHANGELOG.md │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── atproto-doh-handle-resolver.ts │ │ │ │ ├── atproto-handle-resolver.ts │ │ │ │ ├── cached-handle-resolver.ts │ │ │ │ ├── create-handle-resolver.ts │ │ │ │ ├── handle-resolver-error.ts │ │ │ │ ├── index.ts │ │ │ │ ├── internal-resolvers/ │ │ │ │ │ ├── dns-handle-resolver.ts │ │ │ │ │ └── well-known-handler-resolver.ts │ │ │ │ ├── types.ts │ │ │ │ └── xrpc-handle-resolver.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── handle-resolver-node/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── atproto-handle-resolver-node.ts │ │ │ │ ├── index.ts │ │ │ │ └── node-resolve-txt-factory.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── identity-resolver/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── atproto-identity-resolver.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── create-identity-resolver.ts │ │ │ │ ├── identity-resolver-error.ts │ │ │ │ ├── identity-resolver.ts │ │ │ │ ├── index.ts │ │ │ │ └── util.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── pipe/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ ├── pipe.ts │ │ │ │ └── type.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── rollup-plugin-bundle-manifest/ │ │ │ ├── CHANGELOG.md │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ └── index.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── simple-store/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── cached-getter.ts │ │ │ │ ├── index.ts │ │ │ │ ├── simple-store.ts │ │ │ │ └── util.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── simple-store-memory/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── util.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── simple-store-redis/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ └── index.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ └── xrpc-utils/ │ │ ├── CHANGELOG.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── accept.ts │ │ │ └── index.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── lex/ │ │ ├── lex/ │ │ │ ├── .gitignore │ │ │ ├── CHANGELOG.md │ │ │ ├── README.md │ │ │ ├── bin/ │ │ │ │ └── lex │ │ │ ├── lexicons/ │ │ │ │ └── com/ │ │ │ │ └── example/ │ │ │ │ ├── 4-2/ │ │ │ │ │ └── unsafeDefs.json │ │ │ │ ├── arrayLength.json │ │ │ │ ├── atIdentifier.json │ │ │ │ ├── atUri.json │ │ │ │ ├── boolConst.json │ │ │ │ ├── byteLength.json │ │ │ │ ├── cid.json │ │ │ │ ├── datetime.json │ │ │ │ ├── default.json │ │ │ │ ├── did.json │ │ │ │ ├── handle.json │ │ │ │ ├── integerConst.json │ │ │ │ ├── integerEnum.json │ │ │ │ ├── integerRange.json │ │ │ │ ├── kitchenSink.json │ │ │ │ ├── language.json │ │ │ │ ├── nsid.json │ │ │ │ ├── optional.json │ │ │ │ ├── parametersEnum.json │ │ │ │ ├── procedure.json │ │ │ │ ├── procedureKnownValues.json │ │ │ │ ├── query.json │ │ │ │ ├── stringConst.json │ │ │ │ ├── stringEnum.json │ │ │ │ ├── stringKnownValues.json │ │ │ │ ├── stringLength.json │ │ │ │ ├── stringLengthGrapheme.json │ │ │ │ ├── stringLengthNoMinLength.json │ │ │ │ ├── subscription.json │ │ │ │ ├── token.json │ │ │ │ ├── union.json │ │ │ │ ├── unknown.json │ │ │ │ └── uri.json │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ └── index.ts │ │ │ ├── tests/ │ │ │ │ ├── array.test.ts │ │ │ │ ├── boolean.test.ts │ │ │ │ ├── byte.test.ts │ │ │ │ ├── defaults.test.ts │ │ │ │ ├── integer.test.ts │ │ │ │ ├── parameters.test.ts │ │ │ │ ├── procedure.test.ts │ │ │ │ ├── query.test.ts │ │ │ │ ├── string.test.ts │ │ │ │ ├── token.test.ts │ │ │ │ ├── union.test.ts │ │ │ │ ├── unknown.test.ts │ │ │ │ └── unsafe.test.ts │ │ │ ├── tsconfig.build.json │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.tests.json │ │ │ └── vitest.config.ts │ │ ├── lex-builder/ │ │ │ ├── .gitignore │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── filter.ts │ │ │ │ ├── filtered-indexer.test.ts │ │ │ │ ├── filtered-indexer.ts │ │ │ │ ├── formatter.ts │ │ │ │ ├── index.ts │ │ │ │ ├── lex-builder.ts │ │ │ │ ├── lex-def-builder.ts │ │ │ │ ├── lexicon-directory-indexer.ts │ │ │ │ ├── polyfill.ts │ │ │ │ ├── ref-resolver.test.ts │ │ │ │ ├── ref-resolver.ts │ │ │ │ ├── ts-lang.ts │ │ │ │ └── util.ts │ │ │ ├── tsconfig.build.json │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.tests.json │ │ │ └── vitest.config.ts │ │ ├── lex-cbor/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── encoding.ts │ │ │ │ └── index.ts │ │ │ ├── tests/ │ │ │ │ ├── codec.test.ts │ │ │ │ ├── dag-cbor.test.ts │ │ │ │ ├── data-model-fixtures.json │ │ │ │ ├── fixtures.test.ts │ │ │ │ ├── vectors.test.ts │ │ │ │ └── vectors.ts │ │ │ ├── tsconfig.build.json │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.tests.json │ │ │ ├── vite.config.mts │ │ │ └── vitest.config.ts │ │ ├── lex-client/ │ │ │ ├── .gitignore │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── scripts/ │ │ │ │ └── lex-build.mjs │ │ │ ├── src/ │ │ │ │ ├── agent.test.ts │ │ │ │ ├── agent.ts │ │ │ │ ├── client.ts │ │ │ │ ├── errors.test.ts │ │ │ │ ├── errors.ts │ │ │ │ ├── index.ts │ │ │ │ ├── response.ts │ │ │ │ ├── types.ts │ │ │ │ ├── util.test.ts │ │ │ │ ├── util.ts │ │ │ │ ├── www-authenticate.test.ts │ │ │ │ ├── www-authenticate.ts │ │ │ │ ├── xrpc.test.ts │ │ │ │ └── xrpc.ts │ │ │ ├── tests/ │ │ │ │ └── client.test.ts │ │ │ ├── tsconfig.build.json │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.tests.json │ │ │ └── vitest.config.ts │ │ ├── lex-data/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── blob.test.ts │ │ │ │ ├── blob.ts │ │ │ │ ├── cid-implementation.test.ts │ │ │ │ ├── cid.test.ts │ │ │ │ ├── cid.ts │ │ │ │ ├── index.ts │ │ │ │ ├── lex-equals.test.ts │ │ │ │ ├── lex-equals.ts │ │ │ │ ├── lex-error.test.ts │ │ │ │ ├── lex-error.ts │ │ │ │ ├── lex.test.ts │ │ │ │ ├── lex.ts │ │ │ │ ├── lib/ │ │ │ │ │ ├── nodejs-buffer.ts │ │ │ │ │ ├── util.test.ts │ │ │ │ │ └── util.ts │ │ │ │ ├── object.test.ts │ │ │ │ ├── object.ts │ │ │ │ ├── uint8array-base64.ts │ │ │ │ ├── uint8array-concat.test.ts │ │ │ │ ├── uint8array-concat.ts │ │ │ │ ├── uint8array-from-base64.test.ts │ │ │ │ ├── uint8array-from-base64.ts │ │ │ │ ├── uint8array-to-base64.test.ts │ │ │ │ ├── uint8array-to-base64.ts │ │ │ │ ├── uint8array.test.ts │ │ │ │ ├── uint8array.ts │ │ │ │ ├── utf8-from-base64.test.ts │ │ │ │ ├── utf8-from-base64.ts │ │ │ │ ├── utf8-grapheme-len.test.ts │ │ │ │ ├── utf8-grapheme-len.ts │ │ │ │ ├── utf8-len.test.ts │ │ │ │ ├── utf8-len.ts │ │ │ │ ├── utf8-to-base64.test.ts │ │ │ │ ├── utf8-to-base64.ts │ │ │ │ └── utf8.ts │ │ │ ├── tsconfig.build.json │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.tests.json │ │ │ └── vitest.config.ts │ │ ├── lex-document/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ ├── lexicon-document.test.ts │ │ │ │ ├── lexicon-document.ts │ │ │ │ ├── lexicon-indexer.ts │ │ │ │ ├── lexicon-iterable-indexer.ts │ │ │ │ ├── lexicon-schema-builder.test.ts │ │ │ │ └── lexicon-schema-builder.ts │ │ │ ├── tests/ │ │ │ │ ├── fixtures.test.ts │ │ │ │ ├── lexicon-invalid.json │ │ │ │ └── lexicon-valid.json │ │ │ ├── tsconfig.build.json │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.tests.json │ │ │ └── vitest.config.ts │ │ ├── lex-installer/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── fs.ts │ │ │ │ ├── index.ts │ │ │ │ ├── lex-installer.ts │ │ │ │ ├── lexicons-manifest.test.ts │ │ │ │ ├── lexicons-manifest.ts │ │ │ │ ├── nsid-map.ts │ │ │ │ └── nsid-set.ts │ │ │ ├── tsconfig.build.json │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.tests.json │ │ │ └── vitest.config.ts │ │ ├── lex-json/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── blob.ts │ │ │ │ ├── bytes.test.ts │ │ │ │ ├── bytes.ts │ │ │ │ ├── index.ts │ │ │ │ ├── json.ts │ │ │ │ ├── lex-json.test.ts │ │ │ │ ├── lex-json.ts │ │ │ │ └── link.ts │ │ │ ├── tests/ │ │ │ │ ├── data-model-invalid.json │ │ │ │ ├── data-model-valid.json │ │ │ │ └── fixtures.test.ts │ │ │ ├── tsconfig.build.json │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.tests.json │ │ │ └── vitest.config.ts │ │ ├── lex-password-session/ │ │ │ ├── .gitignore │ │ │ ├── CHANGELOG.md │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── scripts/ │ │ │ │ └── lex-build.mjs │ │ │ ├── src/ │ │ │ │ ├── error.ts │ │ │ │ ├── index.ts │ │ │ │ ├── password-session-utils.test.ts │ │ │ │ ├── password-session.test.ts │ │ │ │ ├── password-session.ts │ │ │ │ └── util.ts │ │ │ ├── tsconfig.build.json │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.tests.json │ │ │ └── vitest.config.ts │ │ ├── lex-resolver/ │ │ │ ├── .gitignore │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── scripts/ │ │ │ │ └── lex-build.mjs │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ ├── lex-resolver-error.ts │ │ │ │ └── lex-resolver.ts │ │ │ ├── tests/ │ │ │ │ └── index.test.ts │ │ │ ├── tsconfig.build.json │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.tests.json │ │ │ └── vitest.config.ts │ │ ├── lex-schema/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── core/ │ │ │ │ │ ├── $type.test.ts │ │ │ │ │ ├── $type.ts │ │ │ │ │ ├── record-key.ts │ │ │ │ │ ├── result.ts │ │ │ │ │ ├── schema.ts │ │ │ │ │ ├── standard-schema.test.ts │ │ │ │ │ ├── standard-schema.ts │ │ │ │ │ ├── string-format.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── validation-error.ts │ │ │ │ │ ├── validation-issue.ts │ │ │ │ │ └── validator.ts │ │ │ │ ├── core.ts │ │ │ │ ├── external.ts │ │ │ │ ├── helpers.test.ts │ │ │ │ ├── helpers.ts │ │ │ │ ├── index.ts │ │ │ │ ├── schema/ │ │ │ │ │ ├── array.test.ts │ │ │ │ │ ├── array.ts │ │ │ │ │ ├── blob.test.ts │ │ │ │ │ ├── blob.ts │ │ │ │ │ ├── boolean.test.ts │ │ │ │ │ ├── boolean.ts │ │ │ │ │ ├── bytes.test.ts │ │ │ │ │ ├── bytes.ts │ │ │ │ │ ├── cid.test.ts │ │ │ │ │ ├── cid.ts │ │ │ │ │ ├── custom.test.ts │ │ │ │ │ ├── custom.ts │ │ │ │ │ ├── dict.test.ts │ │ │ │ │ ├── dict.ts │ │ │ │ │ ├── discriminated-union.test.ts │ │ │ │ │ ├── discriminated-union.ts │ │ │ │ │ ├── enum.test.ts │ │ │ │ │ ├── enum.ts │ │ │ │ │ ├── integer.test.ts │ │ │ │ │ ├── integer.ts │ │ │ │ │ ├── intersection.test.ts │ │ │ │ │ ├── intersection.ts │ │ │ │ │ ├── lex-map.test.ts │ │ │ │ │ ├── lex-map.ts │ │ │ │ │ ├── lex-value.test.ts │ │ │ │ │ ├── lex-value.ts │ │ │ │ │ ├── literal.test.ts │ │ │ │ │ ├── literal.ts │ │ │ │ │ ├── never.test.ts │ │ │ │ │ ├── never.ts │ │ │ │ │ ├── null.test.ts │ │ │ │ │ ├── null.ts │ │ │ │ │ ├── nullable.test.ts │ │ │ │ │ ├── nullable.ts │ │ │ │ │ ├── object.test.ts │ │ │ │ │ ├── object.ts │ │ │ │ │ ├── optional.test.ts │ │ │ │ │ ├── optional.ts │ │ │ │ │ ├── params.test.ts │ │ │ │ │ ├── params.ts │ │ │ │ │ ├── payload.test.ts │ │ │ │ │ ├── payload.ts │ │ │ │ │ ├── permission-set.test.ts │ │ │ │ │ ├── permission-set.ts │ │ │ │ │ ├── permission.test.ts │ │ │ │ │ ├── permission.ts │ │ │ │ │ ├── procedure.test.ts │ │ │ │ │ ├── procedure.ts │ │ │ │ │ ├── query.test.ts │ │ │ │ │ ├── query.ts │ │ │ │ │ ├── record.test.ts │ │ │ │ │ ├── record.ts │ │ │ │ │ ├── ref.test.ts │ │ │ │ │ ├── ref.ts │ │ │ │ │ ├── refine.test.ts │ │ │ │ │ ├── refine.ts │ │ │ │ │ ├── regexp.test.ts │ │ │ │ │ ├── regexp.ts │ │ │ │ │ ├── string.test.ts │ │ │ │ │ ├── string.ts │ │ │ │ │ ├── subscription.test.ts │ │ │ │ │ ├── subscription.ts │ │ │ │ │ ├── token.test.ts │ │ │ │ │ ├── token.ts │ │ │ │ │ ├── typed-object.test.ts │ │ │ │ │ ├── typed-object.ts │ │ │ │ │ ├── typed-ref.test.ts │ │ │ │ │ ├── typed-ref.ts │ │ │ │ │ ├── typed-union.test.ts │ │ │ │ │ ├── typed-union.ts │ │ │ │ │ ├── union.test.ts │ │ │ │ │ ├── union.ts │ │ │ │ │ ├── unknown.test.ts │ │ │ │ │ ├── unknown.ts │ │ │ │ │ └── with-default.ts │ │ │ │ ├── schema.ts │ │ │ │ └── util/ │ │ │ │ ├── array-agg.test.ts │ │ │ │ ├── array-agg.ts │ │ │ │ ├── assertion-util.ts │ │ │ │ ├── if-any.ts │ │ │ │ ├── lazy-property.ts │ │ │ │ └── memoize.ts │ │ │ ├── tests/ │ │ │ │ └── l.test.ts │ │ │ ├── tsconfig.build.json │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.tests.json │ │ │ └── vitest.config.ts │ │ └── lex-server/ │ │ ├── .npmignore │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── examples/ │ │ │ └── subscription.mjs │ │ ├── nodejs.d.ts │ │ ├── nodejs.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── errors.test.ts │ │ │ ├── errors.ts │ │ │ ├── index.ts │ │ │ ├── lex-router.test.ts │ │ │ ├── lex-router.ts │ │ │ ├── lib/ │ │ │ │ ├── drain-websocket.ts │ │ │ │ ├── sleep.ts │ │ │ │ ├── www-authenticate.test.ts │ │ │ │ └── www-authenticate.ts │ │ │ ├── nodejs.test.ts │ │ │ ├── nodejs.ts │ │ │ └── service-auth.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.examples.json │ │ ├── tsconfig.json │ │ ├── tsconfig.tests.json │ │ └── vitest.config.ts │ ├── lex-cli/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── codegen/ │ │ │ │ ├── client.ts │ │ │ │ ├── common.ts │ │ │ │ ├── lex-gen.ts │ │ │ │ ├── server.ts │ │ │ │ └── util.ts │ │ │ ├── index.ts │ │ │ ├── mdgen/ │ │ │ │ └── index.ts │ │ │ ├── types.ts │ │ │ └── util.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── lexicon/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── blob-refs.ts │ │ │ ├── index.ts │ │ │ ├── lexicons.ts │ │ │ ├── serialize.ts │ │ │ ├── types.ts │ │ │ ├── util.ts │ │ │ ├── validation.ts │ │ │ └── validators/ │ │ │ ├── blob.ts │ │ │ ├── complex.ts │ │ │ ├── formats.ts │ │ │ ├── primitives.ts │ │ │ └── xrpc.ts │ │ ├── tests/ │ │ │ ├── _scaffolds/ │ │ │ │ └── lexicons.ts │ │ │ └── general.test.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── tsconfig.tests.json │ ├── lexicon-resolver/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── lexicon.ts │ │ │ ├── lexicons/ │ │ │ │ ├── com/ │ │ │ │ │ ├── atproto/ │ │ │ │ │ │ ├── lexicon/ │ │ │ │ │ │ │ ├── schema.defs.ts │ │ │ │ │ │ │ └── schema.ts │ │ │ │ │ │ ├── lexicon.ts │ │ │ │ │ │ ├── sync/ │ │ │ │ │ │ │ ├── getRecord.defs.ts │ │ │ │ │ │ │ └── getRecord.ts │ │ │ │ │ │ └── sync.ts │ │ │ │ │ └── atproto.ts │ │ │ │ ├── com.ts │ │ │ │ └── index.ts │ │ │ ├── record.ts │ │ │ └── util.ts │ │ ├── tests/ │ │ │ ├── lexicon.test.ts │ │ │ └── record.test.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── tsconfig.tests.json │ ├── oauth/ │ │ ├── jwk/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── alg.ts │ │ │ │ ├── errors.ts │ │ │ │ ├── index.ts │ │ │ │ ├── jwk.ts │ │ │ │ ├── jwks.ts │ │ │ │ ├── jwt-decode.ts │ │ │ │ ├── jwt-verify.ts │ │ │ │ ├── jwt.ts │ │ │ │ ├── key.ts │ │ │ │ ├── keyset.ts │ │ │ │ └── util.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── jwk-jose/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ ├── jose-key.ts │ │ │ │ └── util.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── jwk-webcrypto/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ ├── util.ts │ │ │ │ └── webcrypto-key.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── oauth-client/ │ │ │ ├── CHANGELOG.md │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── constants.ts │ │ │ │ ├── errors/ │ │ │ │ │ ├── auth-method-unsatisfiable-error.ts │ │ │ │ │ ├── token-invalid-error.ts │ │ │ │ │ ├── token-refresh-error.ts │ │ │ │ │ └── token-revoked-error.ts │ │ │ │ ├── fetch-dpop.ts │ │ │ │ ├── identity-resolver.ts │ │ │ │ ├── index.ts │ │ │ │ ├── lock.ts │ │ │ │ ├── oauth-authorization-server-metadata-resolver.ts │ │ │ │ ├── oauth-callback-error.ts │ │ │ │ ├── oauth-client-auth.ts │ │ │ │ ├── oauth-client.ts │ │ │ │ ├── oauth-protected-resource-metadata-resolver.ts │ │ │ │ ├── oauth-resolver-error.ts │ │ │ │ ├── oauth-resolver.ts │ │ │ │ ├── oauth-response-error.ts │ │ │ │ ├── oauth-server-agent.ts │ │ │ │ ├── oauth-server-factory.ts │ │ │ │ ├── oauth-session.ts │ │ │ │ ├── runtime-implementation.ts │ │ │ │ ├── runtime.ts │ │ │ │ ├── session-getter.ts │ │ │ │ ├── state-store.ts │ │ │ │ ├── types.ts │ │ │ │ ├── util.ts │ │ │ │ └── validate-client-metadata.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── oauth-client-browser/ │ │ │ ├── CHANGELOG.md │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── browser-oauth-client.ts │ │ │ │ ├── browser-oauth-database.ts │ │ │ │ ├── browser-runtime-implementation.ts │ │ │ │ ├── errors.ts │ │ │ │ ├── index.ts │ │ │ │ ├── indexed-db/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── db-index.ts │ │ │ │ │ ├── db-object-store.ts │ │ │ │ │ ├── db-transaction.ts │ │ │ │ │ ├── db.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── schema.ts │ │ │ │ │ └── util.ts │ │ │ │ ├── indexed-db-store.ts │ │ │ │ └── util.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── oauth-client-browser-example/ │ │ │ ├── .gitignore │ │ │ ├── CHANGELOG.md │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── server.js │ │ │ ├── src/ │ │ │ │ ├── App.tsx │ │ │ │ ├── Home.tsx │ │ │ │ ├── components/ │ │ │ │ │ ├── AtmosphereSignInDialog.tsx │ │ │ │ │ ├── AtmosphereSignInForm.tsx │ │ │ │ │ ├── Button.tsx │ │ │ │ │ ├── ButtonDropdown.tsx │ │ │ │ │ ├── Icons.tsx │ │ │ │ │ ├── JsonQueryResult.tsx │ │ │ │ │ ├── Layout.tsx │ │ │ │ │ ├── ProfileInfo.tsx │ │ │ │ │ ├── SessionInfo.tsx │ │ │ │ │ ├── Spinner.tsx │ │ │ │ │ ├── TokenInfo.tsx │ │ │ │ │ └── UserMenu.tsx │ │ │ │ ├── constants.ts │ │ │ │ ├── index.css │ │ │ │ ├── index.tsx │ │ │ │ ├── lexicons.ts │ │ │ │ ├── lib/ │ │ │ │ │ ├── use-abortable-effect.ts │ │ │ │ │ ├── use-blob-url.ts │ │ │ │ │ ├── use-click-outside.ts │ │ │ │ │ ├── use-escape-key.ts │ │ │ │ │ └── use-random-string.ts │ │ │ │ ├── oauthClient.ts │ │ │ │ ├── providers/ │ │ │ │ │ ├── AuthenticationProvider.tsx │ │ │ │ │ ├── BskyClientProvider.tsx │ │ │ │ │ └── OAuthProvider.tsx │ │ │ │ └── queries/ │ │ │ │ ├── use-get-token-info-query.ts │ │ │ │ ├── use-lex-query.ts │ │ │ │ └── use-lex-record.ts │ │ │ ├── tsconfig.build.json │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.tools.json │ │ │ └── vite.config.mjs │ │ ├── oauth-client-expo/ │ │ │ ├── .gitignore │ │ │ ├── CHANGELOG.md │ │ │ ├── README.md │ │ │ ├── android/ │ │ │ │ ├── .editorconfig │ │ │ │ ├── build.gradle │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── expo/ │ │ │ │ └── modules/ │ │ │ │ └── atprotooauthclient/ │ │ │ │ ├── Crypto.kt │ │ │ │ ├── ExpoAtprotoOAuthClientModule.kt │ │ │ │ ├── Jose.kt │ │ │ │ └── Records.kt │ │ │ ├── expo-module.config.json │ │ │ ├── ios/ │ │ │ │ ├── Crypto.swift │ │ │ │ ├── ExpoAtprotoOAuthClient.podspec │ │ │ │ ├── ExpoAtprotoOAuthClientModule.swift │ │ │ │ ├── Jose.swift │ │ │ │ └── Records.swift │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── ExpoAtprotoOAuthClientModule.ts │ │ │ │ ├── ExpoAtprotoOAuthClientModule.types.ts │ │ │ │ ├── expo-oauth-client-interface.ts │ │ │ │ ├── expo-oauth-client-options.ts │ │ │ │ ├── expo-oauth-client.d.ts │ │ │ │ ├── expo-oauth-client.native.ts │ │ │ │ ├── expo-oauth-client.web.ts │ │ │ │ ├── index.ts │ │ │ │ ├── polyfill.d.ts │ │ │ │ ├── polyfill.native.ts │ │ │ │ ├── polyfill.web.ts │ │ │ │ └── utils/ │ │ │ │ ├── expo-key.ts │ │ │ │ ├── mmkv-simple-store-ttl.ts │ │ │ │ ├── mmkv-simple-store.ts │ │ │ │ └── stores.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── oauth-client-node/ │ │ │ ├── CHANGELOG.md │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ ├── node-dpop-store.ts │ │ │ │ ├── node-oauth-client.ts │ │ │ │ └── util.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── oauth-provider/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── access-token/ │ │ │ │ │ └── access-token-mode.ts │ │ │ │ ├── account/ │ │ │ │ │ ├── account-manager.ts │ │ │ │ │ ├── account-store.ts │ │ │ │ │ ├── sign-in-data.ts │ │ │ │ │ └── sign-up-input.ts │ │ │ │ ├── client/ │ │ │ │ │ ├── client-auth.ts │ │ │ │ │ ├── client-data.ts │ │ │ │ │ ├── client-id.ts │ │ │ │ │ ├── client-info.ts │ │ │ │ │ ├── client-manager.ts │ │ │ │ │ ├── client-store.ts │ │ │ │ │ ├── client-utils.ts │ │ │ │ │ └── client.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── customization/ │ │ │ │ │ ├── branding.ts │ │ │ │ │ ├── build-customization-css.ts │ │ │ │ │ ├── build-customization-data.ts │ │ │ │ │ ├── colors.ts │ │ │ │ │ ├── customization.ts │ │ │ │ │ └── links.ts │ │ │ │ ├── device/ │ │ │ │ │ ├── device-data.ts │ │ │ │ │ ├── device-id.ts │ │ │ │ │ ├── device-manager.ts │ │ │ │ │ ├── device-store.ts │ │ │ │ │ └── session-id.ts │ │ │ │ ├── dpop/ │ │ │ │ │ ├── dpop-manager.ts │ │ │ │ │ ├── dpop-nonce.ts │ │ │ │ │ └── dpop-proof.ts │ │ │ │ ├── errors/ │ │ │ │ │ ├── access-denied-error.ts │ │ │ │ │ ├── account-selection-required-error.ts │ │ │ │ │ ├── authorization-error.ts │ │ │ │ │ ├── consent-required-error.ts │ │ │ │ │ ├── error-parser.ts │ │ │ │ │ ├── handle-unavailable-error.ts │ │ │ │ │ ├── invalid-authorization-details-error.ts │ │ │ │ │ ├── invalid-client-error.ts │ │ │ │ │ ├── invalid-client-id-error.ts │ │ │ │ │ ├── invalid-client-metadata-error.ts │ │ │ │ │ ├── invalid-dpop-key-binding-error.ts │ │ │ │ │ ├── invalid-dpop-proof-error.ts │ │ │ │ │ ├── invalid-grant-error.ts │ │ │ │ │ ├── invalid-invite-code-error.ts │ │ │ │ │ ├── invalid-redirect-uri-error.ts │ │ │ │ │ ├── invalid-request-error.ts │ │ │ │ │ ├── invalid-scope-error.ts │ │ │ │ │ ├── invalid-token-error.ts │ │ │ │ │ ├── login-required-error.ts │ │ │ │ │ ├── oauth-error.ts │ │ │ │ │ ├── second-authentication-factor-required-error.ts │ │ │ │ │ ├── unauthorized-client-error.ts │ │ │ │ │ ├── use-dpop-nonce-error.ts │ │ │ │ │ └── www-authenticate-error.ts │ │ │ │ ├── index.ts │ │ │ │ ├── lexicon/ │ │ │ │ │ ├── lexicon-data.ts │ │ │ │ │ ├── lexicon-getter.ts │ │ │ │ │ ├── lexicon-manager.ts │ │ │ │ │ └── lexicon-store.ts │ │ │ │ ├── lib/ │ │ │ │ │ ├── csp/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── hcaptcha.ts │ │ │ │ │ ├── html/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── build-document.ts │ │ │ │ │ │ ├── escapers.ts │ │ │ │ │ │ ├── html.ts │ │ │ │ │ │ ├── hydration-data.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── tags.ts │ │ │ │ │ │ └── util.ts │ │ │ │ │ ├── http/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── accept.ts │ │ │ │ │ │ ├── context.ts │ │ │ │ │ │ ├── headers.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── method.ts │ │ │ │ │ │ ├── middleware.ts │ │ │ │ │ │ ├── parser.ts │ │ │ │ │ │ ├── path.ts │ │ │ │ │ │ ├── request.ts │ │ │ │ │ │ ├── response.ts │ │ │ │ │ │ ├── route.ts │ │ │ │ │ │ ├── router.ts │ │ │ │ │ │ ├── security-headers.ts │ │ │ │ │ │ ├── stream.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── url.ts │ │ │ │ │ ├── nsid.ts │ │ │ │ │ ├── redis.ts │ │ │ │ │ ├── util/ │ │ │ │ │ │ ├── authorization-header.ts │ │ │ │ │ │ ├── cast.ts │ │ │ │ │ │ ├── color.ts │ │ │ │ │ │ ├── crypto.ts │ │ │ │ │ │ ├── date.ts │ │ │ │ │ │ ├── error.ts │ │ │ │ │ │ ├── function.ts │ │ │ │ │ │ ├── locale.ts │ │ │ │ │ │ ├── object.ts │ │ │ │ │ │ ├── redirect-uri.ts │ │ │ │ │ │ ├── time.ts │ │ │ │ │ │ ├── type.ts │ │ │ │ │ │ ├── ui8.ts │ │ │ │ │ │ ├── well-known.ts │ │ │ │ │ │ └── zod-error.ts │ │ │ │ │ ├── write-form-redirect.ts │ │ │ │ │ └── write-html.ts │ │ │ │ ├── metadata/ │ │ │ │ │ └── build-metadata.ts │ │ │ │ ├── oauth-client.ts │ │ │ │ ├── oauth-dpop.ts │ │ │ │ ├── oauth-errors.ts │ │ │ │ ├── oauth-hooks.ts │ │ │ │ ├── oauth-middleware.ts │ │ │ │ ├── oauth-provider.ts │ │ │ │ ├── oauth-store.ts │ │ │ │ ├── oauth-verifier.ts │ │ │ │ ├── oidc/ │ │ │ │ │ └── sub.ts │ │ │ │ ├── replay/ │ │ │ │ │ ├── replay-manager.ts │ │ │ │ │ ├── replay-store-memory.ts │ │ │ │ │ ├── replay-store-redis.ts │ │ │ │ │ └── replay-store.ts │ │ │ │ ├── request/ │ │ │ │ │ ├── code.ts │ │ │ │ │ ├── request-data.ts │ │ │ │ │ ├── request-id.ts │ │ │ │ │ ├── request-manager.ts │ │ │ │ │ ├── request-store.ts │ │ │ │ │ └── request-uri.ts │ │ │ │ ├── result/ │ │ │ │ │ ├── authorization-redirect-parameters.ts │ │ │ │ │ ├── authorization-result-authorize-page.ts │ │ │ │ │ └── authorization-result-redirect.ts │ │ │ │ ├── router/ │ │ │ │ │ ├── assets/ │ │ │ │ │ │ ├── assets-manifest.ts │ │ │ │ │ │ ├── assets.ts │ │ │ │ │ │ ├── csrf.ts │ │ │ │ │ │ ├── send-account-page.ts │ │ │ │ │ │ ├── send-authorization-page.ts │ │ │ │ │ │ ├── send-cookie-error-page.ts │ │ │ │ │ │ ├── send-error-page.ts │ │ │ │ │ │ └── send-redirect.ts │ │ │ │ │ ├── create-account-page-middleware.ts │ │ │ │ │ ├── create-api-middleware.ts │ │ │ │ │ ├── create-authorization-page-middleware.ts │ │ │ │ │ ├── create-oauth-middleware.ts │ │ │ │ │ ├── error-handler.ts │ │ │ │ │ └── middleware-options.ts │ │ │ │ ├── signer/ │ │ │ │ │ ├── access-token-payload.ts │ │ │ │ │ ├── api-token-payload.ts │ │ │ │ │ └── signer.ts │ │ │ │ ├── token/ │ │ │ │ │ ├── refresh-token.ts │ │ │ │ │ ├── token-claims.ts │ │ │ │ │ ├── token-data.ts │ │ │ │ │ ├── token-id.ts │ │ │ │ │ ├── token-manager.ts │ │ │ │ │ └── token-store.ts │ │ │ │ └── types/ │ │ │ │ ├── authorization-response-error.ts │ │ │ │ ├── color-hue.ts │ │ │ │ ├── email-otp.ts │ │ │ │ ├── email.ts │ │ │ │ ├── handle.ts │ │ │ │ ├── invite-code.ts │ │ │ │ ├── par-response-error.ts │ │ │ │ ├── password.ts │ │ │ │ └── rgb-color.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── oauth-provider-api/ │ │ │ ├── CHANGELOG.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── api-endpoints.ts │ │ │ │ ├── contants.ts │ │ │ │ ├── customization-data.ts │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── oauth-provider-frontend/ │ │ │ ├── .gitignore │ │ │ ├── .linguirc │ │ │ ├── CHANGELOG.md │ │ │ ├── account.html │ │ │ ├── hydration-data.d.ts │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── account-page.tsx │ │ │ │ ├── api/ │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── json-client.ts │ │ │ │ ├── components/ │ │ │ │ │ ├── AccountSelector.tsx │ │ │ │ │ ├── Admonition.tsx │ │ │ │ │ ├── Avatar.tsx │ │ │ │ │ ├── Button.tsx │ │ │ │ │ ├── ContentCard.tsx │ │ │ │ │ ├── Dialog.tsx │ │ │ │ │ ├── Divider.tsx │ │ │ │ │ ├── ErrorScreen.tsx │ │ │ │ │ ├── Footer.tsx │ │ │ │ │ ├── Layout.tsx │ │ │ │ │ ├── Link.tsx │ │ │ │ │ ├── Loader.tsx │ │ │ │ │ ├── LocaleSelector.tsx │ │ │ │ │ ├── Nav.tsx │ │ │ │ │ ├── Prompt.tsx │ │ │ │ │ ├── Toast.tsx │ │ │ │ │ ├── forms/ │ │ │ │ │ │ ├── Checkbox.tsx │ │ │ │ │ │ ├── Errors.tsx │ │ │ │ │ │ ├── Fieldset.tsx │ │ │ │ │ │ ├── Item.tsx │ │ │ │ │ │ ├── Label.tsx │ │ │ │ │ │ ├── Text.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── util/ │ │ │ │ │ └── Palette.tsx │ │ │ │ ├── data/ │ │ │ │ │ ├── useAccountSessionsQuery.ts │ │ │ │ │ ├── useClientName.ts │ │ │ │ │ ├── useCurrentSession.ts │ │ │ │ │ ├── useCustomizationData.ts │ │ │ │ │ ├── useDeviceSessionsQuery.ts │ │ │ │ │ ├── useFriendlyClientId.ts │ │ │ │ │ ├── useHasAccounts.ts │ │ │ │ │ ├── useHydrationData.ts │ │ │ │ │ ├── useOAuthSessionsQuery.ts │ │ │ │ │ ├── usePasswordConfirmMutation.ts │ │ │ │ │ ├── usePasswordResetMutation.ts │ │ │ │ │ ├── useRevokeAccountSessionMutation.ts │ │ │ │ │ ├── useRevokeOAuthSessionMutation.ts │ │ │ │ │ ├── useSignInMutation.tsx │ │ │ │ │ └── useSignOutMutation.ts │ │ │ │ ├── locales/ │ │ │ │ │ ├── activateLocale.ts │ │ │ │ │ ├── an/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── ast/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── ca/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── da/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── de/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── el/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── en/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── en-GB/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── es/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── eu/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── fi/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── fr/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── ga/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── gl/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── hi/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── hu/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── ia/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── id/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── it/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── ja/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── km/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── ko/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── locales.ts │ │ │ │ │ ├── ne/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── nl/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── pl/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── pt-BR/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── ro/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── ru/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── setup.ts │ │ │ │ │ ├── sv/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── th/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── tr/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── uk/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── vi/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── zh-CN/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── zh-HK/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ └── zh-TW/ │ │ │ │ │ └── messages.po │ │ │ │ ├── routeTree.gen.ts │ │ │ │ ├── routes/ │ │ │ │ │ ├── __root.tsx │ │ │ │ │ └── account/ │ │ │ │ │ ├── _appLayout/ │ │ │ │ │ │ └── $sub.tsx │ │ │ │ │ ├── _appLayout.tsx │ │ │ │ │ ├── _minimalLayout/ │ │ │ │ │ │ ├── branding.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── reset-password.tsx │ │ │ │ │ │ └── sign-in.tsx │ │ │ │ │ └── _minimalLayout.tsx │ │ │ │ ├── style.css │ │ │ │ ├── styles/ │ │ │ │ │ ├── radix-dialog.css │ │ │ │ │ ├── radix-popover.css │ │ │ │ │ └── radix-toast.css │ │ │ │ └── util/ │ │ │ │ ├── cookies.ts │ │ │ │ ├── format2FACode.ts │ │ │ │ ├── getAccountName.ts │ │ │ │ ├── lang-string.tsx │ │ │ │ ├── lang.ts │ │ │ │ ├── oauth-client.ts │ │ │ │ ├── passwords.ts │ │ │ │ ├── sanitizeHandle.ts │ │ │ │ ├── sleep.ts │ │ │ │ ├── upsert.ts │ │ │ │ └── wait.ts │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.src.json │ │ │ ├── tsconfig.tools.json │ │ │ └── vite.config.mts │ │ ├── oauth-provider-ui/ │ │ │ ├── .gitignore │ │ │ ├── .linguirc │ │ │ ├── CHANGELOG.md │ │ │ ├── CONTRIBUTING.md │ │ │ ├── authorization-page.html │ │ │ ├── cookie-error-page.html │ │ │ ├── error-page.html │ │ │ ├── hydration-data.d.ts │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── authorization-page.tsx │ │ │ │ ├── components/ │ │ │ │ │ ├── forms/ │ │ │ │ │ │ ├── button-toggle-visibility.tsx │ │ │ │ │ │ ├── button.tsx │ │ │ │ │ │ ├── checkbox.tsx │ │ │ │ │ │ ├── fieldset.tsx │ │ │ │ │ │ ├── form-card-async.tsx │ │ │ │ │ │ ├── form-card.tsx │ │ │ │ │ │ ├── input-checkbox.tsx │ │ │ │ │ │ ├── input-container.tsx │ │ │ │ │ │ ├── input-email-address.tsx │ │ │ │ │ │ ├── input-new-password.tsx │ │ │ │ │ │ ├── input-password.tsx │ │ │ │ │ │ ├── input-text.tsx │ │ │ │ │ │ ├── input-token.tsx │ │ │ │ │ │ └── wizard-card.tsx │ │ │ │ │ ├── layouts/ │ │ │ │ │ │ ├── layout-title-page.tsx │ │ │ │ │ │ └── layout-welcome.tsx │ │ │ │ │ └── utils/ │ │ │ │ │ ├── account-identifier.tsx │ │ │ │ │ ├── account-image.tsx │ │ │ │ │ ├── admonition.tsx │ │ │ │ │ ├── client-image.tsx │ │ │ │ │ ├── client-name.tsx │ │ │ │ │ ├── description-card.tsx │ │ │ │ │ ├── error-card.tsx │ │ │ │ │ ├── error-message.tsx │ │ │ │ │ ├── help-card.tsx │ │ │ │ │ ├── icons.tsx │ │ │ │ │ ├── lang-string.tsx │ │ │ │ │ ├── link-anchor.tsx │ │ │ │ │ ├── link-title.tsx │ │ │ │ │ ├── page-footer.tsx │ │ │ │ │ ├── password-strength-label.tsx │ │ │ │ │ ├── password-strength-meter.tsx │ │ │ │ │ ├── scope-description.tsx │ │ │ │ │ └── url-viewer.tsx │ │ │ │ ├── cookie-error-page.tsx │ │ │ │ ├── error-page.tsx │ │ │ │ ├── hooks/ │ │ │ │ │ ├── use-api.ts │ │ │ │ │ ├── use-async-action.ts │ │ │ │ │ ├── use-bound-dispatch.ts │ │ │ │ │ ├── use-browser-color-scheme.ts │ │ │ │ │ ├── use-click-outside.ts │ │ │ │ │ ├── use-escape-key.ts │ │ │ │ │ ├── use-random-string.ts │ │ │ │ │ └── use-stepper.ts │ │ │ │ ├── lib/ │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── cookies.ts │ │ │ │ │ ├── json-client.ts │ │ │ │ │ ├── lang.ts │ │ │ │ │ ├── oauth-client.ts │ │ │ │ │ ├── password.ts │ │ │ │ │ ├── ref.ts │ │ │ │ │ └── util.ts │ │ │ │ ├── locales/ │ │ │ │ │ ├── an/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── ast/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── ca/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── da/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── de/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── el/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── en/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── en-GB/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── es/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── eu/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── fi/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── fr/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── ga/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── gl/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── hi/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── hu/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── ia/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── id/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── it/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── ja/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── km/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── ko/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── load.ts │ │ │ │ │ ├── locale-provider.tsx │ │ │ │ │ ├── locale-selector.tsx │ │ │ │ │ ├── locales.ts │ │ │ │ │ ├── ne/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── nl/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── pl/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── pt-BR/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── ro/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── ru/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── sv/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── th/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── tr/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── uk/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── vi/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── zh-CN/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ ├── zh-HK/ │ │ │ │ │ │ └── messages.po │ │ │ │ │ └── zh-TW/ │ │ │ │ │ └── messages.po │ │ │ │ ├── style.css │ │ │ │ └── views/ │ │ │ │ ├── authorize/ │ │ │ │ │ ├── authorize-view.tsx │ │ │ │ │ ├── consent/ │ │ │ │ │ │ ├── consent-form.tsx │ │ │ │ │ │ └── consent-view.tsx │ │ │ │ │ ├── reset-password/ │ │ │ │ │ │ ├── reset-password-confirm-form.tsx │ │ │ │ │ │ ├── reset-password-request-form.tsx │ │ │ │ │ │ └── reset-password-view.tsx │ │ │ │ │ ├── sign-in/ │ │ │ │ │ │ ├── sign-in-form.tsx │ │ │ │ │ │ ├── sign-in-picker.tsx │ │ │ │ │ │ └── sign-in-view.tsx │ │ │ │ │ ├── sign-up/ │ │ │ │ │ │ ├── sign-up-account-form.tsx │ │ │ │ │ │ ├── sign-up-disclaimer.tsx │ │ │ │ │ │ ├── sign-up-handle-form.tsx │ │ │ │ │ │ ├── sign-up-hcaptcha-form.tsx │ │ │ │ │ │ └── sign-up-view.tsx │ │ │ │ │ └── welcome/ │ │ │ │ │ └── welcome-view.tsx │ │ │ │ └── error/ │ │ │ │ ├── cookie-error-view.tsx │ │ │ │ └── error-view.tsx │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.src.json │ │ │ ├── tsconfig.tools.json │ │ │ └── vite.config.mjs │ │ ├── oauth-scopes/ │ │ │ ├── CHANGELOG.md │ │ │ ├── jest.config.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── atproto-oauth-scope.ts │ │ │ │ ├── index.ts │ │ │ │ ├── lib/ │ │ │ │ │ ├── lexicon.ts │ │ │ │ │ ├── mime.test.ts │ │ │ │ │ ├── mime.ts │ │ │ │ │ ├── nsid.ts │ │ │ │ │ ├── parser.ts │ │ │ │ │ ├── resource-permission.ts │ │ │ │ │ ├── syntax-lexicon.ts │ │ │ │ │ ├── syntax-string.test.ts │ │ │ │ │ ├── syntax-string.ts │ │ │ │ │ ├── syntax.test.ts │ │ │ │ │ ├── syntax.ts │ │ │ │ │ └── util.ts │ │ │ │ ├── scope-missing-error.ts │ │ │ │ ├── scope-permissions-transition.test.ts │ │ │ │ ├── scope-permissions-transition.ts │ │ │ │ ├── scope-permissions.test.ts │ │ │ │ ├── scope-permissions.ts │ │ │ │ ├── scopes/ │ │ │ │ │ ├── account-permission.test.ts │ │ │ │ │ ├── account-permission.ts │ │ │ │ │ ├── blob-permission.test.ts │ │ │ │ │ ├── blob-permission.ts │ │ │ │ │ ├── identity-permission.test.ts │ │ │ │ │ ├── identity-permission.ts │ │ │ │ │ ├── include-scope.test.ts │ │ │ │ │ ├── include-scope.ts │ │ │ │ │ ├── repo-permission.test.ts │ │ │ │ │ ├── repo-permission.ts │ │ │ │ │ ├── rpc-permission.test.ts │ │ │ │ │ └── rpc-permission.ts │ │ │ │ ├── scopes-set.test.ts │ │ │ │ └── scopes-set.ts │ │ │ ├── tsconfig.build.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.tests.json │ │ └── oauth-types/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── atproto-loopback-client-id.ts │ │ │ ├── atproto-loopback-client-metadata.ts │ │ │ ├── atproto-loopback-client-redirect-uris.ts │ │ │ ├── atproto-oauth-scope.ts │ │ │ ├── atproto-oauth-token-response.ts │ │ │ ├── constants.ts │ │ │ ├── index.ts │ │ │ ├── oauth-access-token.ts │ │ │ ├── oauth-authorization-code-grant-token-request.ts │ │ │ ├── oauth-authorization-details.ts │ │ │ ├── oauth-authorization-request-jar.ts │ │ │ ├── oauth-authorization-request-par.ts │ │ │ ├── oauth-authorization-request-parameters.ts │ │ │ ├── oauth-authorization-request-query.ts │ │ │ ├── oauth-authorization-request-uri.ts │ │ │ ├── oauth-authorization-response-error.ts │ │ │ ├── oauth-authorization-server-metadata.ts │ │ │ ├── oauth-client-credentials-grant-token-request.ts │ │ │ ├── oauth-client-credentials.ts │ │ │ ├── oauth-client-id-discoverable.ts │ │ │ ├── oauth-client-id-loopback.ts │ │ │ ├── oauth-client-id.ts │ │ │ ├── oauth-client-metadata.ts │ │ │ ├── oauth-code-challenge-method.ts │ │ │ ├── oauth-endpoint-auth-method.ts │ │ │ ├── oauth-endpoint-name.ts │ │ │ ├── oauth-grant-type.ts │ │ │ ├── oauth-introspection-response.ts │ │ │ ├── oauth-issuer-identifier.ts │ │ │ ├── oauth-par-response.ts │ │ │ ├── oauth-password-grant-token-request.ts │ │ │ ├── oauth-prompt-mode.ts │ │ │ ├── oauth-protected-resource-metadata.ts │ │ │ ├── oauth-redirect-uri.ts │ │ │ ├── oauth-refresh-token-grant-token-request.ts │ │ │ ├── oauth-refresh-token.ts │ │ │ ├── oauth-request-uri.ts │ │ │ ├── oauth-response-mode.ts │ │ │ ├── oauth-response-type.ts │ │ │ ├── oauth-scope.ts │ │ │ ├── oauth-token-identification.ts │ │ │ ├── oauth-token-request.ts │ │ │ ├── oauth-token-response.ts │ │ │ ├── oauth-token-type.ts │ │ │ ├── oidc-authorization-error-response.ts │ │ │ ├── oidc-claims-parameter.ts │ │ │ ├── oidc-claims-properties.ts │ │ │ ├── oidc-entity-type.ts │ │ │ ├── oidc-userinfo.ts │ │ │ ├── uri.ts │ │ │ └── util.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── ozone/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── bin/ │ │ │ └── migration-create.ts │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── api/ │ │ │ │ ├── chat/ │ │ │ │ │ ├── getActorMetadata.ts │ │ │ │ │ ├── getMessageContext.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── communication/ │ │ │ │ │ ├── createTemplate.ts │ │ │ │ │ ├── deleteTemplate.ts │ │ │ │ │ ├── listTemplates.ts │ │ │ │ │ └── updateTemplate.ts │ │ │ │ ├── health.ts │ │ │ │ ├── index.ts │ │ │ │ ├── label/ │ │ │ │ │ ├── fetchLabels.ts │ │ │ │ │ ├── queryLabels.ts │ │ │ │ │ └── subscribeLabels.ts │ │ │ │ ├── moderation/ │ │ │ │ │ ├── cancelScheduledActions.ts │ │ │ │ │ ├── emitEvent.ts │ │ │ │ │ ├── getAccountTimeline.ts │ │ │ │ │ ├── getEvent.ts │ │ │ │ │ ├── getRecord.ts │ │ │ │ │ ├── getRecords.ts │ │ │ │ │ ├── getRepo.ts │ │ │ │ │ ├── getReporterStats.ts │ │ │ │ │ ├── getRepos.ts │ │ │ │ │ ├── getSubjects.ts │ │ │ │ │ ├── listScheduledActions.ts │ │ │ │ │ ├── queryEvents.ts │ │ │ │ │ ├── queryStatuses.ts │ │ │ │ │ ├── scheduleAction.ts │ │ │ │ │ ├── searchRepos.ts │ │ │ │ │ └── util.ts │ │ │ │ ├── proxied.ts │ │ │ │ ├── report/ │ │ │ │ │ └── createReport.ts │ │ │ │ ├── safelink/ │ │ │ │ │ ├── addRule.ts │ │ │ │ │ ├── queryEvents.ts │ │ │ │ │ ├── queryRules.ts │ │ │ │ │ ├── removeRule.ts │ │ │ │ │ └── updateRule.ts │ │ │ │ ├── server/ │ │ │ │ │ └── getConfig.ts │ │ │ │ ├── set/ │ │ │ │ │ ├── addValues.ts │ │ │ │ │ ├── deleteSet.ts │ │ │ │ │ ├── deleteValues.ts │ │ │ │ │ ├── getValues.ts │ │ │ │ │ ├── querySets.ts │ │ │ │ │ └── upsertSet.ts │ │ │ │ ├── setting/ │ │ │ │ │ ├── listOptions.ts │ │ │ │ │ ├── removeOptions.ts │ │ │ │ │ └── upsertOption.ts │ │ │ │ ├── team/ │ │ │ │ │ ├── addMember.ts │ │ │ │ │ ├── deleteMember.ts │ │ │ │ │ ├── listMembers.ts │ │ │ │ │ └── updateMember.ts │ │ │ │ ├── util.ts │ │ │ │ ├── verification/ │ │ │ │ │ ├── grantVerifications.ts │ │ │ │ │ ├── listVerifications.ts │ │ │ │ │ └── revokeVerifications.ts │ │ │ │ └── well-known.ts │ │ │ ├── auth-verifier.ts │ │ │ ├── background.ts │ │ │ ├── communication-service/ │ │ │ │ ├── template.ts │ │ │ │ └── util.ts │ │ │ ├── config/ │ │ │ │ ├── config.ts │ │ │ │ ├── env.ts │ │ │ │ ├── index.ts │ │ │ │ └── secrets.ts │ │ │ ├── context.ts │ │ │ ├── daemon/ │ │ │ │ ├── blob-diverter.ts │ │ │ │ ├── context.ts │ │ │ │ ├── event-pusher.ts │ │ │ │ ├── event-reverser.ts │ │ │ │ ├── index.ts │ │ │ │ ├── materialized-view-refresher.ts │ │ │ │ ├── scheduled-action-processor.ts │ │ │ │ ├── strike-expiry-processor.ts │ │ │ │ ├── team-profile-synchronizer.ts │ │ │ │ └── verification-listener.ts │ │ │ ├── db/ │ │ │ │ ├── index.ts │ │ │ │ ├── migrations/ │ │ │ │ │ ├── 20231219T205730722Z-init.ts │ │ │ │ │ ├── 20240116T085607200Z-communication-template.ts │ │ │ │ │ ├── 20240201T051104136Z-mod-event-blobs.ts │ │ │ │ │ ├── 20240208T213404429Z-add-tags-column-to-moderation-subject.ts │ │ │ │ │ ├── 20240228T003647759Z-add-label-sigs.ts │ │ │ │ │ ├── 20240408T192432676Z-mute-reporting.ts │ │ │ │ │ ├── 20240506T225055595Z-message-subject.ts │ │ │ │ │ ├── 20240521T211332580Z-member.ts │ │ │ │ │ ├── 20240814T003647759Z-event-created-at-index.ts │ │ │ │ │ ├── 20240903T205730722Z-add-template-lang.ts │ │ │ │ │ ├── 20240904T205730722Z-add-subject-did-index.ts │ │ │ │ │ ├── 20241001T205730722Z-subject-status-review-state-index.ts │ │ │ │ │ ├── 20241008T205730722Z-sets.ts │ │ │ │ │ ├── 20241018T205730722Z-setting.ts │ │ │ │ │ ├── 20241026T205730722Z-add-hosting-status-to-subject-status.ts │ │ │ │ │ ├── 20241220T144630860Z-stats-materialized-views.ts │ │ │ │ │ ├── 20250204T003647759Z-add-subject-priority-score.ts │ │ │ │ │ ├── 20250211T003647759Z-add-reporter-stats-index.ts │ │ │ │ │ ├── 20250211T132135150Z-moderation-event-message-partial-idx.ts │ │ │ │ │ ├── 20250221T132135150Z-member-details.ts │ │ │ │ │ ├── 20250404T201720309Z-subject-status-sort-idxs.ts │ │ │ │ │ ├── 20250415T201720309Z-verification.ts │ │ │ │ │ ├── 20250417T201720309Z-firehose-cursor.ts │ │ │ │ │ ├── 20250609T110704000Z-safelink.ts │ │ │ │ │ ├── 20250618T180246000Z-add-mod-tool-to-moderation-event.ts │ │ │ │ │ ├── 20250701T000000000Z-add-age-assurance-state.ts │ │ │ │ │ ├── 20250715T000000000Z-add-mod-event-external-id.ts │ │ │ │ │ ├── 20250718T150931000Z-update-appeal-reason-stats.ts │ │ │ │ │ ├── 20250813T000000000Z-mod-tool-batch-id-index.ts │ │ │ │ │ ├── 20250923T000000000Z-scheduled-actions.ts │ │ │ │ │ ├── 20251008T120000000Z-add-strike-system.ts │ │ │ │ │ ├── 20260210T154806448Z-mod-event-created-by-indexes.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── provider.ts │ │ │ │ ├── pagination.ts │ │ │ │ ├── schema/ │ │ │ │ │ ├── account_events_stats.ts │ │ │ │ │ ├── account_record_events_stats.ts │ │ │ │ │ ├── account_record_status_stats.ts │ │ │ │ │ ├── account_strike.ts │ │ │ │ │ ├── blob_push_event.ts │ │ │ │ │ ├── communication_template.ts │ │ │ │ │ ├── firehose_cursor.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── job_cursor.ts │ │ │ │ │ ├── label.ts │ │ │ │ │ ├── member.ts │ │ │ │ │ ├── moderation_event.ts │ │ │ │ │ ├── moderation_subject_status.ts │ │ │ │ │ ├── ozone_set.ts │ │ │ │ │ ├── record_events_stats.ts │ │ │ │ │ ├── record_push_event.ts │ │ │ │ │ ├── repo_push_event.ts │ │ │ │ │ ├── safelink.ts │ │ │ │ │ ├── scheduled-action.ts │ │ │ │ │ ├── setting.ts │ │ │ │ │ ├── signing_key.ts │ │ │ │ │ └── verification.ts │ │ │ │ └── types.ts │ │ │ ├── error.ts │ │ │ ├── image-invalidator.ts │ │ │ ├── index.ts │ │ │ ├── jetstream/ │ │ │ │ └── service.ts │ │ │ ├── lexicon/ │ │ │ │ ├── index.ts │ │ │ │ ├── lexicons.ts │ │ │ │ ├── types/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── bsky/ │ │ │ │ │ │ ├── actor/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getPreferences.ts │ │ │ │ │ │ │ ├── getProfile.ts │ │ │ │ │ │ │ ├── getProfiles.ts │ │ │ │ │ │ │ ├── getSuggestions.ts │ │ │ │ │ │ │ ├── profile.ts │ │ │ │ │ │ │ ├── putPreferences.ts │ │ │ │ │ │ │ ├── searchActors.ts │ │ │ │ │ │ │ ├── searchActorsTypeahead.ts │ │ │ │ │ │ │ └── status.ts │ │ │ │ │ │ ├── ageassurance/ │ │ │ │ │ │ │ ├── begin.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getConfig.ts │ │ │ │ │ │ │ └── getState.ts │ │ │ │ │ │ ├── bookmark/ │ │ │ │ │ │ │ ├── createBookmark.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteBookmark.ts │ │ │ │ │ │ │ └── getBookmarks.ts │ │ │ │ │ │ ├── contact/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── dismissMatch.ts │ │ │ │ │ │ │ ├── getMatches.ts │ │ │ │ │ │ │ ├── getSyncStatus.ts │ │ │ │ │ │ │ ├── importContacts.ts │ │ │ │ │ │ │ ├── removeData.ts │ │ │ │ │ │ │ ├── sendNotification.ts │ │ │ │ │ │ │ ├── startPhoneVerification.ts │ │ │ │ │ │ │ └── verifyPhone.ts │ │ │ │ │ │ ├── draft/ │ │ │ │ │ │ │ ├── createDraft.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteDraft.ts │ │ │ │ │ │ │ ├── getDrafts.ts │ │ │ │ │ │ │ └── updateDraft.ts │ │ │ │ │ │ ├── embed/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── external.ts │ │ │ │ │ │ │ ├── images.ts │ │ │ │ │ │ │ ├── record.ts │ │ │ │ │ │ │ ├── recordWithMedia.ts │ │ │ │ │ │ │ └── video.ts │ │ │ │ │ │ ├── feed/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── describeFeedGenerator.ts │ │ │ │ │ │ │ ├── generator.ts │ │ │ │ │ │ │ ├── getActorFeeds.ts │ │ │ │ │ │ │ ├── getActorLikes.ts │ │ │ │ │ │ │ ├── getAuthorFeed.ts │ │ │ │ │ │ │ ├── getFeed.ts │ │ │ │ │ │ │ ├── getFeedGenerator.ts │ │ │ │ │ │ │ ├── getFeedGenerators.ts │ │ │ │ │ │ │ ├── getFeedSkeleton.ts │ │ │ │ │ │ │ ├── getLikes.ts │ │ │ │ │ │ │ ├── getListFeed.ts │ │ │ │ │ │ │ ├── getPostThread.ts │ │ │ │ │ │ │ ├── getPosts.ts │ │ │ │ │ │ │ ├── getQuotes.ts │ │ │ │ │ │ │ ├── getRepostedBy.ts │ │ │ │ │ │ │ ├── getSuggestedFeeds.ts │ │ │ │ │ │ │ ├── getTimeline.ts │ │ │ │ │ │ │ ├── like.ts │ │ │ │ │ │ │ ├── post.ts │ │ │ │ │ │ │ ├── postgate.ts │ │ │ │ │ │ │ ├── repost.ts │ │ │ │ │ │ │ ├── searchPosts.ts │ │ │ │ │ │ │ ├── sendInteractions.ts │ │ │ │ │ │ │ └── threadgate.ts │ │ │ │ │ │ ├── graph/ │ │ │ │ │ │ │ ├── block.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── follow.ts │ │ │ │ │ │ │ ├── getActorStarterPacks.ts │ │ │ │ │ │ │ ├── getBlocks.ts │ │ │ │ │ │ │ ├── getFollowers.ts │ │ │ │ │ │ │ ├── getFollows.ts │ │ │ │ │ │ │ ├── getKnownFollowers.ts │ │ │ │ │ │ │ ├── getList.ts │ │ │ │ │ │ │ ├── getListBlocks.ts │ │ │ │ │ │ │ ├── getListMutes.ts │ │ │ │ │ │ │ ├── getLists.ts │ │ │ │ │ │ │ ├── getListsWithMembership.ts │ │ │ │ │ │ │ ├── getMutes.ts │ │ │ │ │ │ │ ├── getRelationships.ts │ │ │ │ │ │ │ ├── getStarterPack.ts │ │ │ │ │ │ │ ├── getStarterPacks.ts │ │ │ │ │ │ │ ├── getStarterPacksWithMembership.ts │ │ │ │ │ │ │ ├── getSuggestedFollowsByActor.ts │ │ │ │ │ │ │ ├── list.ts │ │ │ │ │ │ │ ├── listblock.ts │ │ │ │ │ │ │ ├── listitem.ts │ │ │ │ │ │ │ ├── muteActor.ts │ │ │ │ │ │ │ ├── muteActorList.ts │ │ │ │ │ │ │ ├── muteThread.ts │ │ │ │ │ │ │ ├── searchStarterPacks.ts │ │ │ │ │ │ │ ├── starterpack.ts │ │ │ │ │ │ │ ├── unmuteActor.ts │ │ │ │ │ │ │ ├── unmuteActorList.ts │ │ │ │ │ │ │ ├── unmuteThread.ts │ │ │ │ │ │ │ └── verification.ts │ │ │ │ │ │ ├── labeler/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getServices.ts │ │ │ │ │ │ │ └── service.ts │ │ │ │ │ │ ├── notification/ │ │ │ │ │ │ │ ├── declaration.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getPreferences.ts │ │ │ │ │ │ │ ├── getUnreadCount.ts │ │ │ │ │ │ │ ├── listActivitySubscriptions.ts │ │ │ │ │ │ │ ├── listNotifications.ts │ │ │ │ │ │ │ ├── putActivitySubscription.ts │ │ │ │ │ │ │ ├── putPreferences.ts │ │ │ │ │ │ │ ├── putPreferencesV2.ts │ │ │ │ │ │ │ ├── registerPush.ts │ │ │ │ │ │ │ ├── unregisterPush.ts │ │ │ │ │ │ │ └── updateSeen.ts │ │ │ │ │ │ ├── richtext/ │ │ │ │ │ │ │ └── facet.ts │ │ │ │ │ │ ├── unspecced/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getAgeAssuranceState.ts │ │ │ │ │ │ │ ├── getConfig.ts │ │ │ │ │ │ │ ├── getOnboardingSuggestedStarterPacks.ts │ │ │ │ │ │ │ ├── getOnboardingSuggestedStarterPacksSkeleton.ts │ │ │ │ │ │ │ ├── getOnboardingSuggestedUsersSkeleton.ts │ │ │ │ │ │ │ ├── getPopularFeedGenerators.ts │ │ │ │ │ │ │ ├── getPostThreadOtherV2.ts │ │ │ │ │ │ │ ├── getPostThreadV2.ts │ │ │ │ │ │ │ ├── getSuggestedFeeds.ts │ │ │ │ │ │ │ ├── getSuggestedFeedsSkeleton.ts │ │ │ │ │ │ │ ├── getSuggestedOnboardingUsers.ts │ │ │ │ │ │ │ ├── getSuggestedStarterPacks.ts │ │ │ │ │ │ │ ├── getSuggestedStarterPacksSkeleton.ts │ │ │ │ │ │ │ ├── getSuggestedUsers.ts │ │ │ │ │ │ │ ├── getSuggestedUsersSkeleton.ts │ │ │ │ │ │ │ ├── getSuggestionsSkeleton.ts │ │ │ │ │ │ │ ├── getTaggedSuggestions.ts │ │ │ │ │ │ │ ├── getTrendingTopics.ts │ │ │ │ │ │ │ ├── getTrends.ts │ │ │ │ │ │ │ ├── getTrendsSkeleton.ts │ │ │ │ │ │ │ ├── initAgeAssurance.ts │ │ │ │ │ │ │ ├── searchActorsSkeleton.ts │ │ │ │ │ │ │ ├── searchPostsSkeleton.ts │ │ │ │ │ │ │ └── searchStarterPacksSkeleton.ts │ │ │ │ │ │ └── video/ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── getJobStatus.ts │ │ │ │ │ │ ├── getUploadLimits.ts │ │ │ │ │ │ └── uploadVideo.ts │ │ │ │ │ ├── chat/ │ │ │ │ │ │ └── bsky/ │ │ │ │ │ │ ├── actor/ │ │ │ │ │ │ │ ├── declaration.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteAccount.ts │ │ │ │ │ │ │ └── exportAccountData.ts │ │ │ │ │ │ ├── convo/ │ │ │ │ │ │ │ ├── acceptConvo.ts │ │ │ │ │ │ │ ├── addReaction.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteMessageForSelf.ts │ │ │ │ │ │ │ ├── getConvo.ts │ │ │ │ │ │ │ ├── getConvoAvailability.ts │ │ │ │ │ │ │ ├── getConvoForMembers.ts │ │ │ │ │ │ │ ├── getLog.ts │ │ │ │ │ │ │ ├── getMessages.ts │ │ │ │ │ │ │ ├── leaveConvo.ts │ │ │ │ │ │ │ ├── listConvos.ts │ │ │ │ │ │ │ ├── muteConvo.ts │ │ │ │ │ │ │ ├── removeReaction.ts │ │ │ │ │ │ │ ├── sendMessage.ts │ │ │ │ │ │ │ ├── sendMessageBatch.ts │ │ │ │ │ │ │ ├── unmuteConvo.ts │ │ │ │ │ │ │ ├── updateAllRead.ts │ │ │ │ │ │ │ └── updateRead.ts │ │ │ │ │ │ └── moderation/ │ │ │ │ │ │ ├── getActorMetadata.ts │ │ │ │ │ │ ├── getMessageContext.ts │ │ │ │ │ │ └── updateActorAccess.ts │ │ │ │ │ ├── com/ │ │ │ │ │ │ └── atproto/ │ │ │ │ │ │ ├── admin/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteAccount.ts │ │ │ │ │ │ │ ├── disableAccountInvites.ts │ │ │ │ │ │ │ ├── disableInviteCodes.ts │ │ │ │ │ │ │ ├── enableAccountInvites.ts │ │ │ │ │ │ │ ├── getAccountInfo.ts │ │ │ │ │ │ │ ├── getAccountInfos.ts │ │ │ │ │ │ │ ├── getInviteCodes.ts │ │ │ │ │ │ │ ├── getSubjectStatus.ts │ │ │ │ │ │ │ ├── searchAccounts.ts │ │ │ │ │ │ │ ├── sendEmail.ts │ │ │ │ │ │ │ ├── updateAccountEmail.ts │ │ │ │ │ │ │ ├── updateAccountHandle.ts │ │ │ │ │ │ │ ├── updateAccountPassword.ts │ │ │ │ │ │ │ ├── updateAccountSigningKey.ts │ │ │ │ │ │ │ └── updateSubjectStatus.ts │ │ │ │ │ │ ├── identity/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getRecommendedDidCredentials.ts │ │ │ │ │ │ │ ├── refreshIdentity.ts │ │ │ │ │ │ │ ├── requestPlcOperationSignature.ts │ │ │ │ │ │ │ ├── resolveDid.ts │ │ │ │ │ │ │ ├── resolveHandle.ts │ │ │ │ │ │ │ ├── resolveIdentity.ts │ │ │ │ │ │ │ ├── signPlcOperation.ts │ │ │ │ │ │ │ ├── submitPlcOperation.ts │ │ │ │ │ │ │ └── updateHandle.ts │ │ │ │ │ │ ├── label/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── queryLabels.ts │ │ │ │ │ │ │ └── subscribeLabels.ts │ │ │ │ │ │ ├── lexicon/ │ │ │ │ │ │ │ ├── resolveLexicon.ts │ │ │ │ │ │ │ └── schema.ts │ │ │ │ │ │ ├── moderation/ │ │ │ │ │ │ │ ├── createReport.ts │ │ │ │ │ │ │ └── defs.ts │ │ │ │ │ │ ├── repo/ │ │ │ │ │ │ │ ├── applyWrites.ts │ │ │ │ │ │ │ ├── createRecord.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteRecord.ts │ │ │ │ │ │ │ ├── describeRepo.ts │ │ │ │ │ │ │ ├── getRecord.ts │ │ │ │ │ │ │ ├── importRepo.ts │ │ │ │ │ │ │ ├── listMissingBlobs.ts │ │ │ │ │ │ │ ├── listRecords.ts │ │ │ │ │ │ │ ├── putRecord.ts │ │ │ │ │ │ │ ├── strongRef.ts │ │ │ │ │ │ │ └── uploadBlob.ts │ │ │ │ │ │ ├── server/ │ │ │ │ │ │ │ ├── activateAccount.ts │ │ │ │ │ │ │ ├── checkAccountStatus.ts │ │ │ │ │ │ │ ├── confirmEmail.ts │ │ │ │ │ │ │ ├── createAccount.ts │ │ │ │ │ │ │ ├── createAppPassword.ts │ │ │ │ │ │ │ ├── createInviteCode.ts │ │ │ │ │ │ │ ├── createInviteCodes.ts │ │ │ │ │ │ │ ├── createSession.ts │ │ │ │ │ │ │ ├── deactivateAccount.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteAccount.ts │ │ │ │ │ │ │ ├── deleteSession.ts │ │ │ │ │ │ │ ├── describeServer.ts │ │ │ │ │ │ │ ├── getAccountInviteCodes.ts │ │ │ │ │ │ │ ├── getServiceAuth.ts │ │ │ │ │ │ │ ├── getSession.ts │ │ │ │ │ │ │ ├── listAppPasswords.ts │ │ │ │ │ │ │ ├── refreshSession.ts │ │ │ │ │ │ │ ├── requestAccountDelete.ts │ │ │ │ │ │ │ ├── requestEmailConfirmation.ts │ │ │ │ │ │ │ ├── requestEmailUpdate.ts │ │ │ │ │ │ │ ├── requestPasswordReset.ts │ │ │ │ │ │ │ ├── reserveSigningKey.ts │ │ │ │ │ │ │ ├── resetPassword.ts │ │ │ │ │ │ │ ├── revokeAppPassword.ts │ │ │ │ │ │ │ └── updateEmail.ts │ │ │ │ │ │ ├── sync/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getBlob.ts │ │ │ │ │ │ │ ├── getBlocks.ts │ │ │ │ │ │ │ ├── getCheckout.ts │ │ │ │ │ │ │ ├── getHead.ts │ │ │ │ │ │ │ ├── getHostStatus.ts │ │ │ │ │ │ │ ├── getLatestCommit.ts │ │ │ │ │ │ │ ├── getRecord.ts │ │ │ │ │ │ │ ├── getRepo.ts │ │ │ │ │ │ │ ├── getRepoStatus.ts │ │ │ │ │ │ │ ├── listBlobs.ts │ │ │ │ │ │ │ ├── listHosts.ts │ │ │ │ │ │ │ ├── listRepos.ts │ │ │ │ │ │ │ ├── listReposByCollection.ts │ │ │ │ │ │ │ ├── notifyOfUpdate.ts │ │ │ │ │ │ │ ├── requestCrawl.ts │ │ │ │ │ │ │ └── subscribeRepos.ts │ │ │ │ │ │ └── temp/ │ │ │ │ │ │ ├── addReservedHandle.ts │ │ │ │ │ │ ├── checkHandleAvailability.ts │ │ │ │ │ │ ├── checkSignupQueue.ts │ │ │ │ │ │ ├── dereferenceScope.ts │ │ │ │ │ │ ├── fetchLabels.ts │ │ │ │ │ │ ├── requestPhoneVerification.ts │ │ │ │ │ │ └── revokeAccountCredentials.ts │ │ │ │ │ └── tools/ │ │ │ │ │ └── ozone/ │ │ │ │ │ ├── communication/ │ │ │ │ │ │ ├── createTemplate.ts │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── deleteTemplate.ts │ │ │ │ │ │ ├── listTemplates.ts │ │ │ │ │ │ └── updateTemplate.ts │ │ │ │ │ ├── hosting/ │ │ │ │ │ │ └── getAccountHistory.ts │ │ │ │ │ ├── moderation/ │ │ │ │ │ │ ├── cancelScheduledActions.ts │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── emitEvent.ts │ │ │ │ │ │ ├── getAccountTimeline.ts │ │ │ │ │ │ ├── getEvent.ts │ │ │ │ │ │ ├── getRecord.ts │ │ │ │ │ │ ├── getRecords.ts │ │ │ │ │ │ ├── getRepo.ts │ │ │ │ │ │ ├── getReporterStats.ts │ │ │ │ │ │ ├── getRepos.ts │ │ │ │ │ │ ├── getSubjects.ts │ │ │ │ │ │ ├── listScheduledActions.ts │ │ │ │ │ │ ├── queryEvents.ts │ │ │ │ │ │ ├── queryStatuses.ts │ │ │ │ │ │ ├── scheduleAction.ts │ │ │ │ │ │ └── searchRepos.ts │ │ │ │ │ ├── report/ │ │ │ │ │ │ └── defs.ts │ │ │ │ │ ├── safelink/ │ │ │ │ │ │ ├── addRule.ts │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── queryEvents.ts │ │ │ │ │ │ ├── queryRules.ts │ │ │ │ │ │ ├── removeRule.ts │ │ │ │ │ │ └── updateRule.ts │ │ │ │ │ ├── server/ │ │ │ │ │ │ └── getConfig.ts │ │ │ │ │ ├── set/ │ │ │ │ │ │ ├── addValues.ts │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── deleteSet.ts │ │ │ │ │ │ ├── deleteValues.ts │ │ │ │ │ │ ├── getValues.ts │ │ │ │ │ │ ├── querySets.ts │ │ │ │ │ │ └── upsertSet.ts │ │ │ │ │ ├── setting/ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── listOptions.ts │ │ │ │ │ │ ├── removeOptions.ts │ │ │ │ │ │ └── upsertOption.ts │ │ │ │ │ ├── signature/ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── findCorrelation.ts │ │ │ │ │ │ ├── findRelatedAccounts.ts │ │ │ │ │ │ └── searchAccounts.ts │ │ │ │ │ ├── team/ │ │ │ │ │ │ ├── addMember.ts │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── deleteMember.ts │ │ │ │ │ │ ├── listMembers.ts │ │ │ │ │ │ └── updateMember.ts │ │ │ │ │ └── verification/ │ │ │ │ │ ├── defs.ts │ │ │ │ │ ├── grantVerifications.ts │ │ │ │ │ ├── listVerifications.ts │ │ │ │ │ └── revokeVerifications.ts │ │ │ │ └── util.ts │ │ │ ├── logger.ts │ │ │ ├── mod-service/ │ │ │ │ ├── index.ts │ │ │ │ ├── profile.ts │ │ │ │ ├── status.ts │ │ │ │ ├── strike.ts │ │ │ │ ├── subject.ts │ │ │ │ ├── types.ts │ │ │ │ ├── util.ts │ │ │ │ └── views.ts │ │ │ ├── safelink/ │ │ │ │ └── service.ts │ │ │ ├── scheduled-action/ │ │ │ │ ├── service.ts │ │ │ │ └── types.ts │ │ │ ├── sequencer/ │ │ │ │ ├── index.ts │ │ │ │ ├── outbox.ts │ │ │ │ └── sequencer.ts │ │ │ ├── set/ │ │ │ │ └── service.ts │ │ │ ├── setting/ │ │ │ │ ├── constants.ts │ │ │ │ ├── service.ts │ │ │ │ ├── types.ts │ │ │ │ └── validators.ts │ │ │ ├── tag-service/ │ │ │ │ ├── content-tagger.ts │ │ │ │ ├── embed-tagger.ts │ │ │ │ ├── index.ts │ │ │ │ ├── language-data.ts │ │ │ │ ├── language-tagger.ts │ │ │ │ └── util.ts │ │ │ ├── team/ │ │ │ │ └── index.ts │ │ │ ├── util.ts │ │ │ └── verification/ │ │ │ ├── issuer.ts │ │ │ ├── service.ts │ │ │ └── util.ts │ │ ├── test.env │ │ ├── tests/ │ │ │ ├── 3p-labeler.test.ts │ │ │ ├── __snapshots__/ │ │ │ │ ├── account-strikes.test.ts.snap │ │ │ │ ├── age-assurance.test.ts.snap │ │ │ │ ├── blob-divert.test.ts.snap │ │ │ │ ├── get-account-timeline.test.ts.snap │ │ │ │ ├── get-record.test.ts.snap │ │ │ │ ├── get-records.test.ts.snap │ │ │ │ ├── get-repo.test.ts.snap │ │ │ │ ├── get-repos.test.ts.snap │ │ │ │ ├── get-starter-pack.test.ts.snap │ │ │ │ ├── get-subjects.test.ts.snap │ │ │ │ ├── moderation-events.test.ts.snap │ │ │ │ ├── moderation-statuses.test.ts.snap │ │ │ │ ├── moderation.test.ts.snap │ │ │ │ ├── report-reason.test.ts.snap │ │ │ │ ├── safelink.test.ts.snap │ │ │ │ ├── scheduled-action.test.ts.snap │ │ │ │ ├── sets.test.ts.snap │ │ │ │ ├── settings.test.ts.snap │ │ │ │ ├── team.test.ts.snap │ │ │ │ ├── verification-listener.test.ts.snap │ │ │ │ └── verification.test.ts.snap │ │ │ ├── _util.ts │ │ │ ├── account-strikes.test.ts │ │ │ ├── ack-all-subjects-of-account.test.ts │ │ │ ├── age-assurance.test.ts │ │ │ ├── blob-divert.test.ts │ │ │ ├── communication-templates.test.ts │ │ │ ├── content-tagger.test.ts │ │ │ ├── db.test.ts │ │ │ ├── expiring-label.test.ts │ │ │ ├── get-account-timeline.test.ts │ │ │ ├── get-config.test.ts │ │ │ ├── get-lists.test.ts │ │ │ ├── get-profiles.test.ts │ │ │ ├── get-record.test.ts │ │ │ ├── get-records.test.ts │ │ │ ├── get-repo.test.ts │ │ │ ├── get-reporter-stats.test.ts │ │ │ ├── get-repos.test.ts │ │ │ ├── get-starter-pack.test.ts │ │ │ ├── get-subjects.test.ts │ │ │ ├── mod-tool.test.ts │ │ │ ├── moderation-appeals.test.ts │ │ │ ├── moderation-events.test.ts │ │ │ ├── moderation-status-tags.test.ts │ │ │ ├── moderation-statuses.test.ts │ │ │ ├── moderation.test.ts │ │ │ ├── protected-tags.test.ts │ │ │ ├── query-labels.test.ts │ │ │ ├── record-and-account-events.test.ts │ │ │ ├── repo-search.test.ts │ │ │ ├── report-muting.test.ts │ │ │ ├── report-reason.test.ts │ │ │ ├── revoke-account-credentials.test.ts │ │ │ ├── safelink.test.ts │ │ │ ├── scheduled-action-processor.test.ts │ │ │ ├── scheduled-action.test.ts │ │ │ ├── sequencer.test.ts │ │ │ ├── server.test.ts │ │ │ ├── sets.test.ts │ │ │ ├── settings.test.ts │ │ │ ├── strike-expiry-processor.test.ts │ │ │ ├── subject-priority-score.test.ts │ │ │ ├── takedown.test.ts │ │ │ ├── team.test.ts │ │ │ ├── verification-listener.test.ts │ │ │ └── verification.test.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── tsconfig.tests.json │ ├── pds/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── build.templates.js │ │ ├── example.env │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── account-manager/ │ │ │ │ ├── account-manager.ts │ │ │ │ ├── db/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── migrations/ │ │ │ │ │ │ ├── 001-init.ts │ │ │ │ │ │ ├── 002-account-deactivation.ts │ │ │ │ │ │ ├── 003-privileged-app-passwords.ts │ │ │ │ │ │ ├── 004-oauth.ts │ │ │ │ │ │ ├── 005-oauth-account-management.ts │ │ │ │ │ │ ├── 006-oauth-permission-sets.ts │ │ │ │ │ │ ├── 007-lexicon-failures-index.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── schema/ │ │ │ │ │ ├── account-device.ts │ │ │ │ │ ├── account.ts │ │ │ │ │ ├── actor.ts │ │ │ │ │ ├── app-password.ts │ │ │ │ │ ├── authorization-request.ts │ │ │ │ │ ├── authorized-client.ts │ │ │ │ │ ├── device.ts │ │ │ │ │ ├── email-token.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── invite-code.ts │ │ │ │ │ ├── lexicon.ts │ │ │ │ │ ├── refresh-token.ts │ │ │ │ │ ├── repo-root.ts │ │ │ │ │ ├── token.ts │ │ │ │ │ └── used-refresh-token.ts │ │ │ │ ├── helpers/ │ │ │ │ │ ├── account-device.ts │ │ │ │ │ ├── account.ts │ │ │ │ │ ├── auth.ts │ │ │ │ │ ├── authorization-request.ts │ │ │ │ │ ├── authorized-client.ts │ │ │ │ │ ├── device.ts │ │ │ │ │ ├── email-token.ts │ │ │ │ │ ├── invite.ts │ │ │ │ │ ├── lexicon.ts │ │ │ │ │ ├── password.ts │ │ │ │ │ ├── repo.ts │ │ │ │ │ ├── scrypt.ts │ │ │ │ │ ├── token.ts │ │ │ │ │ └── used-refresh-token.ts │ │ │ │ ├── oauth-store.ts │ │ │ │ └── scope-reference-getter.ts │ │ │ ├── actor-store/ │ │ │ │ ├── actor-store-reader.ts │ │ │ │ ├── actor-store-resources.ts │ │ │ │ ├── actor-store-transactor.ts │ │ │ │ ├── actor-store-writer.ts │ │ │ │ ├── actor-store.ts │ │ │ │ ├── blob/ │ │ │ │ │ ├── reader.ts │ │ │ │ │ └── transactor.ts │ │ │ │ ├── db/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── migrations/ │ │ │ │ │ │ ├── 001-init.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── schema/ │ │ │ │ │ ├── account-pref.ts │ │ │ │ │ ├── backlink.ts │ │ │ │ │ ├── blob.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── record-blob.ts │ │ │ │ │ ├── record.ts │ │ │ │ │ ├── repo-block.ts │ │ │ │ │ └── repo-root.ts │ │ │ │ ├── migrate.ts │ │ │ │ ├── preference/ │ │ │ │ │ ├── reader.ts │ │ │ │ │ ├── transactor.ts │ │ │ │ │ └── util.ts │ │ │ │ ├── record/ │ │ │ │ │ ├── reader.ts │ │ │ │ │ └── transactor.ts │ │ │ │ └── repo/ │ │ │ │ ├── reader.ts │ │ │ │ ├── sql-repo-reader.ts │ │ │ │ ├── sql-repo-transactor.ts │ │ │ │ └── transactor.ts │ │ │ ├── api/ │ │ │ │ ├── app/ │ │ │ │ │ └── bsky/ │ │ │ │ │ ├── actor/ │ │ │ │ │ │ ├── getPreferences.ts │ │ │ │ │ │ ├── getProfile.ts │ │ │ │ │ │ ├── getProfiles.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── putPreferences.ts │ │ │ │ │ ├── feed/ │ │ │ │ │ │ ├── getActorLikes.ts │ │ │ │ │ │ ├── getAuthorFeed.ts │ │ │ │ │ │ ├── getFeed.ts │ │ │ │ │ │ ├── getPostThread.ts │ │ │ │ │ │ ├── getTimeline.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── notification/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── registerPush.ts │ │ │ │ │ └── util/ │ │ │ │ │ └── resolver.ts │ │ │ │ ├── com/ │ │ │ │ │ └── atproto/ │ │ │ │ │ ├── admin/ │ │ │ │ │ │ ├── deleteAccount.ts │ │ │ │ │ │ ├── disableAccountInvites.ts │ │ │ │ │ │ ├── disableInviteCodes.ts │ │ │ │ │ │ ├── enableAccountInvites.ts │ │ │ │ │ │ ├── getAccountInfo.ts │ │ │ │ │ │ ├── getAccountInfos.ts │ │ │ │ │ │ ├── getInviteCodes.ts │ │ │ │ │ │ ├── getSubjectStatus.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── sendEmail.ts │ │ │ │ │ │ ├── updateAccountEmail.ts │ │ │ │ │ │ ├── updateAccountHandle.ts │ │ │ │ │ │ ├── updateAccountPassword.ts │ │ │ │ │ │ ├── updateSubjectStatus.ts │ │ │ │ │ │ └── util.ts │ │ │ │ │ ├── identity/ │ │ │ │ │ │ ├── getRecommendedDidCredentials.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── requestPlcOperationSignature.ts │ │ │ │ │ │ ├── resolveHandle.ts │ │ │ │ │ │ ├── signPlcOperation.ts │ │ │ │ │ │ ├── submitPlcOperation.ts │ │ │ │ │ │ └── updateHandle.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── moderation/ │ │ │ │ │ │ ├── createReport.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── repo/ │ │ │ │ │ │ ├── applyWrites.ts │ │ │ │ │ │ ├── createRecord.ts │ │ │ │ │ │ ├── deleteRecord.ts │ │ │ │ │ │ ├── describeRepo.ts │ │ │ │ │ │ ├── getRecord.ts │ │ │ │ │ │ ├── importRepo.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── listMissingBlobs.ts │ │ │ │ │ │ ├── listRecords.ts │ │ │ │ │ │ ├── putRecord.ts │ │ │ │ │ │ └── uploadBlob.ts │ │ │ │ │ ├── server/ │ │ │ │ │ │ ├── activateAccount.ts │ │ │ │ │ │ ├── checkAccountStatus.ts │ │ │ │ │ │ ├── confirmEmail.ts │ │ │ │ │ │ ├── createAccount.ts │ │ │ │ │ │ ├── createAppPassword.ts │ │ │ │ │ │ ├── createInviteCode.ts │ │ │ │ │ │ ├── createInviteCodes.ts │ │ │ │ │ │ ├── createSession.ts │ │ │ │ │ │ ├── deactivateAccount.ts │ │ │ │ │ │ ├── deleteAccount.ts │ │ │ │ │ │ ├── deleteSession.ts │ │ │ │ │ │ ├── describeServer.ts │ │ │ │ │ │ ├── getAccountInviteCodes.ts │ │ │ │ │ │ ├── getServiceAuth.ts │ │ │ │ │ │ ├── getSession.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── listAppPasswords.ts │ │ │ │ │ │ ├── refreshSession.ts │ │ │ │ │ │ ├── requestAccountDelete.ts │ │ │ │ │ │ ├── requestEmailConfirmation.ts │ │ │ │ │ │ ├── requestEmailUpdate.ts │ │ │ │ │ │ ├── requestPasswordReset.ts │ │ │ │ │ │ ├── reserveSigningKey.ts │ │ │ │ │ │ ├── resetPassword.ts │ │ │ │ │ │ ├── revokeAppPassword.ts │ │ │ │ │ │ ├── updateEmail.ts │ │ │ │ │ │ └── util.ts │ │ │ │ │ ├── sync/ │ │ │ │ │ │ ├── deprecated/ │ │ │ │ │ │ │ ├── getCheckout.ts │ │ │ │ │ │ │ └── getHead.ts │ │ │ │ │ │ ├── getBlob.ts │ │ │ │ │ │ ├── getBlocks.ts │ │ │ │ │ │ ├── getLatestCommit.ts │ │ │ │ │ │ ├── getRecord.ts │ │ │ │ │ │ ├── getRepo.ts │ │ │ │ │ │ ├── getRepoStatus.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── listBlobs.ts │ │ │ │ │ │ ├── listRepos.ts │ │ │ │ │ │ ├── subscribeRepos.ts │ │ │ │ │ │ └── util.ts │ │ │ │ │ └── temp/ │ │ │ │ │ ├── checkSignupQueue.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── proxy.ts │ │ │ ├── app-view.ts │ │ │ ├── auth-output.ts │ │ │ ├── auth-routes.ts │ │ │ ├── auth-scope.ts │ │ │ ├── auth-verifier.ts │ │ │ ├── background.ts │ │ │ ├── basic-routes.ts │ │ │ ├── bsky-app-view.ts │ │ │ ├── config/ │ │ │ │ ├── config.ts │ │ │ │ ├── env.ts │ │ │ │ ├── index.ts │ │ │ │ └── secrets.ts │ │ │ ├── context.ts │ │ │ ├── crawlers.ts │ │ │ ├── db/ │ │ │ │ ├── cast.ts │ │ │ │ ├── db.ts │ │ │ │ ├── index.ts │ │ │ │ ├── migrator.ts │ │ │ │ ├── pagination.ts │ │ │ │ ├── tables/ │ │ │ │ │ └── moderation.ts │ │ │ │ └── util.ts │ │ │ ├── did-cache/ │ │ │ │ ├── db/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── migrations.ts │ │ │ │ │ └── schema.ts │ │ │ │ └── index.ts │ │ │ ├── disk-blobstore.ts │ │ │ ├── error.ts │ │ │ ├── handle/ │ │ │ │ ├── explicit-slurs.ts │ │ │ │ ├── index.ts │ │ │ │ └── reserved.ts │ │ │ ├── image/ │ │ │ │ └── image-url-builder.ts │ │ │ ├── index.ts │ │ │ ├── lexicon/ │ │ │ │ ├── index.ts │ │ │ │ ├── lexicons.ts │ │ │ │ ├── types/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── bsky/ │ │ │ │ │ │ ├── actor/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getPreferences.ts │ │ │ │ │ │ │ ├── getProfile.ts │ │ │ │ │ │ │ ├── getProfiles.ts │ │ │ │ │ │ │ ├── getSuggestions.ts │ │ │ │ │ │ │ ├── profile.ts │ │ │ │ │ │ │ ├── putPreferences.ts │ │ │ │ │ │ │ ├── searchActors.ts │ │ │ │ │ │ │ ├── searchActorsTypeahead.ts │ │ │ │ │ │ │ └── status.ts │ │ │ │ │ │ ├── ageassurance/ │ │ │ │ │ │ │ ├── begin.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getConfig.ts │ │ │ │ │ │ │ └── getState.ts │ │ │ │ │ │ ├── bookmark/ │ │ │ │ │ │ │ ├── createBookmark.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteBookmark.ts │ │ │ │ │ │ │ └── getBookmarks.ts │ │ │ │ │ │ ├── contact/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── dismissMatch.ts │ │ │ │ │ │ │ ├── getMatches.ts │ │ │ │ │ │ │ ├── getSyncStatus.ts │ │ │ │ │ │ │ ├── importContacts.ts │ │ │ │ │ │ │ ├── removeData.ts │ │ │ │ │ │ │ ├── sendNotification.ts │ │ │ │ │ │ │ ├── startPhoneVerification.ts │ │ │ │ │ │ │ └── verifyPhone.ts │ │ │ │ │ │ ├── draft/ │ │ │ │ │ │ │ ├── createDraft.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteDraft.ts │ │ │ │ │ │ │ ├── getDrafts.ts │ │ │ │ │ │ │ └── updateDraft.ts │ │ │ │ │ │ ├── embed/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── external.ts │ │ │ │ │ │ │ ├── images.ts │ │ │ │ │ │ │ ├── record.ts │ │ │ │ │ │ │ ├── recordWithMedia.ts │ │ │ │ │ │ │ └── video.ts │ │ │ │ │ │ ├── feed/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── describeFeedGenerator.ts │ │ │ │ │ │ │ ├── generator.ts │ │ │ │ │ │ │ ├── getActorFeeds.ts │ │ │ │ │ │ │ ├── getActorLikes.ts │ │ │ │ │ │ │ ├── getAuthorFeed.ts │ │ │ │ │ │ │ ├── getFeed.ts │ │ │ │ │ │ │ ├── getFeedGenerator.ts │ │ │ │ │ │ │ ├── getFeedGenerators.ts │ │ │ │ │ │ │ ├── getFeedSkeleton.ts │ │ │ │ │ │ │ ├── getLikes.ts │ │ │ │ │ │ │ ├── getListFeed.ts │ │ │ │ │ │ │ ├── getPostThread.ts │ │ │ │ │ │ │ ├── getPosts.ts │ │ │ │ │ │ │ ├── getQuotes.ts │ │ │ │ │ │ │ ├── getRepostedBy.ts │ │ │ │ │ │ │ ├── getSuggestedFeeds.ts │ │ │ │ │ │ │ ├── getTimeline.ts │ │ │ │ │ │ │ ├── like.ts │ │ │ │ │ │ │ ├── post.ts │ │ │ │ │ │ │ ├── postgate.ts │ │ │ │ │ │ │ ├── repost.ts │ │ │ │ │ │ │ ├── searchPosts.ts │ │ │ │ │ │ │ ├── sendInteractions.ts │ │ │ │ │ │ │ └── threadgate.ts │ │ │ │ │ │ ├── graph/ │ │ │ │ │ │ │ ├── block.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── follow.ts │ │ │ │ │ │ │ ├── getActorStarterPacks.ts │ │ │ │ │ │ │ ├── getBlocks.ts │ │ │ │ │ │ │ ├── getFollowers.ts │ │ │ │ │ │ │ ├── getFollows.ts │ │ │ │ │ │ │ ├── getKnownFollowers.ts │ │ │ │ │ │ │ ├── getList.ts │ │ │ │ │ │ │ ├── getListBlocks.ts │ │ │ │ │ │ │ ├── getListMutes.ts │ │ │ │ │ │ │ ├── getLists.ts │ │ │ │ │ │ │ ├── getListsWithMembership.ts │ │ │ │ │ │ │ ├── getMutes.ts │ │ │ │ │ │ │ ├── getRelationships.ts │ │ │ │ │ │ │ ├── getStarterPack.ts │ │ │ │ │ │ │ ├── getStarterPacks.ts │ │ │ │ │ │ │ ├── getStarterPacksWithMembership.ts │ │ │ │ │ │ │ ├── getSuggestedFollowsByActor.ts │ │ │ │ │ │ │ ├── list.ts │ │ │ │ │ │ │ ├── listblock.ts │ │ │ │ │ │ │ ├── listitem.ts │ │ │ │ │ │ │ ├── muteActor.ts │ │ │ │ │ │ │ ├── muteActorList.ts │ │ │ │ │ │ │ ├── muteThread.ts │ │ │ │ │ │ │ ├── searchStarterPacks.ts │ │ │ │ │ │ │ ├── starterpack.ts │ │ │ │ │ │ │ ├── unmuteActor.ts │ │ │ │ │ │ │ ├── unmuteActorList.ts │ │ │ │ │ │ │ ├── unmuteThread.ts │ │ │ │ │ │ │ └── verification.ts │ │ │ │ │ │ ├── labeler/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getServices.ts │ │ │ │ │ │ │ └── service.ts │ │ │ │ │ │ ├── notification/ │ │ │ │ │ │ │ ├── declaration.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getPreferences.ts │ │ │ │ │ │ │ ├── getUnreadCount.ts │ │ │ │ │ │ │ ├── listActivitySubscriptions.ts │ │ │ │ │ │ │ ├── listNotifications.ts │ │ │ │ │ │ │ ├── putActivitySubscription.ts │ │ │ │ │ │ │ ├── putPreferences.ts │ │ │ │ │ │ │ ├── putPreferencesV2.ts │ │ │ │ │ │ │ ├── registerPush.ts │ │ │ │ │ │ │ ├── unregisterPush.ts │ │ │ │ │ │ │ └── updateSeen.ts │ │ │ │ │ │ ├── richtext/ │ │ │ │ │ │ │ └── facet.ts │ │ │ │ │ │ ├── unspecced/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getAgeAssuranceState.ts │ │ │ │ │ │ │ ├── getConfig.ts │ │ │ │ │ │ │ ├── getOnboardingSuggestedStarterPacks.ts │ │ │ │ │ │ │ ├── getOnboardingSuggestedStarterPacksSkeleton.ts │ │ │ │ │ │ │ ├── getOnboardingSuggestedUsersSkeleton.ts │ │ │ │ │ │ │ ├── getPopularFeedGenerators.ts │ │ │ │ │ │ │ ├── getPostThreadOtherV2.ts │ │ │ │ │ │ │ ├── getPostThreadV2.ts │ │ │ │ │ │ │ ├── getSuggestedFeeds.ts │ │ │ │ │ │ │ ├── getSuggestedFeedsSkeleton.ts │ │ │ │ │ │ │ ├── getSuggestedOnboardingUsers.ts │ │ │ │ │ │ │ ├── getSuggestedStarterPacks.ts │ │ │ │ │ │ │ ├── getSuggestedStarterPacksSkeleton.ts │ │ │ │ │ │ │ ├── getSuggestedUsers.ts │ │ │ │ │ │ │ ├── getSuggestedUsersSkeleton.ts │ │ │ │ │ │ │ ├── getSuggestionsSkeleton.ts │ │ │ │ │ │ │ ├── getTaggedSuggestions.ts │ │ │ │ │ │ │ ├── getTrendingTopics.ts │ │ │ │ │ │ │ ├── getTrends.ts │ │ │ │ │ │ │ ├── getTrendsSkeleton.ts │ │ │ │ │ │ │ ├── initAgeAssurance.ts │ │ │ │ │ │ │ ├── searchActorsSkeleton.ts │ │ │ │ │ │ │ ├── searchPostsSkeleton.ts │ │ │ │ │ │ │ └── searchStarterPacksSkeleton.ts │ │ │ │ │ │ └── video/ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── getJobStatus.ts │ │ │ │ │ │ ├── getUploadLimits.ts │ │ │ │ │ │ └── uploadVideo.ts │ │ │ │ │ ├── chat/ │ │ │ │ │ │ └── bsky/ │ │ │ │ │ │ ├── actor/ │ │ │ │ │ │ │ ├── declaration.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteAccount.ts │ │ │ │ │ │ │ └── exportAccountData.ts │ │ │ │ │ │ ├── convo/ │ │ │ │ │ │ │ ├── acceptConvo.ts │ │ │ │ │ │ │ ├── addReaction.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteMessageForSelf.ts │ │ │ │ │ │ │ ├── getConvo.ts │ │ │ │ │ │ │ ├── getConvoAvailability.ts │ │ │ │ │ │ │ ├── getConvoForMembers.ts │ │ │ │ │ │ │ ├── getLog.ts │ │ │ │ │ │ │ ├── getMessages.ts │ │ │ │ │ │ │ ├── leaveConvo.ts │ │ │ │ │ │ │ ├── listConvos.ts │ │ │ │ │ │ │ ├── muteConvo.ts │ │ │ │ │ │ │ ├── removeReaction.ts │ │ │ │ │ │ │ ├── sendMessage.ts │ │ │ │ │ │ │ ├── sendMessageBatch.ts │ │ │ │ │ │ │ ├── unmuteConvo.ts │ │ │ │ │ │ │ ├── updateAllRead.ts │ │ │ │ │ │ │ └── updateRead.ts │ │ │ │ │ │ └── moderation/ │ │ │ │ │ │ ├── getActorMetadata.ts │ │ │ │ │ │ ├── getMessageContext.ts │ │ │ │ │ │ └── updateActorAccess.ts │ │ │ │ │ ├── com/ │ │ │ │ │ │ └── atproto/ │ │ │ │ │ │ ├── admin/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteAccount.ts │ │ │ │ │ │ │ ├── disableAccountInvites.ts │ │ │ │ │ │ │ ├── disableInviteCodes.ts │ │ │ │ │ │ │ ├── enableAccountInvites.ts │ │ │ │ │ │ │ ├── getAccountInfo.ts │ │ │ │ │ │ │ ├── getAccountInfos.ts │ │ │ │ │ │ │ ├── getInviteCodes.ts │ │ │ │ │ │ │ ├── getSubjectStatus.ts │ │ │ │ │ │ │ ├── searchAccounts.ts │ │ │ │ │ │ │ ├── sendEmail.ts │ │ │ │ │ │ │ ├── updateAccountEmail.ts │ │ │ │ │ │ │ ├── updateAccountHandle.ts │ │ │ │ │ │ │ ├── updateAccountPassword.ts │ │ │ │ │ │ │ ├── updateAccountSigningKey.ts │ │ │ │ │ │ │ └── updateSubjectStatus.ts │ │ │ │ │ │ ├── identity/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getRecommendedDidCredentials.ts │ │ │ │ │ │ │ ├── refreshIdentity.ts │ │ │ │ │ │ │ ├── requestPlcOperationSignature.ts │ │ │ │ │ │ │ ├── resolveDid.ts │ │ │ │ │ │ │ ├── resolveHandle.ts │ │ │ │ │ │ │ ├── resolveIdentity.ts │ │ │ │ │ │ │ ├── signPlcOperation.ts │ │ │ │ │ │ │ ├── submitPlcOperation.ts │ │ │ │ │ │ │ └── updateHandle.ts │ │ │ │ │ │ ├── label/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── queryLabels.ts │ │ │ │ │ │ │ └── subscribeLabels.ts │ │ │ │ │ │ ├── lexicon/ │ │ │ │ │ │ │ ├── resolveLexicon.ts │ │ │ │ │ │ │ └── schema.ts │ │ │ │ │ │ ├── moderation/ │ │ │ │ │ │ │ ├── createReport.ts │ │ │ │ │ │ │ └── defs.ts │ │ │ │ │ │ ├── repo/ │ │ │ │ │ │ │ ├── applyWrites.ts │ │ │ │ │ │ │ ├── createRecord.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteRecord.ts │ │ │ │ │ │ │ ├── describeRepo.ts │ │ │ │ │ │ │ ├── getRecord.ts │ │ │ │ │ │ │ ├── importRepo.ts │ │ │ │ │ │ │ ├── listMissingBlobs.ts │ │ │ │ │ │ │ ├── listRecords.ts │ │ │ │ │ │ │ ├── putRecord.ts │ │ │ │ │ │ │ ├── strongRef.ts │ │ │ │ │ │ │ └── uploadBlob.ts │ │ │ │ │ │ ├── server/ │ │ │ │ │ │ │ ├── activateAccount.ts │ │ │ │ │ │ │ ├── checkAccountStatus.ts │ │ │ │ │ │ │ ├── confirmEmail.ts │ │ │ │ │ │ │ ├── createAccount.ts │ │ │ │ │ │ │ ├── createAppPassword.ts │ │ │ │ │ │ │ ├── createInviteCode.ts │ │ │ │ │ │ │ ├── createInviteCodes.ts │ │ │ │ │ │ │ ├── createSession.ts │ │ │ │ │ │ │ ├── deactivateAccount.ts │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── deleteAccount.ts │ │ │ │ │ │ │ ├── deleteSession.ts │ │ │ │ │ │ │ ├── describeServer.ts │ │ │ │ │ │ │ ├── getAccountInviteCodes.ts │ │ │ │ │ │ │ ├── getServiceAuth.ts │ │ │ │ │ │ │ ├── getSession.ts │ │ │ │ │ │ │ ├── listAppPasswords.ts │ │ │ │ │ │ │ ├── refreshSession.ts │ │ │ │ │ │ │ ├── requestAccountDelete.ts │ │ │ │ │ │ │ ├── requestEmailConfirmation.ts │ │ │ │ │ │ │ ├── requestEmailUpdate.ts │ │ │ │ │ │ │ ├── requestPasswordReset.ts │ │ │ │ │ │ │ ├── reserveSigningKey.ts │ │ │ │ │ │ │ ├── resetPassword.ts │ │ │ │ │ │ │ ├── revokeAppPassword.ts │ │ │ │ │ │ │ └── updateEmail.ts │ │ │ │ │ │ ├── sync/ │ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ │ ├── getBlob.ts │ │ │ │ │ │ │ ├── getBlocks.ts │ │ │ │ │ │ │ ├── getCheckout.ts │ │ │ │ │ │ │ ├── getHead.ts │ │ │ │ │ │ │ ├── getHostStatus.ts │ │ │ │ │ │ │ ├── getLatestCommit.ts │ │ │ │ │ │ │ ├── getRecord.ts │ │ │ │ │ │ │ ├── getRepo.ts │ │ │ │ │ │ │ ├── getRepoStatus.ts │ │ │ │ │ │ │ ├── listBlobs.ts │ │ │ │ │ │ │ ├── listHosts.ts │ │ │ │ │ │ │ ├── listRepos.ts │ │ │ │ │ │ │ ├── listReposByCollection.ts │ │ │ │ │ │ │ ├── notifyOfUpdate.ts │ │ │ │ │ │ │ ├── requestCrawl.ts │ │ │ │ │ │ │ └── subscribeRepos.ts │ │ │ │ │ │ └── temp/ │ │ │ │ │ │ ├── addReservedHandle.ts │ │ │ │ │ │ ├── checkHandleAvailability.ts │ │ │ │ │ │ ├── checkSignupQueue.ts │ │ │ │ │ │ ├── dereferenceScope.ts │ │ │ │ │ │ ├── fetchLabels.ts │ │ │ │ │ │ ├── requestPhoneVerification.ts │ │ │ │ │ │ └── revokeAccountCredentials.ts │ │ │ │ │ └── tools/ │ │ │ │ │ └── ozone/ │ │ │ │ │ ├── communication/ │ │ │ │ │ │ ├── createTemplate.ts │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── deleteTemplate.ts │ │ │ │ │ │ ├── listTemplates.ts │ │ │ │ │ │ └── updateTemplate.ts │ │ │ │ │ ├── hosting/ │ │ │ │ │ │ └── getAccountHistory.ts │ │ │ │ │ ├── moderation/ │ │ │ │ │ │ ├── cancelScheduledActions.ts │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── emitEvent.ts │ │ │ │ │ │ ├── getAccountTimeline.ts │ │ │ │ │ │ ├── getEvent.ts │ │ │ │ │ │ ├── getRecord.ts │ │ │ │ │ │ ├── getRecords.ts │ │ │ │ │ │ ├── getRepo.ts │ │ │ │ │ │ ├── getReporterStats.ts │ │ │ │ │ │ ├── getRepos.ts │ │ │ │ │ │ ├── getSubjects.ts │ │ │ │ │ │ ├── listScheduledActions.ts │ │ │ │ │ │ ├── queryEvents.ts │ │ │ │ │ │ ├── queryStatuses.ts │ │ │ │ │ │ ├── scheduleAction.ts │ │ │ │ │ │ └── searchRepos.ts │ │ │ │ │ ├── report/ │ │ │ │ │ │ └── defs.ts │ │ │ │ │ ├── safelink/ │ │ │ │ │ │ ├── addRule.ts │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── queryEvents.ts │ │ │ │ │ │ ├── queryRules.ts │ │ │ │ │ │ ├── removeRule.ts │ │ │ │ │ │ └── updateRule.ts │ │ │ │ │ ├── server/ │ │ │ │ │ │ └── getConfig.ts │ │ │ │ │ ├── set/ │ │ │ │ │ │ ├── addValues.ts │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── deleteSet.ts │ │ │ │ │ │ ├── deleteValues.ts │ │ │ │ │ │ ├── getValues.ts │ │ │ │ │ │ ├── querySets.ts │ │ │ │ │ │ └── upsertSet.ts │ │ │ │ │ ├── setting/ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── listOptions.ts │ │ │ │ │ │ ├── removeOptions.ts │ │ │ │ │ │ └── upsertOption.ts │ │ │ │ │ ├── signature/ │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── findCorrelation.ts │ │ │ │ │ │ ├── findRelatedAccounts.ts │ │ │ │ │ │ └── searchAccounts.ts │ │ │ │ │ ├── team/ │ │ │ │ │ │ ├── addMember.ts │ │ │ │ │ │ ├── defs.ts │ │ │ │ │ │ ├── deleteMember.ts │ │ │ │ │ │ ├── listMembers.ts │ │ │ │ │ │ └── updateMember.ts │ │ │ │ │ └── verification/ │ │ │ │ │ ├── defs.ts │ │ │ │ │ ├── grantVerifications.ts │ │ │ │ │ ├── listVerifications.ts │ │ │ │ │ └── revokeVerifications.ts │ │ │ │ └── util.ts │ │ │ ├── logger.ts │ │ │ ├── mailer/ │ │ │ │ ├── index.ts │ │ │ │ ├── moderation.ts │ │ │ │ ├── templates/ │ │ │ │ │ ├── confirm-email.d.ts │ │ │ │ │ ├── confirm-email.hbs │ │ │ │ │ ├── delete-account.d.ts │ │ │ │ │ ├── delete-account.hbs │ │ │ │ │ ├── plc-operation.d.ts │ │ │ │ │ ├── plc-operation.hbs │ │ │ │ │ ├── reset-password.d.ts │ │ │ │ │ ├── reset-password.hbs │ │ │ │ │ ├── update-email.d.ts │ │ │ │ │ └── update-email.hbs │ │ │ │ └── templates.ts │ │ │ ├── pipethrough.ts │ │ │ ├── read-after-write/ │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ ├── util.ts │ │ │ │ └── viewer.ts │ │ │ ├── redis.ts │ │ │ ├── repo/ │ │ │ │ ├── index.ts │ │ │ │ ├── prepare.ts │ │ │ │ └── types.ts │ │ │ ├── scripts/ │ │ │ │ ├── README.md │ │ │ │ ├── index.ts │ │ │ │ ├── publish-identity.ts │ │ │ │ ├── rebuild-repo.ts │ │ │ │ ├── rotate-keys.ts │ │ │ │ ├── sequencer-recovery/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── recoverer.ts │ │ │ │ │ ├── recovery-db.ts │ │ │ │ │ ├── repair-repos.ts │ │ │ │ │ └── user-queues.ts │ │ │ │ └── util.ts │ │ │ ├── sequencer/ │ │ │ │ ├── db/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── migrations/ │ │ │ │ │ │ ├── 001-init.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── schema.ts │ │ │ │ ├── events.ts │ │ │ │ ├── index.ts │ │ │ │ ├── outbox.ts │ │ │ │ └── sequencer.ts │ │ │ ├── util/ │ │ │ │ ├── compression.ts │ │ │ │ ├── debug.ts │ │ │ │ ├── http.ts │ │ │ │ ├── params.ts │ │ │ │ └── types.ts │ │ │ └── well-known.ts │ │ ├── test.env │ │ ├── tests/ │ │ │ ├── __snapshots__/ │ │ │ │ └── takedown-appeal.test.ts.snap │ │ │ ├── _puppeteer.ts │ │ │ ├── _util.ts │ │ │ ├── account-deactivation.test.ts │ │ │ ├── account-deletion.test.ts │ │ │ ├── account-migration.test.ts │ │ │ ├── account.test.ts │ │ │ ├── app-passwords.test.ts │ │ │ ├── auth.test.ts │ │ │ ├── blob-deletes.test.ts │ │ │ ├── create-post.test.ts │ │ │ ├── crud.test.ts │ │ │ ├── db.test.ts │ │ │ ├── email-confirmation.test.ts │ │ │ ├── entryway.test.ts │ │ │ ├── file-uploads.test.ts │ │ │ ├── handle-validation.test.ts │ │ │ ├── handles.test.ts │ │ │ ├── invite-codes.test.ts │ │ │ ├── invites-admin.test.ts │ │ │ ├── moderation.test.ts │ │ │ ├── moderator-auth.test.ts │ │ │ ├── oauth.test.ts │ │ │ ├── plc-operations.test.ts │ │ │ ├── preferences.test.ts │ │ │ ├── proxied/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ ├── admin.test.ts.snap │ │ │ │ │ ├── feedgen.test.ts.snap │ │ │ │ │ └── views.test.ts.snap │ │ │ │ ├── admin.test.ts │ │ │ │ ├── feedgen.test.ts │ │ │ │ ├── notif.test.ts │ │ │ │ ├── procedures.test.ts │ │ │ │ ├── proxy-catchall.test.ts │ │ │ │ ├── proxy-header.test.ts │ │ │ │ ├── read-after-write.test.ts │ │ │ │ └── views.test.ts │ │ │ ├── races.test.ts │ │ │ ├── rate-limits.test.ts │ │ │ ├── recovery.test.ts │ │ │ ├── seeds/ │ │ │ │ ├── basic.ts │ │ │ │ ├── follows.ts │ │ │ │ ├── likes.ts │ │ │ │ ├── reposts.ts │ │ │ │ ├── thread.ts │ │ │ │ ├── users-bulk.ts │ │ │ │ └── users.ts │ │ │ ├── sequencer.test.ts │ │ │ ├── server.test.ts │ │ │ ├── sync/ │ │ │ │ ├── invertible-ops.test.ts │ │ │ │ ├── list.test.ts │ │ │ │ ├── subscribe-repos.test.ts │ │ │ │ └── sync.test.ts │ │ │ └── takedown-appeal.test.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── tsconfig.tests.json │ ├── repo/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── bench/ │ │ │ ├── mst.bench.ts │ │ │ └── repo.bench.ts │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── block-map.ts │ │ │ ├── car.ts │ │ │ ├── cid-set.ts │ │ │ ├── data-diff.ts │ │ │ ├── error.ts │ │ │ ├── index.ts │ │ │ ├── logger.ts │ │ │ ├── mst/ │ │ │ │ ├── diff.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mst.ts │ │ │ │ ├── util.ts │ │ │ │ └── walker.ts │ │ │ ├── parse.ts │ │ │ ├── readable-repo.ts │ │ │ ├── repo.ts │ │ │ ├── storage/ │ │ │ │ ├── index.ts │ │ │ │ ├── memory-blockstore.ts │ │ │ │ ├── readable-blockstore.ts │ │ │ │ ├── sync-storage.ts │ │ │ │ └── types.ts │ │ │ ├── sync/ │ │ │ │ ├── consumer.ts │ │ │ │ ├── index.ts │ │ │ │ └── provider.ts │ │ │ ├── types.ts │ │ │ └── util.ts │ │ ├── tests/ │ │ │ ├── _keys.ts │ │ │ ├── _util.ts │ │ │ ├── car-file-fixtures.json │ │ │ ├── car.test.ts │ │ │ ├── commit-data.test.ts │ │ │ ├── commit-proof-fixtures.json │ │ │ ├── commit-proofs.test.ts │ │ │ ├── covering-proofs.test.ts │ │ │ ├── mst.test.ts │ │ │ ├── proofs.test.ts │ │ │ ├── repo.test.ts │ │ │ └── sync.test.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── tsconfig.tests.json │ ├── sync/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── events.ts │ │ │ ├── firehose/ │ │ │ │ ├── index.ts │ │ │ │ └── lexicons.ts │ │ │ ├── index.ts │ │ │ ├── runner/ │ │ │ │ ├── consecutive-list.ts │ │ │ │ ├── index.ts │ │ │ │ ├── memory-runner.ts │ │ │ │ └── types.ts │ │ │ └── util.ts │ │ ├── tests/ │ │ │ ├── firehose.test.ts │ │ │ └── runner.test.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── syntax/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── benchmark.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── at-identifier.ts │ │ │ ├── aturi.ts │ │ │ ├── aturi_validation.ts │ │ │ ├── datetime.ts │ │ │ ├── did.ts │ │ │ ├── handle.ts │ │ │ ├── index.ts │ │ │ ├── language.ts │ │ │ ├── nsid.ts │ │ │ ├── recordkey.ts │ │ │ ├── tid.ts │ │ │ └── uri.ts │ │ ├── tests/ │ │ │ ├── aturi.test.ts │ │ │ ├── datetime.test.ts │ │ │ ├── did.test.ts │ │ │ ├── handle.test.ts │ │ │ ├── language.test.ts │ │ │ ├── nsid.test.ts │ │ │ ├── recordkey.test.ts │ │ │ └── tid.test.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ ├── tsconfig.tests.json │ │ └── vitest.config.ts │ ├── tap/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── channel.ts │ │ │ ├── client.ts │ │ │ ├── index.ts │ │ │ ├── lex-indexer.ts │ │ │ ├── simple-indexer.ts │ │ │ ├── types.ts │ │ │ └── util.ts │ │ ├── tests/ │ │ │ ├── _util.ts │ │ │ ├── channel.test.ts │ │ │ ├── client.test.ts │ │ │ ├── lex-indexer.test.ts │ │ │ ├── simple-indexer.test.ts │ │ │ └── util.test.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ ├── tsconfig.tests.json │ │ └── vitest.config.ts │ ├── ws-client/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ ├── tests/ │ │ │ └── keepalive.test.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── tsconfig.tests.json │ ├── xrpc/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── client.ts │ │ │ ├── fetch-handler.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ ├── util.ts │ │ │ └── xrpc-client.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ └── xrpc-server/ │ ├── CHANGELOG.md │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src/ │ │ ├── auth.ts │ │ ├── errors.ts │ │ ├── index.ts │ │ ├── logger.ts │ │ ├── rate-limiter.ts │ │ ├── server.ts │ │ ├── stream/ │ │ │ ├── frames.ts │ │ │ ├── index.ts │ │ │ ├── logger.ts │ │ │ ├── server.ts │ │ │ ├── stream.ts │ │ │ ├── subscription.ts │ │ │ └── types.ts │ │ ├── types.ts │ │ └── util.ts │ ├── tests/ │ │ ├── _util.ts │ │ ├── auth.test.ts │ │ ├── bodies.test.ts │ │ ├── errors.test.ts │ │ ├── frames.test.ts │ │ ├── ipld.test.ts │ │ ├── parameters.test.ts │ │ ├── parsing.test.ts │ │ ├── procedures.test.ts │ │ ├── queries.test.ts │ │ ├── rate-limiter.test.ts │ │ ├── responses.test.ts │ │ ├── stream.test.ts │ │ └── subscriptions.test.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └──
Showing preview only (1,761K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (21717 symbols across 2620 files)
FILE: packages/api/jest.d.ts
type Matchers (line 3) | interface Matchers<R, T = {}> {
type Expect (line 12) | interface Expect {
FILE: packages/api/jest.setup.ts
method toBeModerationResult (line 5) | toBeModerationResult(
FILE: packages/api/scripts/code/labels.mjs
function gen (line 21) | async function gen() {
FILE: packages/api/src/age-assurance.ts
type AgeAssuranceRuleID (line 4) | type AgeAssuranceRuleID = Exclude<
function getAgeAssuranceRegionConfig (line 28) | function getAgeAssuranceRegionConfig(
function computeAgeAssuranceRegionAccess (line 43) | function computeAgeAssuranceRegionAccess(
FILE: packages/api/src/agent.ts
constant FEED_VIEW_PREF_DEFAULTS (line 54) | const FEED_VIEW_PREF_DEFAULTS = {
constant THREAD_VIEW_PREF_DEFAULTS (line 62) | const THREAD_VIEW_PREF_DEFAULTS = {
class Agent (line 77) | class Agent extends XrpcClient {
method configure (line 88) | static configure(opts: AtpAgentGlobalOpts) {
method xrpc (line 102) | get xrpc(): XrpcClient {
method constructor (line 108) | constructor(options: SessionManager | FetchHandler | FetchHandlerOptio...
method clone (line 145) | clone(): Agent {
method copyInto (line 149) | copyInto<T extends Agent>(inst: T): T {
method withProxy (line 157) | withProxy(serviceType: AtprotoServiceType, did: string) {
method appLabelers (line 170) | get appLabelers() {
method configureLabelers (line 176) | configureLabelers(labelerDids: readonly string[]) {
method configureLabelersHeader (line 181) | configureLabelersHeader(labelerDids: readonly string[]) {
method configureProxy (line 192) | configureProxy(value: AtprotoProxy | null) {
method configureProxyHeader (line 198) | configureProxyHeader(serviceType: AtprotoServiceType, did: string) {
method did (line 210) | get did() {
method accountDid (line 215) | get accountDid() {
method assertDid (line 222) | get assertDid(): string {
method assertAuthenticated (line 230) | public assertAuthenticated(): asserts this is { did: string } {
method api (line 237) | get api() {
method getLabelDefinitions (line 335) | async getLabelDefinitions(
method post (line 366) | async post(
method deletePost (line 377) | async deletePost(postUri: string) {
method like (line 387) | async like(uri: string, cid: string, via?: { uri: string; cid: string ...
method deleteLike (line 398) | async deleteLike(likeUri: string) {
method repost (line 408) | async repost(uri: string, cid: string, via?: { uri: string; cid: strin...
method deleteRepost (line 419) | async deleteRepost(repostUri: string) {
method follow (line 429) | async follow(subjectDid: string, via?: { uri: string; cid: string }) {
method deleteFollow (line 440) | async deleteFollow(followUri: string) {
method upsertProfile (line 454) | async upsertProfile(
method mute (line 502) | async mute(actor: string) {
method unmute (line 506) | async unmute(actor: string) {
method muteModList (line 510) | async muteModList(uri: string) {
method unmuteModList (line 514) | async unmuteModList(uri: string) {
method blockModList (line 518) | async blockModList(uri: string) {
method unblockModList (line 528) | async unblockModList(uri: string) {
method updateSeenNotifications (line 546) | async updateSeenNotifications(seenAt = new Date().toISOString()) {
method getPreferences (line 550) | async getPreferences(): Promise<BskyPreferences> {
method overwriteSavedFeeds (line 766) | async overwriteSavedFeeds(savedFeeds: AppBskyActorDefs.SavedFeed[]) {
method updateSavedFeeds (line 781) | async updateSavedFeeds(savedFeedsToUpdate: AppBskyActorDefs.SavedFeed[...
method addSavedFeeds (line 800) | async addSavedFeeds(
method removeSavedFeeds (line 814) | async removeSavedFeeds(ids: string[]) {
method setSavedFeeds (line 823) | async setSavedFeeds(saved: string[], pinned: string[]) {
method addSavedFeed (line 833) | async addSavedFeed(v: string) {
method removeSavedFeed (line 843) | async removeSavedFeed(v: string) {
method addPinnedFeed (line 853) | async addPinnedFeed(v: string) {
method removePinnedFeed (line 863) | async removePinnedFeed(v: string) {
method setAdultContentEnabled (line 870) | async setAdultContentEnabled(v: boolean) {
method setContentLabelPref (line 887) | async setContentLabelPref(
method addLabeler (line 962) | async addLabeler(did: string) {
method removeLabeler (line 981) | async removeLabeler(did: string) {
method setPersonalDetails (line 998) | async setPersonalDetails({
method setFeedViewPrefs (line 1019) | async setFeedViewPrefs(feed: string, pref: Partial<BskyFeedViewPrefere...
method setThreadViewPrefs (line 1036) | async setThreadViewPrefs(pref: Partial<BskyThreadViewPreference>) {
method setInterestsPref (line 1050) | async setInterestsPref(pref: Partial<BskyInterestsPreference>) {
method addMutedWord (line 1067) | async addMutedWord(
method addMutedWords (line 1114) | async addMutedWords(newMutedWords: AppBskyActorDefs.MutedWord[]) {
method upsertMutedWords (line 1121) | async upsertMutedWords(
method updateMutedWord (line 1133) | async updateMutedWord(mutedWord: AppBskyActorDefs.MutedWord) {
method removeMutedWord (line 1178) | async removeMutedWord(mutedWord: AppBskyActorDefs.MutedWord) {
method removeMutedWords (line 1211) | async removeMutedWords(mutedWords: AppBskyActorDefs.MutedWord[]) {
method hidePost (line 1215) | async hidePost(postUri: string) {
method unhidePost (line 1219) | async unhidePost(postUri: string) {
method bskyAppQueueNudges (line 1223) | async bskyAppQueueNudges(nudges: string | string[]) {
method bskyAppDismissNudges (line 1237) | async bskyAppDismissNudges(nudges: string | string[]) {
method bskyAppSetActiveProgressGuide (line 1254) | async bskyAppSetActiveProgressGuide(
method bskyAppUpsertNux (line 1278) | async bskyAppUpsertNux(nux: Nux) {
method bskyAppRemoveNuxs (line 1317) | async bskyAppRemoveNuxs(ids: string[]) {
method setPostInteractionSettings (line 1331) | async setPostInteractionSettings(
method setVerificationPrefs (line 1358) | async setVerificationPrefs(settings: AppBskyActorDefs.VerificationPref...
method updateLiveEventPreferences (line 1377) | async updateLiveEventPreferences(
method updatePreferences (line 1424) | private async updatePreferences(
method updateHiddenPost (line 1445) | private async updateHiddenPost(postUri: string, action: 'hide' | 'unhi...
method updateFeedPreferences (line 1468) | private async updateFeedPreferences(
method updateSavedFeedsV2Preferences (line 1493) | private async updateSavedFeedsV2Preferences(
function adjustLegacyContentLabelPref (line 1557) | function adjustLegacyContentLabelPref(
function remapLegacyLabels (line 1574) | function remapLegacyLabels(
function prefsArrayToLabelerDids (line 1597) | function prefsArrayToLabelerDids(
function isBskyPrefs (line 1610) | function isBskyPrefs(v: any): v is BskyPreferences {
function isModPrefs (line 1619) | function isModPrefs(v: any): v is ModerationPrefs {
function migrateLegacyMutedWordsItems (line 1623) | function migrateLegacyMutedWordsItems(items: AppBskyActorDefs.MutedWord[...
function matchMutedWord (line 1630) | function matchMutedWord(
FILE: packages/api/src/atp-agent.ts
type AtpAgentOptions (line 30) | type AtpAgentOptions = {
class AtpAgent (line 53) | class AtpAgent extends Agent {
method constructor (line 56) | constructor(options: AtpAgentOptions | CredentialSession) {
method clone (line 79) | clone(): AtpAgent {
method session (line 83) | get session() {
method hasSession (line 87) | get hasSession() {
method did (line 91) | get did() {
method serviceUrl (line 95) | get serviceUrl() {
method pdsUrl (line 99) | get pdsUrl() {
method dispatchUrl (line 103) | get dispatchUrl() {
method service (line 108) | get service() {
method persistSession (line 112) | get persistSession() {
method persistSession (line 118) | set persistSession(v: unknown) {
method getServiceUrl (line 125) | getServiceUrl() {
method resumeSession (line 129) | async resumeSession(
method createAccount (line 135) | async createAccount(
method login (line 142) | async login(
method logout (line 148) | async logout(): Promise<void> {
class CredentialSession (line 159) | class CredentialSession implements SessionManager {
method constructor (line 183) | constructor(
method did (line 189) | get did() {
method dispatchUrl (line 193) | get dispatchUrl() {
method hasSession (line 197) | get hasSession() {
method setFetch (line 204) | setFetch(fetch = globalThis.fetch) {
method fetchHandler (line 208) | async fetchHandler(url: string, init?: RequestInit): Promise<Response> {
method createAccount (line 274) | async createAccount(
method login (line 307) | async login(
method logout (line 347) | async logout(): Promise<void> {
method resumeSession (line 373) | async resumeSession(
method refreshSession (line 404) | async refreshSession(): Promise<ComAtprotoServerRefreshSession.Respons...
method _refreshSessionInner (line 426) | private async _refreshSessionInner(): Promise<ComAtprotoServerRefreshS...
method _updateApiEndpoint (line 523) | private _updateApiEndpoint(didDoc: unknown) {
function isErrorObject (line 537) | function isErrorObject(v: unknown): v is ErrorResponseBody {
function isErrorResponse (line 541) | async function isErrorResponse(
function peekJson (line 557) | async function peekJson(
function extractLength (line 566) | function extractLength({ headers }: Response) {
function extractType (line 572) | function extractType({ headers }: Response) {
FILE: packages/api/src/bsky-agent.ts
class BskyAgent (line 4) | class BskyAgent extends AtpAgent {
method clone (line 5) | clone(): this {
FILE: packages/api/src/client/index.ts
constant APP_BSKY_ACTOR (line 642) | const APP_BSKY_ACTOR = {
constant APP_BSKY_FEED (line 645) | const APP_BSKY_FEED = {
constant APP_BSKY_GRAPH (line 661) | const APP_BSKY_GRAPH = {
constant COM_ATPROTO_MODERATION (line 666) | const COM_ATPROTO_MODERATION = {
constant TOOLS_OZONE_MODERATION (line 675) | const TOOLS_OZONE_MODERATION = {
constant TOOLS_OZONE_REPORT (line 687) | const TOOLS_OZONE_REPORT = {
constant TOOLS_OZONE_TEAM (line 743) | const TOOLS_OZONE_TEAM = {
class AtpBaseClient (line 750) | class AtpBaseClient extends XrpcClient {
method constructor (line 756) | constructor(options: FetchHandler | FetchHandlerOptions) {
method xrpc (line 765) | get xrpc(): XrpcClient {
class AppNS (line 770) | class AppNS {
method constructor (line 774) | constructor(client: XrpcClient) {
class AppBskyNS (line 780) | class AppBskyNS {
method constructor (line 796) | constructor(client: XrpcClient) {
class AppBskyActorNS (line 814) | class AppBskyActorNS {
method constructor (line 819) | constructor(client: XrpcClient) {
method getPreferences (line 825) | getPreferences(
method getProfile (line 837) | getProfile(
method getProfiles (line 849) | getProfiles(
method getSuggestions (line 861) | getSuggestions(
method putPreferences (line 873) | putPreferences(
method searchActors (line 885) | searchActors(
method searchActorsTypeahead (line 897) | searchActorsTypeahead(
class AppBskyActorProfileRecord (line 910) | class AppBskyActorProfileRecord {
method constructor (line 913) | constructor(client: XrpcClient) {
method list (line 917) | async list(
method get (line 930) | async get(
method create (line 940) | async create(
method put (line 963) | async put(
method delete (line 981) | async delete(
class AppBskyActorStatusRecord (line 994) | class AppBskyActorStatusRecord {
method constructor (line 997) | constructor(client: XrpcClient) {
method list (line 1001) | async list(
method get (line 1014) | async get(
method create (line 1024) | async create(
method put (line 1047) | async put(
method delete (line 1065) | async delete(
class AppBskyAgeassuranceNS (line 1078) | class AppBskyAgeassuranceNS {
method constructor (line 1081) | constructor(client: XrpcClient) {
method begin (line 1085) | begin(
method getConfig (line 1096) | getConfig(
method getState (line 1108) | getState(
class AppBskyBookmarkNS (line 1121) | class AppBskyBookmarkNS {
method constructor (line 1124) | constructor(client: XrpcClient) {
method createBookmark (line 1128) | createBookmark(
method deleteBookmark (line 1139) | deleteBookmark(
method getBookmarks (line 1150) | getBookmarks(
class AppBskyContactNS (line 1163) | class AppBskyContactNS {
method constructor (line 1166) | constructor(client: XrpcClient) {
method dismissMatch (line 1170) | dismissMatch(
method getMatches (line 1181) | getMatches(
method getSyncStatus (line 1192) | getSyncStatus(
method importContacts (line 1203) | importContacts(
method removeData (line 1214) | removeData(
method sendNotification (line 1225) | sendNotification(
method startPhoneVerification (line 1237) | startPhoneVerification(
method verifyPhone (line 1248) | verifyPhone(
class AppBskyDraftNS (line 1260) | class AppBskyDraftNS {
method constructor (line 1263) | constructor(client: XrpcClient) {
method createDraft (line 1267) | createDraft(
method deleteDraft (line 1278) | deleteDraft(
method getDrafts (line 1285) | getDrafts(
method updateDraft (line 1297) | updateDraft(
class AppBskyEmbedNS (line 1305) | class AppBskyEmbedNS {
method constructor (line 1308) | constructor(client: XrpcClient) {
class AppBskyFeedNS (line 1313) | class AppBskyFeedNS {
method constructor (line 1322) | constructor(client: XrpcClient) {
method describeFeedGenerator (line 1332) | describeFeedGenerator(
method getActorFeeds (line 1344) | getActorFeeds(
method getActorLikes (line 1356) | getActorLikes(
method getAuthorFeed (line 1367) | getAuthorFeed(
method getFeed (line 1378) | getFeed(
method getFeedGenerator (line 1389) | getFeedGenerator(
method getFeedGenerators (line 1401) | getFeedGenerators(
method getFeedSkeleton (line 1413) | getFeedSkeleton(
method getLikes (line 1424) | getLikes(
method getListFeed (line 1431) | getListFeed(
method getPostThread (line 1442) | getPostThread(
method getPosts (line 1453) | getPosts(
method getQuotes (line 1460) | getQuotes(
method getRepostedBy (line 1467) | getRepostedBy(
method getSuggestedFeeds (line 1479) | getSuggestedFeeds(
method getTimeline (line 1491) | getTimeline(
method searchPosts (line 1503) | searchPosts(
method sendInteractions (line 1514) | sendInteractions(
class AppBskyFeedGeneratorRecord (line 1527) | class AppBskyFeedGeneratorRecord {
method constructor (line 1530) | constructor(client: XrpcClient) {
method list (line 1534) | async list(
method get (line 1547) | async get(
method create (line 1557) | async create(
method put (line 1575) | async put(
method delete (line 1593) | async delete(
class AppBskyFeedLikeRecord (line 1606) | class AppBskyFeedLikeRecord {
method constructor (line 1609) | constructor(client: XrpcClient) {
method list (line 1613) | async list(
method get (line 1626) | async get(
method create (line 1636) | async create(
method put (line 1654) | async put(
method delete (line 1672) | async delete(
class AppBskyFeedPostRecord (line 1685) | class AppBskyFeedPostRecord {
method constructor (line 1688) | constructor(client: XrpcClient) {
method list (line 1692) | async list(
method get (line 1705) | async get(
method create (line 1715) | async create(
method put (line 1733) | async put(
method delete (line 1751) | async delete(
class AppBskyFeedPostgateRecord (line 1764) | class AppBskyFeedPostgateRecord {
method constructor (line 1767) | constructor(client: XrpcClient) {
method list (line 1771) | async list(
method get (line 1784) | async get(
method create (line 1794) | async create(
method put (line 1812) | async put(
method delete (line 1830) | async delete(
class AppBskyFeedRepostRecord (line 1843) | class AppBskyFeedRepostRecord {
method constructor (line 1846) | constructor(client: XrpcClient) {
method list (line 1850) | async list(
method get (line 1863) | async get(
method create (line 1873) | async create(
method put (line 1891) | async put(
method delete (line 1909) | async delete(
class AppBskyFeedThreadgateRecord (line 1922) | class AppBskyFeedThreadgateRecord {
method constructor (line 1925) | constructor(client: XrpcClient) {
method list (line 1929) | async list(
method get (line 1942) | async get(
method create (line 1956) | async create(
method put (line 1974) | async put(
method delete (line 1992) | async delete(
class AppBskyGraphNS (line 2005) | class AppBskyGraphNS {
method constructor (line 2015) | constructor(client: XrpcClient) {
method getActorStarterPacks (line 2026) | getActorStarterPacks(
method getBlocks (line 2038) | getBlocks(
method getFollowers (line 2050) | getFollowers(
method getFollows (line 2062) | getFollows(
method getKnownFollowers (line 2074) | getKnownFollowers(
method getList (line 2086) | getList(
method getListBlocks (line 2093) | getListBlocks(
method getListMutes (line 2105) | getListMutes(
method getLists (line 2117) | getLists(
method getListsWithMembership (line 2124) | getListsWithMembership(
method getMutes (line 2136) | getMutes(
method getRelationships (line 2143) | getRelationships(
method getStarterPack (line 2154) | getStarterPack(
method getStarterPacks (line 2166) | getStarterPacks(
method getStarterPacksWithMembership (line 2178) | getStarterPacksWithMembership(
method getSuggestedFollowsByActor (line 2190) | getSuggestedFollowsByActor(
method muteActor (line 2202) | muteActor(
method muteActorList (line 2209) | muteActorList(
method muteThread (line 2221) | muteThread(
method searchStarterPacks (line 2228) | searchStarterPacks(
method unmuteActor (line 2240) | unmuteActor(
method unmuteActorList (line 2247) | unmuteActorList(
method unmuteThread (line 2259) | unmuteThread(
class AppBskyGraphBlockRecord (line 2272) | class AppBskyGraphBlockRecord {
method constructor (line 2275) | constructor(client: XrpcClient) {
method list (line 2279) | async list(
method get (line 2292) | async get(
method create (line 2302) | async create(
method put (line 2320) | async put(
method delete (line 2338) | async delete(
class AppBskyGraphFollowRecord (line 2351) | class AppBskyGraphFollowRecord {
method constructor (line 2354) | constructor(client: XrpcClient) {
method list (line 2358) | async list(
method get (line 2371) | async get(
method create (line 2381) | async create(
method put (line 2399) | async put(
method delete (line 2417) | async delete(
class AppBskyGraphListRecord (line 2430) | class AppBskyGraphListRecord {
method constructor (line 2433) | constructor(client: XrpcClient) {
method list (line 2437) | async list(
method get (line 2450) | async get(
method create (line 2460) | async create(
method put (line 2478) | async put(
method delete (line 2496) | async delete(
class AppBskyGraphListblockRecord (line 2509) | class AppBskyGraphListblockRecord {
method constructor (line 2512) | constructor(client: XrpcClient) {
method list (line 2516) | async list(
method get (line 2529) | async get(
method create (line 2543) | async create(
method put (line 2561) | async put(
method delete (line 2579) | async delete(
class AppBskyGraphListitemRecord (line 2592) | class AppBskyGraphListitemRecord {
method constructor (line 2595) | constructor(client: XrpcClient) {
method list (line 2599) | async list(
method get (line 2612) | async get(
method create (line 2622) | async create(
method put (line 2640) | async put(
method delete (line 2658) | async delete(
class AppBskyGraphStarterpackRecord (line 2671) | class AppBskyGraphStarterpackRecord {
method constructor (line 2674) | constructor(client: XrpcClient) {
method list (line 2678) | async list(
method get (line 2691) | async get(
method create (line 2705) | async create(
method put (line 2723) | async put(
method delete (line 2741) | async delete(
class AppBskyGraphVerificationRecord (line 2754) | class AppBskyGraphVerificationRecord {
method constructor (line 2757) | constructor(client: XrpcClient) {
method list (line 2761) | async list(
method get (line 2774) | async get(
method create (line 2788) | async create(
method put (line 2806) | async put(
method delete (line 2824) | async delete(
class AppBskyLabelerNS (line 2837) | class AppBskyLabelerNS {
method constructor (line 2841) | constructor(client: XrpcClient) {
method getServices (line 2846) | getServices(
class AppBskyLabelerServiceRecord (line 2859) | class AppBskyLabelerServiceRecord {
method constructor (line 2862) | constructor(client: XrpcClient) {
method list (line 2866) | async list(
method get (line 2879) | async get(
method create (line 2893) | async create(
method put (line 2916) | async put(
method delete (line 2934) | async delete(
class AppBskyNotificationNS (line 2947) | class AppBskyNotificationNS {
method constructor (line 2951) | constructor(client: XrpcClient) {
method getPreferences (line 2956) | getPreferences(
method getUnreadCount (line 2968) | getUnreadCount(
method listActivitySubscriptions (line 2980) | listActivitySubscriptions(
method listNotifications (line 2992) | listNotifications(
method putActivitySubscription (line 3004) | putActivitySubscription(
method putPreferences (line 3016) | putPreferences(
method putPreferencesV2 (line 3028) | putPreferencesV2(
method registerPush (line 3040) | registerPush(
method unregisterPush (line 3052) | unregisterPush(
method updateSeen (line 3064) | updateSeen(
class AppBskyNotificationDeclarationRecord (line 3077) | class AppBskyNotificationDeclarationRecord {
method constructor (line 3080) | constructor(client: XrpcClient) {
method list (line 3084) | async list(
method get (line 3097) | async get(
method create (line 3111) | async create(
method put (line 3134) | async put(
method delete (line 3152) | async delete(
class AppBskyRichtextNS (line 3165) | class AppBskyRichtextNS {
method constructor (line 3168) | constructor(client: XrpcClient) {
class AppBskyUnspeccedNS (line 3173) | class AppBskyUnspeccedNS {
method constructor (line 3176) | constructor(client: XrpcClient) {
method getAgeAssuranceState (line 3180) | getAgeAssuranceState(
method getConfig (line 3192) | getConfig(
method getOnboardingSuggestedStarterPacks (line 3204) | getOnboardingSuggestedStarterPacks(
method getOnboardingSuggestedStarterPacksSkeleton (line 3216) | getOnboardingSuggestedStarterPacksSkeleton(
method getOnboardingSuggestedUsersSkeleton (line 3228) | getOnboardingSuggestedUsersSkeleton(
method getPopularFeedGenerators (line 3240) | getPopularFeedGenerators(
method getPostThreadOtherV2 (line 3252) | getPostThreadOtherV2(
method getPostThreadV2 (line 3264) | getPostThreadV2(
method getSuggestedFeeds (line 3276) | getSuggestedFeeds(
method getSuggestedFeedsSkeleton (line 3288) | getSuggestedFeedsSkeleton(
method getSuggestedOnboardingUsers (line 3300) | getSuggestedOnboardingUsers(
method getSuggestedStarterPacks (line 3312) | getSuggestedStarterPacks(
method getSuggestedStarterPacksSkeleton (line 3324) | getSuggestedStarterPacksSkeleton(
method getSuggestedUsers (line 3336) | getSuggestedUsers(
method getSuggestedUsersSkeleton (line 3348) | getSuggestedUsersSkeleton(
method getSuggestionsSkeleton (line 3360) | getSuggestionsSkeleton(
method getTaggedSuggestions (line 3372) | getTaggedSuggestions(
method getTrendingTopics (line 3384) | getTrendingTopics(
method getTrends (line 3396) | getTrends(
method getTrendsSkeleton (line 3408) | getTrendsSkeleton(
method initAgeAssurance (line 3420) | initAgeAssurance(
method searchActorsSkeleton (line 3431) | searchActorsSkeleton(
method searchPostsSkeleton (line 3442) | searchPostsSkeleton(
method searchStarterPacksSkeleton (line 3453) | searchStarterPacksSkeleton(
class AppBskyVideoNS (line 3470) | class AppBskyVideoNS {
method constructor (line 3473) | constructor(client: XrpcClient) {
method getJobStatus (line 3477) | getJobStatus(
method getUploadLimits (line 3489) | getUploadLimits(
method uploadVideo (line 3501) | uploadVideo(
class ChatNS (line 3509) | class ChatNS {
method constructor (line 3513) | constructor(client: XrpcClient) {
class ChatBskyNS (line 3519) | class ChatBskyNS {
method constructor (line 3525) | constructor(client: XrpcClient) {
class ChatBskyActorNS (line 3533) | class ChatBskyActorNS {
method constructor (line 3537) | constructor(client: XrpcClient) {
method deleteAccount (line 3542) | deleteAccount(
method exportAccountData (line 3554) | exportAccountData(
class ChatBskyActorDeclarationRecord (line 3567) | class ChatBskyActorDeclarationRecord {
method constructor (line 3570) | constructor(client: XrpcClient) {
method list (line 3574) | async list(
method get (line 3587) | async get(
method create (line 3601) | async create(
method put (line 3624) | async put(
method delete (line 3642) | async delete(
class ChatBskyConvoNS (line 3655) | class ChatBskyConvoNS {
method constructor (line 3658) | constructor(client: XrpcClient) {
method acceptConvo (line 3662) | acceptConvo(
method addReaction (line 3674) | addReaction(
method deleteMessageForSelf (line 3685) | deleteMessageForSelf(
method getConvo (line 3697) | getConvo(
method getConvoAvailability (line 3709) | getConvoAvailability(
method getConvoForMembers (line 3721) | getConvoForMembers(
method getLog (line 3733) | getLog(
method getMessages (line 3740) | getMessages(
method leaveConvo (line 3752) | leaveConvo(
method listConvos (line 3759) | listConvos(
method muteConvo (line 3771) | muteConvo(
method removeReaction (line 3778) | removeReaction(
method sendMessage (line 3789) | sendMessage(
method sendMessageBatch (line 3801) | sendMessageBatch(
method unmuteConvo (line 3813) | unmuteConvo(
method updateAllRead (line 3825) | updateAllRead(
method updateRead (line 3837) | updateRead(
class ChatBskyModerationNS (line 3845) | class ChatBskyModerationNS {
method constructor (line 3848) | constructor(client: XrpcClient) {
method getActorMetadata (line 3852) | getActorMetadata(
method getMessageContext (line 3864) | getMessageContext(
method updateActorAccess (line 3876) | updateActorAccess(
class ComNS (line 3889) | class ComNS {
method constructor (line 3894) | constructor(client: XrpcClient) {
class ComAtprotoNS (line 3901) | class ComAtprotoNS {
method constructor (line 3913) | constructor(client: XrpcClient) {
class ComAtprotoAdminNS (line 3927) | class ComAtprotoAdminNS {
method constructor (line 3930) | constructor(client: XrpcClient) {
method deleteAccount (line 3934) | deleteAccount(
method disableAccountInvites (line 3946) | disableAccountInvites(
method disableInviteCodes (line 3958) | disableInviteCodes(
method enableAccountInvites (line 3970) | enableAccountInvites(
method getAccountInfo (line 3982) | getAccountInfo(
method getAccountInfos (line 3994) | getAccountInfos(
method getInviteCodes (line 4006) | getInviteCodes(
method getSubjectStatus (line 4018) | getSubjectStatus(
method searchAccounts (line 4030) | searchAccounts(
method sendEmail (line 4042) | sendEmail(
method updateAccountEmail (line 4054) | updateAccountEmail(
method updateAccountHandle (line 4066) | updateAccountHandle(
method updateAccountPassword (line 4078) | updateAccountPassword(
method updateAccountSigningKey (line 4090) | updateAccountSigningKey(
method updateSubjectStatus (line 4102) | updateSubjectStatus(
class ComAtprotoIdentityNS (line 4115) | class ComAtprotoIdentityNS {
method constructor (line 4118) | constructor(client: XrpcClient) {
method getRecommendedDidCredentials (line 4122) | getRecommendedDidCredentials(
method refreshIdentity (line 4134) | refreshIdentity(
method requestPlcOperationSignature (line 4145) | requestPlcOperationSignature(
method resolveDid (line 4157) | resolveDid(
method resolveHandle (line 4168) | resolveHandle(
method resolveIdentity (line 4179) | resolveIdentity(
method signPlcOperation (line 4190) | signPlcOperation(
method submitPlcOperation (line 4202) | submitPlcOperation(
method updateHandle (line 4214) | updateHandle(
class ComAtprotoLabelNS (line 4227) | class ComAtprotoLabelNS {
method constructor (line 4230) | constructor(client: XrpcClient) {
method queryLabels (line 4234) | queryLabels(
class ComAtprotoLexiconNS (line 4247) | class ComAtprotoLexiconNS {
method constructor (line 4251) | constructor(client: XrpcClient) {
method resolveLexicon (line 4256) | resolveLexicon(
class ComAtprotoLexiconSchemaRecord (line 4268) | class ComAtprotoLexiconSchemaRecord {
method constructor (line 4271) | constructor(client: XrpcClient) {
method list (line 4275) | async list(
method get (line 4288) | async get(
method create (line 4302) | async create(
method put (line 4320) | async put(
method delete (line 4338) | async delete(
class ComAtprotoModerationNS (line 4351) | class ComAtprotoModerationNS {
method constructor (line 4354) | constructor(client: XrpcClient) {
method createReport (line 4358) | createReport(
class ComAtprotoRepoNS (line 4371) | class ComAtprotoRepoNS {
method constructor (line 4374) | constructor(client: XrpcClient) {
method applyWrites (line 4378) | applyWrites(
method createRecord (line 4389) | createRecord(
method deleteRecord (line 4400) | deleteRecord(
method describeRepo (line 4411) | describeRepo(
method getRecord (line 4423) | getRecord(
method importRepo (line 4434) | importRepo(
method listMissingBlobs (line 4446) | listMissingBlobs(
method listRecords (line 4458) | listRecords(
method putRecord (line 4470) | putRecord(
method uploadBlob (line 4481) | uploadBlob(
class ComAtprotoServerNS (line 4494) | class ComAtprotoServerNS {
method constructor (line 4497) | constructor(client: XrpcClient) {
method activateAccount (line 4501) | activateAccount(
method checkAccountStatus (line 4513) | checkAccountStatus(
method confirmEmail (line 4525) | confirmEmail(
method createAccount (line 4536) | createAccount(
method createAppPassword (line 4547) | createAppPassword(
method createInviteCode (line 4558) | createInviteCode(
method createInviteCodes (line 4570) | createInviteCodes(
method createSession (line 4582) | createSession(
method deactivateAccount (line 4593) | deactivateAccount(
method deleteAccount (line 4605) | deleteAccount(
method deleteSession (line 4616) | deleteSession(
method describeServer (line 4627) | describeServer(
method getAccountInviteCodes (line 4639) | getAccountInviteCodes(
method getServiceAuth (line 4650) | getServiceAuth(
method getSession (line 4661) | getSession(
method listAppPasswords (line 4673) | listAppPasswords(
method refreshSession (line 4684) | refreshSession(
method requestAccountDelete (line 4695) | requestAccountDelete(
method requestEmailConfirmation (line 4707) | requestEmailConfirmation(
method requestEmailUpdate (line 4719) | requestEmailUpdate(
method requestPasswordReset (line 4731) | requestPasswordReset(
method reserveSigningKey (line 4743) | reserveSigningKey(
method resetPassword (line 4755) | resetPassword(
method revokeAppPassword (line 4766) | revokeAppPassword(
method updateEmail (line 4778) | updateEmail(
class ComAtprotoSyncNS (line 4790) | class ComAtprotoSyncNS {
method constructor (line 4793) | constructor(client: XrpcClient) {
method getBlob (line 4797) | getBlob(
method getBlocks (line 4808) | getBlocks(
method getCheckout (line 4819) | getCheckout(
method getHead (line 4831) | getHead(
method getHostStatus (line 4842) | getHostStatus(
method getLatestCommit (line 4853) | getLatestCommit(
method getRecord (line 4864) | getRecord(
method getRepo (line 4875) | getRepo(
method getRepoStatus (line 4886) | getRepoStatus(
method listBlobs (line 4897) | listBlobs(
method listHosts (line 4908) | listHosts(
method listRepos (line 4920) | listRepos(
method listReposByCollection (line 4932) | listReposByCollection(
method notifyOfUpdate (line 4944) | notifyOfUpdate(
method requestCrawl (line 4956) | requestCrawl(
class ComAtprotoTempNS (line 4968) | class ComAtprotoTempNS {
method constructor (line 4971) | constructor(client: XrpcClient) {
method addReservedHandle (line 4975) | addReservedHandle(
method checkHandleAvailability (line 4987) | checkHandleAvailability(
method checkSignupQueue (line 4998) | checkSignupQueue(
method dereferenceScope (line 5010) | dereferenceScope(
method fetchLabels (line 5021) | fetchLabels(
method requestPhoneVerification (line 5033) | requestPhoneVerification(
method revokeAccountCredentials (line 5045) | revokeAccountCredentials(
class ComGermnetworkNS (line 5058) | class ComGermnetworkNS {
method constructor (line 5062) | constructor(client: XrpcClient) {
class ComGermnetworkDeclarationRecord (line 5068) | class ComGermnetworkDeclarationRecord {
method constructor (line 5071) | constructor(client: XrpcClient) {
method list (line 5075) | async list(
method get (line 5088) | async get(
method create (line 5102) | async create(
method put (line 5125) | async put(
method delete (line 5143) | async delete(
class ToolsNS (line 5156) | class ToolsNS {
method constructor (line 5160) | constructor(client: XrpcClient) {
class ToolsOzoneNS (line 5166) | class ToolsOzoneNS {
method constructor (line 5179) | constructor(client: XrpcClient) {
class ToolsOzoneCommunicationNS (line 5194) | class ToolsOzoneCommunicationNS {
method constructor (line 5197) | constructor(client: XrpcClient) {
method createTemplate (line 5201) | createTemplate(
method deleteTemplate (line 5212) | deleteTemplate(
method listTemplates (line 5224) | listTemplates(
method updateTemplate (line 5236) | updateTemplate(
class ToolsOzoneHostingNS (line 5248) | class ToolsOzoneHostingNS {
method constructor (line 5251) | constructor(client: XrpcClient) {
method getAccountHistory (line 5255) | getAccountHistory(
class ToolsOzoneModerationNS (line 5268) | class ToolsOzoneModerationNS {
method constructor (line 5271) | constructor(client: XrpcClient) {
method cancelScheduledActions (line 5275) | cancelScheduledActions(
method emitEvent (line 5287) | emitEvent(
method getAccountTimeline (line 5298) | getAccountTimeline(
method getEvent (line 5314) | getEvent(
method getRecord (line 5326) | getRecord(
method getRecords (line 5337) | getRecords(
method getRepo (line 5349) | getRepo(
method getReporterStats (line 5360) | getReporterStats(
method getRepos (line 5372) | getRepos(
method getSubjects (line 5384) | getSubjects(
method listScheduledActions (line 5396) | listScheduledActions(
method queryEvents (line 5408) | queryEvents(
method queryStatuses (line 5420) | queryStatuses(
method scheduleAction (line 5432) | scheduleAction(
method searchRepos (line 5444) | searchRepos(
class ToolsOzoneSafelinkNS (line 5457) | class ToolsOzoneSafelinkNS {
method constructor (line 5460) | constructor(client: XrpcClient) {
method addRule (line 5464) | addRule(
method queryEvents (line 5475) | queryEvents(
method queryRules (line 5487) | queryRules(
method removeRule (line 5499) | removeRule(
method updateRule (line 5510) | updateRule(
class ToolsOzoneServerNS (line 5522) | class ToolsOzoneServerNS {
method constructor (line 5525) | constructor(client: XrpcClient) {
method getConfig (line 5529) | getConfig(
class ToolsOzoneSetNS (line 5542) | class ToolsOzoneSetNS {
method constructor (line 5545) | constructor(client: XrpcClient) {
method addValues (line 5549) | addValues(
method deleteSet (line 5556) | deleteSet(
method deleteValues (line 5567) | deleteValues(
method getValues (line 5578) | getValues(
method querySets (line 5589) | querySets(
method upsertSet (line 5601) | upsertSet(
class ToolsOzoneSettingNS (line 5609) | class ToolsOzoneSettingNS {
method constructor (line 5612) | constructor(client: XrpcClient) {
method listOptions (line 5616) | listOptions(
method removeOptions (line 5628) | removeOptions(
method upsertOption (line 5640) | upsertOption(
class ToolsOzoneSignatureNS (line 5653) | class ToolsOzoneSignatureNS {
method constructor (line 5656) | constructor(client: XrpcClient) {
method findCorrelation (line 5660) | findCorrelation(
method findRelatedAccounts (line 5672) | findRelatedAccounts(
method searchAccounts (line 5684) | searchAccounts(
class ToolsOzoneTeamNS (line 5697) | class ToolsOzoneTeamNS {
method constructor (line 5700) | constructor(client: XrpcClient) {
method addMember (line 5704) | addMember(
method deleteMember (line 5715) | deleteMember(
method listMembers (line 5726) | listMembers(
method updateMember (line 5738) | updateMember(
class ToolsOzoneVerificationNS (line 5750) | class ToolsOzoneVerificationNS {
method constructor (line 5753) | constructor(client: XrpcClient) {
method grantVerifications (line 5757) | grantVerifications(
method listVerifications (line 5769) | listVerifications(
method revokeVerifications (line 5781) | revokeVerifications(
FILE: packages/api/src/client/lexicons.ts
function validate (line 20732) | function validate(
FILE: packages/api/src/client/types/app/bsky/actor/defs.ts
type ProfileViewBasic (line 24) | interface ProfileViewBasic {
function isProfileViewBasic (line 43) | function isProfileViewBasic<V>(v: V) {
function validateProfileViewBasic (line 47) | function validateProfileViewBasic<V>(v: V) {
type ProfileView (line 51) | interface ProfileView {
function isProfileView (line 72) | function isProfileView<V>(v: V) {
function validateProfileView (line 76) | function validateProfileView<V>(v: V) {
type ProfileViewDetailed (line 80) | interface ProfileViewDetailed {
function isProfileViewDetailed (line 108) | function isProfileViewDetailed<V>(v: V) {
function validateProfileViewDetailed (line 112) | function validateProfileViewDetailed<V>(v: V) {
type ProfileAssociated (line 116) | interface ProfileAssociated {
function isProfileAssociated (line 129) | function isProfileAssociated<V>(v: V) {
function validateProfileAssociated (line 133) | function validateProfileAssociated<V>(v: V) {
type ProfileAssociatedChat (line 137) | interface ProfileAssociatedChat {
function isProfileAssociatedChat (line 144) | function isProfileAssociatedChat<V>(v: V) {
function validateProfileAssociatedChat (line 148) | function validateProfileAssociatedChat<V>(v: V) {
type ProfileAssociatedGerm (line 152) | interface ProfileAssociatedGerm {
function isProfileAssociatedGerm (line 160) | function isProfileAssociatedGerm<V>(v: V) {
function validateProfileAssociatedGerm (line 164) | function validateProfileAssociatedGerm<V>(v: V) {
type ProfileAssociatedActivitySubscription (line 168) | interface ProfileAssociatedActivitySubscription {
function isProfileAssociatedActivitySubscription (line 176) | function isProfileAssociatedActivitySubscription<V>(v: V) {
function validateProfileAssociatedActivitySubscription (line 180) | function validateProfileAssociatedActivitySubscription<V>(v: V) {
type ViewerState (line 189) | interface ViewerState {
function isViewerState (line 204) | function isViewerState<V>(v: V) {
function validateViewerState (line 208) | function validateViewerState<V>(v: V) {
type KnownFollowers (line 213) | interface KnownFollowers {
function isKnownFollowers (line 221) | function isKnownFollowers<V>(v: V) {
function validateKnownFollowers (line 225) | function validateKnownFollowers<V>(v: V) {
type VerificationState (line 230) | interface VerificationState {
function isVerificationState (line 242) | function isVerificationState<V>(v: V) {
function validateVerificationState (line 246) | function validateVerificationState<V>(v: V) {
type VerificationView (line 251) | interface VerificationView {
function isVerificationView (line 265) | function isVerificationView<V>(v: V) {
function validateVerificationView (line 269) | function validateVerificationView<V>(v: V) {
type Preferences (line 273) | type Preferences = (
type AdultContentPref (line 293) | interface AdultContentPref {
function isAdultContentPref (line 300) | function isAdultContentPref<V>(v: V) {
function validateAdultContentPref (line 304) | function validateAdultContentPref<V>(v: V) {
type ContentLabelPref (line 308) | interface ContentLabelPref {
function isContentLabelPref (line 318) | function isContentLabelPref<V>(v: V) {
function validateContentLabelPref (line 322) | function validateContentLabelPref<V>(v: V) {
type SavedFeed (line 326) | interface SavedFeed {
function isSavedFeed (line 336) | function isSavedFeed<V>(v: V) {
function validateSavedFeed (line 340) | function validateSavedFeed<V>(v: V) {
type SavedFeedsPrefV2 (line 344) | interface SavedFeedsPrefV2 {
function isSavedFeedsPrefV2 (line 351) | function isSavedFeedsPrefV2<V>(v: V) {
function validateSavedFeedsPrefV2 (line 355) | function validateSavedFeedsPrefV2<V>(v: V) {
type SavedFeedsPref (line 359) | interface SavedFeedsPref {
function isSavedFeedsPref (line 368) | function isSavedFeedsPref<V>(v: V) {
function validateSavedFeedsPref (line 372) | function validateSavedFeedsPref<V>(v: V) {
type PersonalDetailsPref (line 376) | interface PersonalDetailsPref {
function isPersonalDetailsPref (line 384) | function isPersonalDetailsPref<V>(v: V) {
function validatePersonalDetailsPref (line 388) | function validatePersonalDetailsPref<V>(v: V) {
type DeclaredAgePref (line 393) | interface DeclaredAgePref {
function isDeclaredAgePref (line 405) | function isDeclaredAgePref<V>(v: V) {
function validateDeclaredAgePref (line 409) | function validateDeclaredAgePref<V>(v: V) {
type FeedViewPref (line 413) | interface FeedViewPref {
function isFeedViewPref (line 431) | function isFeedViewPref<V>(v: V) {
function validateFeedViewPref (line 435) | function validateFeedViewPref<V>(v: V) {
type ThreadViewPref (line 439) | interface ThreadViewPref {
function isThreadViewPref (line 453) | function isThreadViewPref<V>(v: V) {
function validateThreadViewPref (line 457) | function validateThreadViewPref<V>(v: V) {
type InterestsPref (line 461) | interface InterestsPref {
function isInterestsPref (line 469) | function isInterestsPref<V>(v: V) {
function validateInterestsPref (line 473) | function validateInterestsPref<V>(v: V) {
type MutedWordTarget (line 477) | type MutedWordTarget = 'content' | 'tag' | (string & {})
type MutedWord (line 480) | interface MutedWord {
function isMutedWord (line 495) | function isMutedWord<V>(v: V) {
function validateMutedWord (line 499) | function validateMutedWord<V>(v: V) {
type MutedWordsPref (line 503) | interface MutedWordsPref {
function isMutedWordsPref (line 511) | function isMutedWordsPref<V>(v: V) {
function validateMutedWordsPref (line 515) | function validateMutedWordsPref<V>(v: V) {
type HiddenPostsPref (line 519) | interface HiddenPostsPref {
function isHiddenPostsPref (line 527) | function isHiddenPostsPref<V>(v: V) {
function validateHiddenPostsPref (line 531) | function validateHiddenPostsPref<V>(v: V) {
type LabelersPref (line 535) | interface LabelersPref {
function isLabelersPref (line 542) | function isLabelersPref<V>(v: V) {
function validateLabelersPref (line 546) | function validateLabelersPref<V>(v: V) {
type LabelerPrefItem (line 550) | interface LabelerPrefItem {
function isLabelerPrefItem (line 557) | function isLabelerPrefItem<V>(v: V) {
function validateLabelerPrefItem (line 561) | function validateLabelerPrefItem<V>(v: V) {
type BskyAppStatePref (line 566) | interface BskyAppStatePref {
function isBskyAppStatePref (line 577) | function isBskyAppStatePref<V>(v: V) {
function validateBskyAppStatePref (line 581) | function validateBskyAppStatePref<V>(v: V) {
type BskyAppProgressGuide (line 586) | interface BskyAppProgressGuide {
function isBskyAppProgressGuide (line 593) | function isBskyAppProgressGuide<V>(v: V) {
function validateBskyAppProgressGuide (line 597) | function validateBskyAppProgressGuide<V>(v: V) {
type Nux (line 602) | interface Nux {
function isNux (line 614) | function isNux<V>(v: V) {
function validateNux (line 618) | function validateNux<V>(v: V) {
type VerificationPrefs (line 623) | interface VerificationPrefs {
function isVerificationPrefs (line 631) | function isVerificationPrefs<V>(v: V) {
function validateVerificationPrefs (line 635) | function validateVerificationPrefs<V>(v: V) {
type LiveEventPreferences (line 640) | interface LiveEventPreferences {
function isLiveEventPreferences (line 650) | function isLiveEventPreferences<V>(v: V) {
function validateLiveEventPreferences (line 654) | function validateLiveEventPreferences<V>(v: V) {
type PostInteractionSettingsPref (line 659) | interface PostInteractionSettingsPref {
function isPostInteractionSettingsPref (line 678) | function isPostInteractionSettingsPref<V>(v: V) {
function validatePostInteractionSettingsPref (line 682) | function validatePostInteractionSettingsPref<V>(v: V) {
type StatusView (line 690) | interface StatusView {
function isStatusView (line 708) | function isStatusView<V>(v: V) {
function validateStatusView (line 712) | function validateStatusView<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/actor/getPreferences.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 20) | type InputSchema = undefined
type OutputSchema (line 22) | interface OutputSchema {
type CallOptions (line 26) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 37) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/actor/getProfile.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 24) | type OutputSchema = AppBskyActorDefs.ProfileViewDetailed
type CallOptions (line 26) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 37) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/actor/getProfiles.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 28) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 39) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/actor/getSuggestions.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 34) | interface CallOptions {
type Response (line 39) | interface Response {
function toKnownErr (line 45) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/actor/profile.ts
type Main (line 19) | interface Main {
function isMain (line 40) | function isMain<V>(v: V) {
function validateMain (line 44) | function validateMain<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/actor/putPreferences.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type CallOptions (line 25) | interface CallOptions {
type Response (line 32) | interface Response {
function toKnownErr (line 37) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/actor/searchActors.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 27) | type InputSchema = undefined
type OutputSchema (line 29) | interface OutputSchema {
type CallOptions (line 34) | interface CallOptions {
type Response (line 39) | interface Response {
function toKnownErr (line 45) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/actor/searchActorsTypeahead.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 26) | type InputSchema = undefined
type OutputSchema (line 28) | interface OutputSchema {
type CallOptions (line 32) | interface CallOptions {
type Response (line 37) | interface Response {
function toKnownErr (line 43) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/actor/status.ts
type Main (line 18) | interface Main {
function isMain (line 31) | function isMain<V>(v: V) {
function validateMain (line 35) | function validateMain<V>(v: V) {
constant LIVE (line 46) | const LIVE = `${id}#live`
FILE: packages/api/src/client/types/app/bsky/ageassurance/begin.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 32) | type OutputSchema = AppBskyAgeassuranceDefs.State
type CallOptions (line 34) | interface CallOptions {
type Response (line 41) | interface Response {
class InvalidEmailError (line 47) | class InvalidEmailError extends XRPCError {
method constructor (line 48) | constructor(src: XRPCError) {
class DidTooLongError (line 53) | class DidTooLongError extends XRPCError {
method constructor (line 54) | constructor(src: XRPCError) {
class InvalidInitiationError (line 59) | class InvalidInitiationError extends XRPCError {
method constructor (line 60) | constructor(src: XRPCError) {
class RegionNotSupportedError (line 65) | class RegionNotSupportedError extends XRPCError {
method constructor (line 66) | constructor(src: XRPCError) {
function toKnownErr (line 71) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/ageassurance/defs.ts
type Access (line 18) | type Access = 'unknown' | 'none' | 'safe' | 'full' | (string & {})
type Status (line 20) | type Status =
type State (line 28) | interface State {
function isState (line 38) | function isState<V>(v: V) {
function validateState (line 42) | function validateState<V>(v: V) {
type StateMetadata (line 47) | interface StateMetadata {
function isStateMetadata (line 55) | function isStateMetadata<V>(v: V) {
function validateStateMetadata (line 59) | function validateStateMetadata<V>(v: V) {
type Config (line 63) | interface Config {
function isConfig (line 71) | function isConfig<V>(v: V) {
function validateConfig (line 75) | function validateConfig<V>(v: V) {
type ConfigRegion (line 80) | interface ConfigRegion {
function isConfigRegion (line 103) | function isConfigRegion<V>(v: V) {
function validateConfigRegion (line 107) | function validateConfigRegion<V>(v: V) {
type ConfigRegionRuleDefault (line 112) | interface ConfigRegionRuleDefault {
function isConfigRegionRuleDefault (line 119) | function isConfigRegionRuleDefault<V>(v: V) {
function validateConfigRegionRuleDefault (line 123) | function validateConfigRegionRuleDefault<V>(v: V) {
type ConfigRegionRuleIfDeclaredOverAge (line 132) | interface ConfigRegionRuleIfDeclaredOverAge {
function isConfigRegionRuleIfDeclaredOverAge (line 142) | function isConfigRegionRuleIfDeclaredOverAge<V>(v: V) {
function validateConfigRegionRuleIfDeclaredOverAge (line 146) | function validateConfigRegionRuleIfDeclaredOverAge<V>(v: V) {
type ConfigRegionRuleIfDeclaredUnderAge (line 155) | interface ConfigRegionRuleIfDeclaredUnderAge {
function isConfigRegionRuleIfDeclaredUnderAge (line 165) | function isConfigRegionRuleIfDeclaredUnderAge<V>(v: V) {
function validateConfigRegionRuleIfDeclaredUnderAge (line 169) | function validateConfigRegionRuleIfDeclaredUnderAge<V>(v: V) {
type ConfigRegionRuleIfAssuredOverAge (line 178) | interface ConfigRegionRuleIfAssuredOverAge {
function isConfigRegionRuleIfAssuredOverAge (line 187) | function isConfigRegionRuleIfAssuredOverAge<V>(v: V) {
function validateConfigRegionRuleIfAssuredOverAge (line 191) | function validateConfigRegionRuleIfAssuredOverAge<V>(v: V) {
type ConfigRegionRuleIfAssuredUnderAge (line 200) | interface ConfigRegionRuleIfAssuredUnderAge {
function isConfigRegionRuleIfAssuredUnderAge (line 210) | function isConfigRegionRuleIfAssuredUnderAge<V>(v: V) {
function validateConfigRegionRuleIfAssuredUnderAge (line 214) | function validateConfigRegionRuleIfAssuredUnderAge<V>(v: V) {
type ConfigRegionRuleIfAccountNewerThan (line 223) | interface ConfigRegionRuleIfAccountNewerThan {
function isConfigRegionRuleIfAccountNewerThan (line 233) | function isConfigRegionRuleIfAccountNewerThan<V>(v: V) {
function validateConfigRegionRuleIfAccountNewerThan (line 237) | function validateConfigRegionRuleIfAccountNewerThan<V>(v: V) {
type ConfigRegionRuleIfAccountOlderThan (line 246) | interface ConfigRegionRuleIfAccountOlderThan {
function isConfigRegionRuleIfAccountOlderThan (line 256) | function isConfigRegionRuleIfAccountOlderThan<V>(v: V) {
function validateConfigRegionRuleIfAccountOlderThan (line 260) | function validateConfigRegionRuleIfAccountOlderThan<V>(v: V) {
type Event (line 269) | interface Event {
function isEvent (line 297) | function isEvent<V>(v: V) {
function validateEvent (line 301) | function validateEvent<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/ageassurance/getConfig.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 20) | type InputSchema = undefined
type OutputSchema (line 21) | type OutputSchema = AppBskyAgeassuranceDefs.Config
type CallOptions (line 23) | interface CallOptions {
type Response (line 28) | interface Response {
function toKnownErr (line 34) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/ageassurance/getState.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 30) | interface CallOptions {
type Response (line 35) | interface Response {
function toKnownErr (line 41) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/bookmark/createBookmark.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 25) | interface CallOptions {
type Response (line 32) | interface Response {
class UnsupportedCollectionError (line 37) | class UnsupportedCollectionError extends XRPCError {
method constructor (line 38) | constructor(src: XRPCError) {
function toKnownErr (line 43) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/bookmark/defs.ts
type Bookmark (line 20) | interface Bookmark {
function isBookmark (line 27) | function isBookmark<V>(v: V) {
function validateBookmark (line 31) | function validateBookmark<V>(v: V) {
type BookmarkView (line 35) | interface BookmarkView {
function isBookmarkView (line 48) | function isBookmarkView<V>(v: V) {
function validateBookmarkView (line 52) | function validateBookmarkView<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/bookmark/deleteBookmark.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 24) | interface CallOptions {
type Response (line 31) | interface Response {
class UnsupportedCollectionError (line 36) | class UnsupportedCollectionError extends XRPCError {
method constructor (line 37) | constructor(src: XRPCError) {
function toKnownErr (line 42) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/bookmark/getBookmarks.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 30) | interface CallOptions {
type Response (line 35) | interface Response {
function toKnownErr (line 41) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/contact/defs.ts
type MatchAndContactIndex (line 19) | interface MatchAndContactIndex {
function isMatchAndContactIndex (line 28) | function isMatchAndContactIndex<V>(v: V) {
function validateMatchAndContactIndex (line 32) | function validateMatchAndContactIndex<V>(v: V) {
type SyncStatus (line 36) | interface SyncStatus {
function isSyncStatus (line 46) | function isSyncStatus<V>(v: V) {
function validateSyncStatus (line 50) | function validateSyncStatus<V>(v: V) {
type Notification (line 55) | interface Notification {
function isNotification (line 65) | function isNotification<V>(v: V) {
function validateNotification (line 69) | function validateNotification<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/contact/dismissMatch.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type OutputSchema (line 25) | interface OutputSchema {}
type CallOptions (line 27) | interface CallOptions {
type Response (line 34) | interface Response {
class InvalidDidError (line 40) | class InvalidDidError extends XRPCError {
method constructor (line 41) | constructor(src: XRPCError) {
class InternalError (line 46) | class InternalError extends XRPCError {
method constructor (line 47) | constructor(src: XRPCError) {
function toKnownErr (line 52) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/contact/getMatches.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 30) | interface CallOptions {
type Response (line 35) | interface Response {
class InvalidDidError (line 41) | class InvalidDidError extends XRPCError {
method constructor (line 42) | constructor(src: XRPCError) {
class InvalidLimitError (line 47) | class InvalidLimitError extends XRPCError {
method constructor (line 48) | constructor(src: XRPCError) {
class InvalidCursorError (line 53) | class InvalidCursorError extends XRPCError {
method constructor (line 54) | constructor(src: XRPCError) {
class InternalError (line 59) | class InternalError extends XRPCError {
method constructor (line 60) | constructor(src: XRPCError) {
function toKnownErr (line 65) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/contact/getSyncStatus.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 20) | type InputSchema = undefined
type OutputSchema (line 22) | interface OutputSchema {
type CallOptions (line 26) | interface CallOptions {
type Response (line 31) | interface Response {
class InvalidDidError (line 37) | class InvalidDidError extends XRPCError {
method constructor (line 38) | constructor(src: XRPCError) {
class InternalError (line 43) | class InternalError extends XRPCError {
method constructor (line 44) | constructor(src: XRPCError) {
function toKnownErr (line 49) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/contact/importContacts.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 28) | interface OutputSchema {
type CallOptions (line 33) | interface CallOptions {
type Response (line 40) | interface Response {
class InvalidDidError (line 46) | class InvalidDidError extends XRPCError {
method constructor (line 47) | constructor(src: XRPCError) {
class InvalidContactsError (line 52) | class InvalidContactsError extends XRPCError {
method constructor (line 53) | constructor(src: XRPCError) {
class TooManyContactsError (line 58) | class TooManyContactsError extends XRPCError {
method constructor (line 59) | constructor(src: XRPCError) {
class InvalidTokenError (line 64) | class InvalidTokenError extends XRPCError {
method constructor (line 65) | constructor(src: XRPCError) {
class InternalError (line 70) | class InternalError extends XRPCError {
method constructor (line 71) | constructor(src: XRPCError) {
function toKnownErr (line 76) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/contact/removeData.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {}
type OutputSchema (line 22) | interface OutputSchema {}
type CallOptions (line 24) | interface CallOptions {
type Response (line 31) | interface Response {
class InvalidDidError (line 37) | class InvalidDidError extends XRPCError {
method constructor (line 38) | constructor(src: XRPCError) {
class InternalError (line 43) | class InternalError extends XRPCError {
method constructor (line 44) | constructor(src: XRPCError) {
function toKnownErr (line 49) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/contact/sendNotification.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type OutputSchema (line 27) | interface OutputSchema {}
type CallOptions (line 29) | interface CallOptions {
type Response (line 36) | interface Response {
function toKnownErr (line 42) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/contact/startPhoneVerification.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type OutputSchema (line 25) | interface OutputSchema {}
type CallOptions (line 27) | interface CallOptions {
type Response (line 34) | interface Response {
class RateLimitExceededError (line 40) | class RateLimitExceededError extends XRPCError {
method constructor (line 41) | constructor(src: XRPCError) {
class InvalidDidError (line 46) | class InvalidDidError extends XRPCError {
method constructor (line 47) | constructor(src: XRPCError) {
class InvalidPhoneError (line 52) | class InvalidPhoneError extends XRPCError {
method constructor (line 53) | constructor(src: XRPCError) {
class InternalError (line 58) | class InternalError extends XRPCError {
method constructor (line 59) | constructor(src: XRPCError) {
function toKnownErr (line 64) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/contact/verifyPhone.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type OutputSchema (line 27) | interface OutputSchema {
type CallOptions (line 32) | interface CallOptions {
type Response (line 39) | interface Response {
class RateLimitExceededError (line 45) | class RateLimitExceededError extends XRPCError {
method constructor (line 46) | constructor(src: XRPCError) {
class InvalidDidError (line 51) | class InvalidDidError extends XRPCError {
method constructor (line 52) | constructor(src: XRPCError) {
class InvalidPhoneError (line 57) | class InvalidPhoneError extends XRPCError {
method constructor (line 58) | constructor(src: XRPCError) {
class InvalidCodeError (line 63) | class InvalidCodeError extends XRPCError {
method constructor (line 64) | constructor(src: XRPCError) {
class InternalError (line 69) | class InternalError extends XRPCError {
method constructor (line 70) | constructor(src: XRPCError) {
function toKnownErr (line 75) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/draft/createDraft.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 30) | interface CallOptions {
type Response (line 37) | interface Response {
class DraftLimitReachedError (line 43) | class DraftLimitReachedError extends XRPCError {
method constructor (line 44) | constructor(src: XRPCError) {
function toKnownErr (line 49) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/draft/defs.ts
type DraftWithId (line 22) | interface DraftWithId {
function isDraftWithId (line 31) | function isDraftWithId<V>(v: V) {
function validateDraftWithId (line 35) | function validateDraftWithId<V>(v: V) {
type Draft (line 40) | interface Draft {
function isDraft (line 67) | function isDraft<V>(v: V) {
function validateDraft (line 71) | function validateDraft<V>(v: V) {
type DraftPost (line 76) | interface DraftPost {
function isDraftPost (line 89) | function isDraftPost<V>(v: V) {
function validateDraftPost (line 93) | function validateDraftPost<V>(v: V) {
type DraftView (line 98) | interface DraftView {
function isDraftView (line 111) | function isDraftView<V>(v: V) {
function validateDraftView (line 115) | function validateDraftView<V>(v: V) {
type DraftEmbedLocalRef (line 119) | interface DraftEmbedLocalRef {
function isDraftEmbedLocalRef (line 127) | function isDraftEmbedLocalRef<V>(v: V) {
function validateDraftEmbedLocalRef (line 131) | function validateDraftEmbedLocalRef<V>(v: V) {
type DraftEmbedCaption (line 135) | interface DraftEmbedCaption {
function isDraftEmbedCaption (line 143) | function isDraftEmbedCaption<V>(v: V) {
function validateDraftEmbedCaption (line 147) | function validateDraftEmbedCaption<V>(v: V) {
type DraftEmbedImage (line 151) | interface DraftEmbedImage {
function isDraftEmbedImage (line 159) | function isDraftEmbedImage<V>(v: V) {
function validateDraftEmbedImage (line 163) | function validateDraftEmbedImage<V>(v: V) {
type DraftEmbedVideo (line 167) | interface DraftEmbedVideo {
function isDraftEmbedVideo (line 176) | function isDraftEmbedVideo<V>(v: V) {
function validateDraftEmbedVideo (line 180) | function validateDraftEmbedVideo<V>(v: V) {
type DraftEmbedExternal (line 184) | interface DraftEmbedExternal {
function isDraftEmbedExternal (line 191) | function isDraftEmbedExternal<V>(v: V) {
function validateDraftEmbedExternal (line 195) | function validateDraftEmbedExternal<V>(v: V) {
type DraftEmbedRecord (line 199) | interface DraftEmbedRecord {
function isDraftEmbedRecord (line 206) | function isDraftEmbedRecord<V>(v: V) {
function validateDraftEmbedRecord (line 210) | function validateDraftEmbedRecord<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/draft/deleteDraft.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 24) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 36) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/draft/getDrafts.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 30) | interface CallOptions {
type Response (line 35) | interface Response {
function toKnownErr (line 41) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/draft/updateDraft.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type CallOptions (line 25) | interface CallOptions {
type Response (line 32) | interface Response {
function toKnownErr (line 37) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/embed/defs.ts
type AspectRatio (line 18) | interface AspectRatio {
function isAspectRatio (line 26) | function isAspectRatio<V>(v: V) {
function validateAspectRatio (line 30) | function validateAspectRatio<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/embed/external.ts
type Main (line 18) | interface Main {
function isMain (line 25) | function isMain<V>(v: V) {
function validateMain (line 29) | function validateMain<V>(v: V) {
type External (line 33) | interface External {
function isExternal (line 43) | function isExternal<V>(v: V) {
function validateExternal (line 47) | function validateExternal<V>(v: V) {
type View (line 51) | interface View {
function isView (line 58) | function isView<V>(v: V) {
function validateView (line 62) | function validateView<V>(v: V) {
type ViewExternal (line 66) | interface ViewExternal {
function isViewExternal (line 76) | function isViewExternal<V>(v: V) {
function validateViewExternal (line 80) | function validateViewExternal<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/embed/images.ts
type Main (line 18) | interface Main {
function isMain (line 25) | function isMain<V>(v: V) {
function validateMain (line 29) | function validateMain<V>(v: V) {
type Image (line 33) | interface Image {
function isImage (line 43) | function isImage<V>(v: V) {
function validateImage (line 47) | function validateImage<V>(v: V) {
type View (line 51) | interface View {
function isView (line 58) | function isView<V>(v: V) {
function validateView (line 62) | function validateView<V>(v: V) {
type ViewImage (line 66) | interface ViewImage {
function isViewImage (line 79) | function isViewImage<V>(v: V) {
function validateViewImage (line 83) | function validateViewImage<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/embed/record.ts
type Main (line 27) | interface Main {
function isMain (line 34) | function isMain<V>(v: V) {
function validateMain (line 38) | function validateMain<V>(v: V) {
type View (line 42) | interface View {
function isView (line 58) | function isView<V>(v: V) {
function validateView (line 62) | function validateView<V>(v: V) {
type ViewRecord (line 66) | interface ViewRecord {
function isViewRecord (line 91) | function isViewRecord<V>(v: V) {
function validateViewRecord (line 95) | function validateViewRecord<V>(v: V) {
type ViewNotFound (line 99) | interface ViewNotFound {
function isViewNotFound (line 107) | function isViewNotFound<V>(v: V) {
function validateViewNotFound (line 111) | function validateViewNotFound<V>(v: V) {
type ViewBlocked (line 115) | interface ViewBlocked {
function isViewBlocked (line 124) | function isViewBlocked<V>(v: V) {
function validateViewBlocked (line 128) | function validateViewBlocked<V>(v: V) {
type ViewDetached (line 132) | interface ViewDetached {
function isViewDetached (line 140) | function isViewDetached<V>(v: V) {
function validateViewDetached (line 144) | function validateViewDetached<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/embed/recordWithMedia.ts
type Main (line 21) | interface Main {
function isMain (line 33) | function isMain<V>(v: V) {
function validateMain (line 37) | function validateMain<V>(v: V) {
type View (line 41) | interface View {
function isView (line 53) | function isView<V>(v: V) {
function validateView (line 57) | function validateView<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/embed/video.ts
type Main (line 18) | interface Main {
function isMain (line 32) | function isMain<V>(v: V) {
function validateMain (line 36) | function validateMain<V>(v: V) {
type Caption (line 40) | interface Caption {
function isCaption (line 48) | function isCaption<V>(v: V) {
function validateCaption (line 52) | function validateCaption<V>(v: V) {
type View (line 56) | interface View {
function isView (line 69) | function isView<V>(v: V) {
function validateView (line 73) | function validateView<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/feed/defs.ts
type PostView (line 26) | interface PostView {
function isPostView (line 54) | function isPostView<V>(v: V) {
function validatePostView (line 58) | function validatePostView<V>(v: V) {
type ViewerState (line 63) | interface ViewerState {
function isViewerState (line 76) | function isViewerState<V>(v: V) {
function validateViewerState (line 80) | function validateViewerState<V>(v: V) {
type ThreadContext (line 85) | interface ThreadContext {
function isThreadContext (line 92) | function isThreadContext<V>(v: V) {
function validateThreadContext (line 96) | function validateThreadContext<V>(v: V) {
type FeedViewPost (line 100) | interface FeedViewPost {
function isFeedViewPost (line 113) | function isFeedViewPost<V>(v: V) {
function validateFeedViewPost (line 117) | function validateFeedViewPost<V>(v: V) {
type ReplyRef (line 121) | interface ReplyRef {
function isReplyRef (line 138) | function isReplyRef<V>(v: V) {
function validateReplyRef (line 142) | function validateReplyRef<V>(v: V) {
type ReasonRepost (line 146) | interface ReasonRepost {
function isReasonRepost (line 156) | function isReasonRepost<V>(v: V) {
function validateReasonRepost (line 160) | function validateReasonRepost<V>(v: V) {
type ReasonPin (line 164) | interface ReasonPin {
function isReasonPin (line 170) | function isReasonPin<V>(v: V) {
function validateReasonPin (line 174) | function validateReasonPin<V>(v: V) {
type ThreadViewPost (line 178) | interface ThreadViewPost {
function isThreadViewPost (line 197) | function isThreadViewPost<V>(v: V) {
function validateThreadViewPost (line 201) | function validateThreadViewPost<V>(v: V) {
type NotFoundPost (line 205) | interface NotFoundPost {
function isNotFoundPost (line 213) | function isNotFoundPost<V>(v: V) {
function validateNotFoundPost (line 217) | function validateNotFoundPost<V>(v: V) {
type BlockedPost (line 221) | interface BlockedPost {
function isBlockedPost (line 230) | function isBlockedPost<V>(v: V) {
function validateBlockedPost (line 234) | function validateBlockedPost<V>(v: V) {
type BlockedAuthor (line 238) | interface BlockedAuthor {
function isBlockedAuthor (line 246) | function isBlockedAuthor<V>(v: V) {
function validateBlockedAuthor (line 250) | function validateBlockedAuthor<V>(v: V) {
type GeneratorView (line 254) | interface GeneratorView {
function isGeneratorView (line 277) | function isGeneratorView<V>(v: V) {
function validateGeneratorView (line 281) | function validateGeneratorView<V>(v: V) {
type GeneratorViewerState (line 285) | interface GeneratorViewerState {
function isGeneratorViewerState (line 292) | function isGeneratorViewerState<V>(v: V) {
function validateGeneratorViewerState (line 296) | function validateGeneratorViewerState<V>(v: V) {
type SkeletonFeedPost (line 300) | interface SkeletonFeedPost {
function isSkeletonFeedPost (line 313) | function isSkeletonFeedPost<V>(v: V) {
function validateSkeletonFeedPost (line 317) | function validateSkeletonFeedPost<V>(v: V) {
type SkeletonReasonRepost (line 321) | interface SkeletonReasonRepost {
function isSkeletonReasonRepost (line 328) | function isSkeletonReasonRepost<V>(v: V) {
function validateSkeletonReasonRepost (line 332) | function validateSkeletonReasonRepost<V>(v: V) {
type SkeletonReasonPin (line 336) | interface SkeletonReasonPin {
function isSkeletonReasonPin (line 342) | function isSkeletonReasonPin<V>(v: V) {
function validateSkeletonReasonPin (line 346) | function validateSkeletonReasonPin<V>(v: V) {
type ThreadgateView (line 350) | interface ThreadgateView {
function isThreadgateView (line 360) | function isThreadgateView<V>(v: V) {
function validateThreadgateView (line 364) | function validateThreadgateView<V>(v: V) {
type Interaction (line 368) | interface Interaction {
function isInteraction (line 393) | function isInteraction<V>(v: V) {
function validateInteraction (line 397) | function validateInteraction<V>(v: V) {
constant REQUESTLESS (line 402) | const REQUESTLESS = `${id}#requestLess`
constant REQUESTMORE (line 404) | const REQUESTMORE = `${id}#requestMore`
constant CLICKTHROUGHITEM (line 406) | const CLICKTHROUGHITEM = `${id}#clickthroughItem`
constant CLICKTHROUGHAUTHOR (line 408) | const CLICKTHROUGHAUTHOR = `${id}#clickthroughAuthor`
constant CLICKTHROUGHREPOSTER (line 410) | const CLICKTHROUGHREPOSTER = `${id}#clickthroughReposter`
constant CLICKTHROUGHEMBED (line 412) | const CLICKTHROUGHEMBED = `${id}#clickthroughEmbed`
constant CONTENTMODEUNSPECIFIED (line 414) | const CONTENTMODEUNSPECIFIED = `${id}#contentModeUnspecified`
constant CONTENTMODEVIDEO (line 416) | const CONTENTMODEVIDEO = `${id}#contentModeVideo`
constant INTERACTIONSEEN (line 418) | const INTERACTIONSEEN = `${id}#interactionSeen`
constant INTERACTIONLIKE (line 420) | const INTERACTIONLIKE = `${id}#interactionLike`
constant INTERACTIONREPOST (line 422) | const INTERACTIONREPOST = `${id}#interactionRepost`
constant INTERACTIONREPLY (line 424) | const INTERACTIONREPLY = `${id}#interactionReply`
constant INTERACTIONQUOTE (line 426) | const INTERACTIONQUOTE = `${id}#interactionQuote`
constant INTERACTIONSHARE (line 428) | const INTERACTIONSHARE = `${id}#interactionShare`
FILE: packages/api/src/client/types/app/bsky/feed/describeFeedGenerator.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type OutputSchema (line 21) | interface OutputSchema {
type CallOptions (line 27) | interface CallOptions {
type Response (line 32) | interface Response {
function toKnownErr (line 38) | function toKnownErr(e: any) {
type Feed (line 42) | interface Feed {
function isFeed (line 49) | function isFeed<V>(v: V) {
function validateFeed (line 53) | function validateFeed<V>(v: V) {
type Links (line 57) | interface Links {
function isLinks (line 65) | function isLinks<V>(v: V) {
function validateLinks (line 69) | function validateLinks<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/feed/generator.ts
type Main (line 19) | interface Main {
function isMain (line 39) | function isMain<V>(v: V) {
function validateMain (line 43) | function validateMain<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/feed/getActorFeeds.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 31) | interface CallOptions {
type Response (line 36) | interface Response {
function toKnownErr (line 42) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/feed/getActorLikes.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 31) | interface CallOptions {
type Response (line 36) | interface Response {
class BlockedActorError (line 42) | class BlockedActorError extends XRPCError {
method constructor (line 43) | constructor(src: XRPCError) {
class BlockedByActorError (line 48) | class BlockedByActorError extends XRPCError {
method constructor (line 49) | constructor(src: XRPCError) {
function toKnownErr (line 54) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/feed/getAuthorFeed.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 33) | type InputSchema = undefined
type OutputSchema (line 35) | interface OutputSchema {
type CallOptions (line 40) | interface CallOptions {
type Response (line 45) | interface Response {
class BlockedActorError (line 51) | class BlockedActorError extends XRPCError {
method constructor (line 52) | constructor(src: XRPCError) {
class BlockedByActorError (line 57) | class BlockedByActorError extends XRPCError {
method constructor (line 58) | constructor(src: XRPCError) {
function toKnownErr (line 63) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/feed/getFeed.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 31) | interface CallOptions {
type Response (line 36) | interface Response {
class UnknownFeedError (line 42) | class UnknownFeedError extends XRPCError {
method constructor (line 43) | constructor(src: XRPCError) {
function toKnownErr (line 48) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/feed/getFeedGenerator.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 33) | interface CallOptions {
type Response (line 38) | interface Response {
function toKnownErr (line 44) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/feed/getFeedGenerators.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 28) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 39) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/feed/getFeedSkeleton.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 25) | type InputSchema = undefined
type OutputSchema (line 27) | interface OutputSchema {
type CallOptions (line 34) | interface CallOptions {
type Response (line 39) | interface Response {
class UnknownFeedError (line 45) | class UnknownFeedError extends XRPCError {
method constructor (line 46) | constructor(src: XRPCError) {
function toKnownErr (line 51) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/feed/getLikes.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 27) | type InputSchema = undefined
type OutputSchema (line 29) | interface OutputSchema {
type CallOptions (line 36) | interface CallOptions {
type Response (line 41) | interface Response {
function toKnownErr (line 47) | function toKnownErr(e: any) {
type Like (line 51) | interface Like {
function isLike (line 60) | function isLike<V>(v: V) {
function validateLike (line 64) | function validateLike<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/feed/getListFeed.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 25) | type InputSchema = undefined
type OutputSchema (line 27) | interface OutputSchema {
type CallOptions (line 32) | interface CallOptions {
type Response (line 37) | interface Response {
class UnknownListError (line 43) | class UnknownListError extends XRPCError {
method constructor (line 44) | constructor(src: XRPCError) {
function toKnownErr (line 49) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/feed/getPostThread.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 27) | type InputSchema = undefined
type OutputSchema (line 29) | interface OutputSchema {
type CallOptions (line 38) | interface CallOptions {
type Response (line 43) | interface Response {
class NotFoundError (line 49) | class NotFoundError extends XRPCError {
method constructor (line 50) | constructor(src: XRPCError) {
function toKnownErr (line 55) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/feed/getPosts.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 34) | interface Response {
function toKnownErr (line 40) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/feed/getQuotes.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 27) | type InputSchema = undefined
type OutputSchema (line 29) | interface OutputSchema {
type CallOptions (line 36) | interface CallOptions {
type Response (line 41) | interface Response {
function toKnownErr (line 47) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/feed/getRepostedBy.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 27) | type InputSchema = undefined
type OutputSchema (line 29) | interface OutputSchema {
type CallOptions (line 36) | interface CallOptions {
type Response (line 41) | interface Response {
function toKnownErr (line 47) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/feed/getSuggestedFeeds.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 30) | interface CallOptions {
type Response (line 35) | interface Response {
function toKnownErr (line 41) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/feed/getTimeline.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 25) | type InputSchema = undefined
type OutputSchema (line 27) | interface OutputSchema {
type CallOptions (line 32) | interface CallOptions {
type Response (line 37) | interface Response {
function toKnownErr (line 43) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/feed/like.ts
type Main (line 18) | interface Main {
function isMain (line 28) | function isMain<V>(v: V) {
function validateMain (line 32) | function validateMain<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/feed/post.ts
type Main (line 25) | interface Main {
function isMain (line 53) | function isMain<V>(v: V) {
function validateMain (line 57) | function validateMain<V>(v: V) {
type ReplyRef (line 67) | interface ReplyRef {
function isReplyRef (line 75) | function isReplyRef<V>(v: V) {
function validateReplyRef (line 79) | function validateReplyRef<V>(v: V) {
type Entity (line 84) | interface Entity {
function isEntity (line 94) | function isEntity<V>(v: V) {
function validateEntity (line 98) | function validateEntity<V>(v: V) {
type TextSlice (line 103) | interface TextSlice {
function isTextSlice (line 111) | function isTextSlice<V>(v: V) {
function validateTextSlice (line 115) | function validateTextSlice<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/feed/postgate.ts
type Main (line 17) | interface Main {
function isMain (line 31) | function isMain<V>(v: V) {
function validateMain (line 35) | function validateMain<V>(v: V) {
type DisableRule (line 46) | interface DisableRule {
function isDisableRule (line 52) | function isDisableRule<V>(v: V) {
function validateDisableRule (line 56) | function validateDisableRule<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/feed/repost.ts
type Main (line 18) | interface Main {
function isMain (line 28) | function isMain<V>(v: V) {
function validateMain (line 32) | function validateMain<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/feed/searchPosts.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 44) | type InputSchema = undefined
type OutputSchema (line 46) | interface OutputSchema {
type CallOptions (line 53) | interface CallOptions {
type Response (line 58) | interface Response {
class BadQueryStringError (line 64) | class BadQueryStringError extends XRPCError {
method constructor (line 65) | constructor(src: XRPCError) {
function toKnownErr (line 70) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/feed/sendInteractions.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 26) | interface OutputSchema {}
type CallOptions (line 28) | interface CallOptions {
type Response (line 35) | interface Response {
function toKnownErr (line 41) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/feed/threadgate.ts
type Main (line 17) | interface Main {
function isMain (line 37) | function isMain<V>(v: V) {
function validateMain (line 41) | function validateMain<V>(v: V) {
type MentionRule (line 52) | interface MentionRule {
function isMentionRule (line 58) | function isMentionRule<V>(v: V) {
function validateMentionRule (line 62) | function validateMentionRule<V>(v: V) {
type FollowerRule (line 67) | interface FollowerRule {
function isFollowerRule (line 73) | function isFollowerRule<V>(v: V) {
function validateFollowerRule (line 77) | function validateFollowerRule<V>(v: V) {
type FollowingRule (line 82) | interface FollowingRule {
function isFollowingRule (line 88) | function isFollowingRule<V>(v: V) {
function validateFollowingRule (line 92) | function validateFollowingRule<V>(v: V) {
type ListRule (line 97) | interface ListRule {
function isListRule (line 104) | function isListRule<V>(v: V) {
function validateListRule (line 108) | function validateListRule<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/graph/block.ts
type Main (line 17) | interface Main {
function isMain (line 27) | function isMain<V>(v: V) {
function validateMain (line 31) | function validateMain<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/graph/defs.ts
type ListViewBasic (line 21) | interface ListViewBasic {
function isListViewBasic (line 36) | function isListViewBasic<V>(v: V) {
function validateListViewBasic (line 40) | function validateListViewBasic<V>(v: V) {
type ListView (line 44) | interface ListView {
function isListView (line 62) | function isListView<V>(v: V) {
function validateListView (line 66) | function validateListView<V>(v: V) {
type ListItemView (line 70) | interface ListItemView {
function isListItemView (line 78) | function isListItemView<V>(v: V) {
function validateListItemView (line 82) | function validateListItemView<V>(v: V) {
type StarterPackView (line 86) | interface StarterPackView {
function isStarterPackView (line 103) | function isStarterPackView<V>(v: V) {
function validateStarterPackView (line 107) | function validateStarterPackView<V>(v: V) {
type StarterPackViewBasic (line 111) | interface StarterPackViewBasic {
function isStarterPackViewBasic (line 126) | function isStarterPackViewBasic<V>(v: V) {
function validateStarterPackViewBasic (line 130) | function validateStarterPackViewBasic<V>(v: V) {
type ListPurpose (line 134) | type ListPurpose =
constant MODLIST (line 141) | const MODLIST = `${id}#modlist`
constant CURATELIST (line 143) | const CURATELIST = `${id}#curatelist`
constant REFERENCELIST (line 145) | const REFERENCELIST = `${id}#referencelist`
type ListViewerState (line 147) | interface ListViewerState {
function isListViewerState (line 155) | function isListViewerState<V>(v: V) {
function validateListViewerState (line 159) | function validateListViewerState<V>(v: V) {
type NotFoundActor (line 164) | interface NotFoundActor {
function isNotFoundActor (line 172) | function isNotFoundActor<V>(v: V) {
function validateNotFoundActor (line 176) | function validateNotFoundActor<V>(v: V) {
type Relationship (line 181) | interface Relationship {
function isRelationship (line 200) | function isRelationship<V>(v: V) {
function validateRelationship (line 204) | function validateRelationship<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/graph/follow.ts
type Main (line 18) | interface Main {
function isMain (line 28) | function isMain<V>(v: V) {
function validateMain (line 32) | function validateMain<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/graph/getActorStarterPacks.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 31) | interface CallOptions {
type Response (line 36) | interface Response {
function toKnownErr (line 42) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/getBlocks.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 30) | interface CallOptions {
type Response (line 35) | interface Response {
function toKnownErr (line 41) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/getFollowers.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 32) | interface CallOptions {
type Response (line 37) | interface Response {
function toKnownErr (line 43) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/getFollows.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 32) | interface CallOptions {
type Response (line 37) | interface Response {
function toKnownErr (line 43) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/getKnownFollowers.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 32) | interface CallOptions {
type Response (line 37) | interface Response {
function toKnownErr (line 43) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/getList.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 25) | type InputSchema = undefined
type OutputSchema (line 27) | interface OutputSchema {
type CallOptions (line 33) | interface CallOptions {
type Response (line 38) | interface Response {
function toKnownErr (line 44) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/getListBlocks.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 30) | interface CallOptions {
type Response (line 35) | interface Response {
function toKnownErr (line 41) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/getListMutes.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 30) | interface CallOptions {
type Response (line 35) | interface Response {
function toKnownErr (line 41) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/getLists.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 27) | type InputSchema = undefined
type OutputSchema (line 29) | interface OutputSchema {
type CallOptions (line 34) | interface CallOptions {
type Response (line 39) | interface Response {
function toKnownErr (line 45) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/getListsWithMembership.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 27) | type InputSchema = undefined
type OutputSchema (line 29) | interface OutputSchema {
type CallOptions (line 34) | interface CallOptions {
type Response (line 39) | interface Response {
function toKnownErr (line 45) | function toKnownErr(e: any) {
type ListWithMembership (line 50) | interface ListWithMembership {
function isListWithMembership (line 58) | function isListWithMembership<V>(v: V) {
function validateListWithMembership (line 62) | function validateListWithMembership<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/graph/getMutes.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 30) | interface CallOptions {
type Response (line 35) | interface Response {
function toKnownErr (line 41) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/getRelationships.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 25) | type InputSchema = undefined
type OutputSchema (line 27) | interface OutputSchema {
type CallOptions (line 36) | interface CallOptions {
type Response (line 41) | interface Response {
class ActorNotFoundError (line 47) | class ActorNotFoundError extends XRPCError {
method constructor (line 48) | constructor(src: XRPCError) {
function toKnownErr (line 53) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/getStarterPack.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 34) | interface Response {
function toKnownErr (line 40) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/getStarterPacks.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 28) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 39) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/getStarterPacksWithMembership.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 25) | type InputSchema = undefined
type OutputSchema (line 27) | interface OutputSchema {
type CallOptions (line 32) | interface CallOptions {
type Response (line 37) | interface Response {
function toKnownErr (line 43) | function toKnownErr(e: any) {
type StarterPackWithMembership (line 48) | interface StarterPackWithMembership {
function isStarterPackWithMembership (line 56) | function isStarterPackWithMembership<V>(v: V) {
function validateStarterPackWithMembership (line 60) | function validateStarterPackWithMembership<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/graph/getSuggestedFollowsByActor.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 34) | interface CallOptions {
type Response (line 39) | interface Response {
function toKnownErr (line 45) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/list.ts
type Main (line 20) | interface Main {
function isMain (line 35) | function isMain<V>(v: V) {
function validateMain (line 39) | function validateMain<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/graph/listblock.ts
type Main (line 17) | interface Main {
function isMain (line 27) | function isMain<V>(v: V) {
function validateMain (line 31) | function validateMain<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/graph/listitem.ts
type Main (line 17) | interface Main {
function isMain (line 29) | function isMain<V>(v: V) {
function validateMain (line 33) | function validateMain<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/graph/muteActor.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 24) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 36) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/muteActorList.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 24) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 36) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/muteThread.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 24) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 36) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/searchStarterPacks.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 25) | type InputSchema = undefined
type OutputSchema (line 27) | interface OutputSchema {
type CallOptions (line 32) | interface CallOptions {
type Response (line 37) | interface Response {
function toKnownErr (line 43) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/starterpack.ts
type Main (line 18) | interface Main {
function isMain (line 33) | function isMain<V>(v: V) {
function validateMain (line 37) | function validateMain<V>(v: V) {
type FeedItem (line 47) | interface FeedItem {
function isFeedItem (line 54) | function isFeedItem<V>(v: V) {
function validateFeedItem (line 58) | function validateFeedItem<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/graph/unmuteActor.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 24) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 36) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/unmuteActorList.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 24) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 36) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/unmuteThread.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 24) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 36) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/graph/verification.ts
type Main (line 17) | interface Main {
function isMain (line 32) | function isMain<V>(v: V) {
function validateMain (line 36) | function validateMain<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/labeler/defs.ts
type LabelerView (line 20) | interface LabelerView {
function isLabelerView (line 33) | function isLabelerView<V>(v: V) {
function validateLabelerView (line 37) | function validateLabelerView<V>(v: V) {
type LabelerViewDetailed (line 41) | interface LabelerViewDetailed {
function isLabelerViewDetailed (line 61) | function isLabelerViewDetailed<V>(v: V) {
function validateLabelerViewDetailed (line 65) | function validateLabelerViewDetailed<V>(v: V) {
type LabelerViewerState (line 69) | interface LabelerViewerState {
function isLabelerViewerState (line 76) | function isLabelerViewerState<V>(v: V) {
function validateLabelerViewerState (line 80) | function validateLabelerViewerState<V>(v: V) {
type LabelerPolicies (line 84) | interface LabelerPolicies {
function isLabelerPolicies (line 94) | function isLabelerPolicies<V>(v: V) {
function validateLabelerPolicies (line 98) | function validateLabelerPolicies<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/labeler/getServices.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 33) | interface CallOptions {
type Response (line 38) | interface Response {
function toKnownErr (line 44) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/labeler/service.ts
type Main (line 20) | interface Main {
function isMain (line 36) | function isMain<V>(v: V) {
function validateMain (line 40) | function validateMain<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/notification/declaration.ts
type Main (line 17) | interface Main {
function isMain (line 26) | function isMain<V>(v: V) {
function validateMain (line 30) | function validateMain<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/notification/defs.ts
type RecordDeleted (line 17) | interface RecordDeleted {
function isRecordDeleted (line 23) | function isRecordDeleted<V>(v: V) {
function validateRecordDeleted (line 27) | function validateRecordDeleted<V>(v: V) {
type ChatPreference (line 31) | interface ChatPreference {
function isChatPreference (line 39) | function isChatPreference<V>(v: V) {
function validateChatPreference (line 43) | function validateChatPreference<V>(v: V) {
type FilterablePreference (line 47) | interface FilterablePreference {
function isFilterablePreference (line 56) | function isFilterablePreference<V>(v: V) {
function validateFilterablePreference (line 60) | function validateFilterablePreference<V>(v: V) {
type Preference (line 64) | interface Preference {
function isPreference (line 72) | function isPreference<V>(v: V) {
function validatePreference (line 76) | function validatePreference<V>(v: V) {
type Preferences (line 80) | interface Preferences {
function isPreferences (line 99) | function isPreferences<V>(v: V) {
function validatePreferences (line 103) | function validatePreferences<V>(v: V) {
type ActivitySubscription (line 107) | interface ActivitySubscription {
function isActivitySubscription (line 115) | function isActivitySubscription<V>(v: V) {
function validateActivitySubscription (line 119) | function validateActivitySubscription<V>(v: V) {
type SubjectActivitySubscription (line 124) | interface SubjectActivitySubscription {
function isSubjectActivitySubscription (line 132) | function isSubjectActivitySubscription<V>(v: V) {
function validateSubjectActivitySubscription (line 136) | function validateSubjectActivitySubscription<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/notification/getPreferences.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 20) | type InputSchema = undefined
type OutputSchema (line 22) | interface OutputSchema {
type CallOptions (line 26) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 37) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/notification/getUnreadCount.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 28) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 39) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/notification/listActivitySubscriptions.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 30) | interface CallOptions {
type Response (line 35) | interface Response {
function toKnownErr (line 41) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/notification/listNotifications.ts
type QueryParams (line 20) | type QueryParams = {
type InputSchema (line 28) | type InputSchema = undefined
type OutputSchema (line 30) | interface OutputSchema {
type CallOptions (line 37) | interface CallOptions {
type Response (line 42) | interface Response {
function toKnownErr (line 48) | function toKnownErr(e: any) {
type Notification (line 52) | interface Notification {
function isNotification (line 82) | function isNotification<V>(v: V) {
function validateNotification (line 86) | function validateNotification<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/notification/putActivitySubscription.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 31) | interface CallOptions {
type Response (line 38) | interface Response {
function toKnownErr (line 44) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/notification/putPreferences.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 24) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 36) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/notification/putPreferencesV2.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 37) | interface OutputSchema {
type CallOptions (line 41) | interface CallOptions {
type Response (line 48) | interface Response {
function toKnownErr (line 54) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/notification/registerPush.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 36) | interface Response {
function toKnownErr (line 41) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/notification/unregisterPush.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 27) | interface CallOptions {
type Response (line 34) | interface Response {
function toKnownErr (line 39) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/notification/updateSeen.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 24) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 36) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/richtext/facet.ts
type Main (line 18) | interface Main {
function isMain (line 26) | function isMain<V>(v: V) {
function validateMain (line 30) | function validateMain<V>(v: V) {
type Mention (line 35) | interface Mention {
function isMention (line 42) | function isMention<V>(v: V) {
function validateMention (line 46) | function validateMention<V>(v: V) {
type Link (line 51) | interface Link {
function isLink (line 58) | function isLink<V>(v: V) {
function validateLink (line 62) | function validateLink<V>(v: V) {
type Tag (line 67) | interface Tag {
function isTag (line 74) | function isTag<V>(v: V) {
function validateTag (line 78) | function validateTag<V>(v: V) {
type ByteSlice (line 83) | interface ByteSlice {
function isByteSlice (line 91) | function isByteSlice<V>(v: V) {
function validateByteSlice (line 95) | function validateByteSlice<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/unspecced/defs.ts
type SkeletonSearchPost (line 19) | interface SkeletonSearchPost {
function isSkeletonSearchPost (line 26) | function isSkeletonSearchPost<V>(v: V) {
function validateSkeletonSearchPost (line 30) | function validateSkeletonSearchPost<V>(v: V) {
type SkeletonSearchActor (line 34) | interface SkeletonSearchActor {
function isSkeletonSearchActor (line 41) | function isSkeletonSearchActor<V>(v: V) {
function validateSkeletonSearchActor (line 45) | function validateSkeletonSearchActor<V>(v: V) {
type SkeletonSearchStarterPack (line 49) | interface SkeletonSearchStarterPack {
function isSkeletonSearchStarterPack (line 56) | function isSkeletonSearchStarterPack<V>(v: V) {
function validateSkeletonSearchStarterPack (line 60) | function validateSkeletonSearchStarterPack<V>(v: V) {
type TrendingTopic (line 68) | interface TrendingTopic {
function isTrendingTopic (line 78) | function isTrendingTopic<V>(v: V) {
function validateTrendingTopic (line 82) | function validateTrendingTopic<V>(v: V) {
type SkeletonTrend (line 86) | interface SkeletonTrend {
function isSkeletonTrend (line 100) | function isSkeletonTrend<V>(v: V) {
function validateSkeletonTrend (line 104) | function validateSkeletonTrend<V>(v: V) {
type TrendView (line 108) | interface TrendView {
function isTrendView (line 122) | function isTrendView<V>(v: V) {
function validateTrendView (line 126) | function validateTrendView<V>(v: V) {
type ThreadItemPost (line 130) | interface ThreadItemPost {
function isThreadItemPost (line 147) | function isThreadItemPost<V>(v: V) {
function validateThreadItemPost (line 151) | function validateThreadItemPost<V>(v: V) {
type ThreadItemNoUnauthenticated (line 155) | interface ThreadItemNoUnauthenticated {
function isThreadItemNoUnauthenticated (line 161) | function isThreadItemNoUnauthenticated<V>(v: V) {
function validateThreadItemNoUnauthenticated (line 165) | function validateThreadItemNoUnauthenticated<V>(v: V) {
type ThreadItemNotFound (line 173) | interface ThreadItemNotFound {
function isThreadItemNotFound (line 179) | function isThreadItemNotFound<V>(v: V) {
function validateThreadItemNotFound (line 183) | function validateThreadItemNotFound<V>(v: V) {
type ThreadItemBlocked (line 187) | interface ThreadItemBlocked {
function isThreadItemBlocked (line 194) | function isThreadItemBlocked<V>(v: V) {
function validateThreadItemBlocked (line 198) | function validateThreadItemBlocked<V>(v: V) {
type AgeAssuranceState (line 203) | interface AgeAssuranceState {
function isAgeAssuranceState (line 213) | function isAgeAssuranceState<V>(v: V) {
function validateAgeAssuranceState (line 217) | function validateAgeAssuranceState<V>(v: V) {
type AgeAssuranceEvent (line 222) | interface AgeAssuranceEvent {
function isAgeAssuranceEvent (line 244) | function isAgeAssuranceEvent<V>(v: V) {
function validateAgeAssuranceEvent (line 248) | function validateAgeAssuranceEvent<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getAgeAssuranceState.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 20) | type InputSchema = undefined
type OutputSchema (line 21) | type OutputSchema = AppBskyUnspeccedDefs.AgeAssuranceState
type CallOptions (line 23) | interface CallOptions {
type Response (line 28) | interface Response {
function toKnownErr (line 34) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getConfig.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type OutputSchema (line 21) | interface OutputSchema {
type CallOptions (line 26) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 37) | function toKnownErr(e: any) {
type LiveNowConfig (line 41) | interface LiveNowConfig {
function isLiveNowConfig (line 49) | function isLiveNowConfig<V>(v: V) {
function validateLiveNowConfig (line 53) | function validateLiveNowConfig<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 28) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 39) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getOnboardingSuggestedStarterPacksSkeleton.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 34) | interface Response {
function toKnownErr (line 40) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getOnboardingSuggestedUsersSkeleton.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 25) | type InputSchema = undefined
type OutputSchema (line 27) | interface OutputSchema {
type CallOptions (line 35) | interface CallOptions {
type Response (line 40) | interface Response {
function toKnownErr (line 46) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getPopularFeedGenerators.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 31) | interface CallOptions {
type Response (line 36) | interface Response {
function toKnownErr (line 42) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getPostThreadOtherV2.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 30) | interface CallOptions {
type Response (line 35) | interface Response {
function toKnownErr (line 41) | function toKnownErr(e: any) {
type ThreadItem (line 45) | interface ThreadItem {
function isThreadItem (line 55) | function isThreadItem<V>(v: V) {
function validateThreadItem (line 59) | function validateThreadItem<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getPostThreadV2.ts
type QueryParams (line 20) | type QueryParams = {
type InputSchema (line 32) | type InputSchema = undefined
type OutputSchema (line 34) | interface OutputSchema {
type CallOptions (line 42) | interface CallOptions {
type Response (line 47) | interface Response {
function toKnownErr (line 53) | function toKnownErr(e: any) {
type ThreadItem (line 57) | interface ThreadItem {
function isThreadItem (line 72) | function isThreadItem<V>(v: V) {
function validateThreadItem (line 76) | function validateThreadItem<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getSuggestedFeeds.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 28) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 39) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getSuggestedFeedsSkeleton.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 34) | interface Response {
function toKnownErr (line 40) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getSuggestedOnboardingUsers.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 34) | interface CallOptions {
type Response (line 39) | interface Response {
function toKnownErr (line 45) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getSuggestedStarterPacks.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 28) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 39) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getSuggestedStarterPacksSkeleton.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 34) | interface Response {
function toKnownErr (line 40) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getSuggestedUsers.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 34) | interface CallOptions {
type Response (line 39) | interface Response {
function toKnownErr (line 45) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getSuggestedUsersSkeleton.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 25) | type InputSchema = undefined
type OutputSchema (line 27) | interface OutputSchema {
type CallOptions (line 35) | interface CallOptions {
type Response (line 40) | interface Response {
function toKnownErr (line 46) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getSuggestionsSkeleton.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 27) | type InputSchema = undefined
type OutputSchema (line 29) | interface OutputSchema {
type CallOptions (line 40) | interface CallOptions {
type Response (line 45) | interface Response {
function toKnownErr (line 51) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getTaggedSuggestions.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type OutputSchema (line 21) | interface OutputSchema {
type CallOptions (line 25) | interface CallOptions {
type Response (line 30) | interface Response {
function toKnownErr (line 36) | function toKnownErr(e: any) {
type Suggestion (line 40) | interface Suggestion {
function isSuggestion (line 49) | function isSuggestion<V>(v: V) {
function validateSuggestion (line 53) | function validateSuggestion<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getTrendingTopics.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 31) | interface CallOptions {
type Response (line 36) | interface Response {
function toKnownErr (line 42) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getTrends.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 28) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 39) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/getTrendsSkeleton.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 30) | interface CallOptions {
type Response (line 35) | interface Response {
function toKnownErr (line 41) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/initAgeAssurance.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 30) | type OutputSchema = AppBskyUnspeccedDefs.AgeAssuranceState
type CallOptions (line 32) | interface CallOptions {
type Response (line 39) | interface Response {
class InvalidEmailError (line 45) | class InvalidEmailError extends XRPCError {
method constructor (line 46) | constructor(src: XRPCError) {
class DidTooLongError (line 51) | class DidTooLongError extends XRPCError {
method constructor (line 52) | constructor(src: XRPCError) {
class InvalidInitiationError (line 57) | class InvalidInitiationError extends XRPCError {
method constructor (line 58) | constructor(src: XRPCError) {
function toKnownErr (line 63) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/searchActorsSkeleton.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 30) | type InputSchema = undefined
type OutputSchema (line 32) | interface OutputSchema {
type CallOptions (line 39) | interface CallOptions {
type Response (line 44) | interface Response {
class BadQueryStringError (line 50) | class BadQueryStringError extends XRPCError {
method constructor (line 51) | constructor(src: XRPCError) {
function toKnownErr (line 56) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/searchPostsSkeleton.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 46) | type InputSchema = undefined
type OutputSchema (line 48) | interface OutputSchema {
type CallOptions (line 55) | interface CallOptions {
type Response (line 60) | interface Response {
class BadQueryStringError (line 66) | class BadQueryStringError extends XRPCError {
method constructor (line 67) | constructor(src: XRPCError) {
function toKnownErr (line 72) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/unspecced/searchStarterPacksSkeleton.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 28) | type InputSchema = undefined
type OutputSchema (line 30) | interface OutputSchema {
type CallOptions (line 37) | interface CallOptions {
type Response (line 42) | interface Response {
class BadQueryStringError (line 48) | class BadQueryStringError extends XRPCError {
method constructor (line 49) | constructor(src: XRPCError) {
function toKnownErr (line 54) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/video/defs.ts
type JobStatus (line 17) | interface JobStatus {
function isJobStatus (line 32) | function isJobStatus<V>(v: V) {
function validateJobStatus (line 36) | function validateJobStatus<V>(v: V) {
FILE: packages/api/src/client/types/app/bsky/video/getJobStatus.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 28) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 39) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/video/getUploadLimits.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type OutputSchema (line 21) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 34) | interface Response {
function toKnownErr (line 40) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/app/bsky/video/uploadVideo.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 20) | type InputSchema = string | Uint8Array | Blob
type OutputSchema (line 22) | interface OutputSchema {
type CallOptions (line 26) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 39) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/actor/declaration.ts
type Main (line 17) | interface Main {
function isMain (line 25) | function isMain<V>(v: V) {
function validateMain (line 29) | function validateMain<V>(v: V) {
FILE: packages/api/src/client/types/chat/bsky/actor/defs.ts
type ProfileViewBasic (line 19) | interface ProfileViewBasic {
function isProfileViewBasic (line 35) | function isProfileViewBasic<V>(v: V) {
function validateProfileViewBasic (line 39) | function validateProfileViewBasic<V>(v: V) {
FILE: packages/api/src/client/types/chat/bsky/actor/deleteAccount.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type OutputSchema (line 21) | interface OutputSchema {}
type CallOptions (line 23) | interface CallOptions {
type Response (line 29) | interface Response {
function toKnownErr (line 35) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/actor/exportAccountData.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type CallOptions (line 21) | interface CallOptions {
type Response (line 26) | interface Response {
function toKnownErr (line 32) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/convo/acceptConvo.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 36) | interface Response {
function toKnownErr (line 42) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/convo/addReaction.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 27) | interface OutputSchema {
type CallOptions (line 31) | interface CallOptions {
type Response (line 38) | interface Response {
class ReactionMessageDeletedError (line 44) | class ReactionMessageDeletedError extends XRPCError {
method constructor (line 45) | constructor(src: XRPCError) {
class ReactionLimitReachedError (line 50) | class ReactionLimitReachedError extends XRPCError {
method constructor (line 51) | constructor(src: XRPCError) {
class ReactionInvalidValueError (line 56) | class ReactionInvalidValueError extends XRPCError {
method constructor (line 57) | constructor(src: XRPCError) {
function toKnownErr (line 62) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/convo/defs.ts
type MessageRef (line 20) | interface MessageRef {
function isMessageRef (line 29) | function isMessageRef<V>(v: V) {
function validateMessageRef (line 33) | function validateMessageRef<V>(v: V) {
type MessageInput (line 37) | interface MessageInput {
function isMessageInput (line 47) | function isMessageInput<V>(v: V) {
function validateMessageInput (line 51) | function validateMessageInput<V>(v: V) {
type MessageView (line 55) | interface MessageView {
function isMessageView (line 71) | function isMessageView<V>(v: V) {
function validateMessageView (line 75) | function validateMessageView<V>(v: V) {
type DeletedMessageView (line 79) | interface DeletedMessageView {
function isDeletedMessageView (line 89) | function isDeletedMessageView<V>(v: V) {
function validateDeletedMessageView (line 93) | function validateDeletedMessageView<V>(v: V) {
type MessageViewSender (line 97) | interface MessageViewSender {
function isMessageViewSender (line 104) | function isMessageViewSender<V>(v: V) {
function validateMessageViewSender (line 108) | function validateMessageViewSender<V>(v: V) {
type ReactionView (line 112) | interface ReactionView {
function isReactionView (line 121) | function isReactionView<V>(v: V) {
function validateReactionView (line 125) | function validateReactionView<V>(v: V) {
type ReactionViewSender (line 129) | interface ReactionViewSender {
function isReactionViewSender (line 136) | function isReactionViewSender<V>(v: V) {
function validateReactionViewSender (line 140) | function validateReactionViewSender<V>(v: V) {
type MessageAndReactionView (line 144) | interface MessageAndReactionView {
function isMessageAndReactionView (line 152) | function isMessageAndReactionView<V>(v: V) {
function validateMessageAndReactionView (line 156) | function validateMessageAndReactionView<V>(v: V) {
type ConvoView (line 160) | interface ConvoView {
function isConvoView (line 177) | function isConvoView<V>(v: V) {
function validateConvoView (line 181) | function validateConvoView<V>(v: V) {
type LogBeginConvo (line 185) | interface LogBeginConvo {
function isLogBeginConvo (line 193) | function isLogBeginConvo<V>(v: V) {
function validateLogBeginConvo (line 197) | function validateLogBeginConvo<V>(v: V) {
type LogAcceptConvo (line 201) | interface LogAcceptConvo {
function isLogAcceptConvo (line 209) | function isLogAcceptConvo<V>(v: V) {
function validateLogAcceptConvo (line 213) | function validateLogAcceptConvo<V>(v: V) {
type LogLeaveConvo (line 217) | interface LogLeaveConvo {
function isLogLeaveConvo (line 225) | function isLogLeaveConvo<V>(v: V) {
function validateLogLeaveConvo (line 229) | function validateLogLeaveConvo<V>(v: V) {
type LogMuteConvo (line 233) | interface LogMuteConvo {
function isLogMuteConvo (line 241) | function isLogMuteConvo<V>(v: V) {
function validateLogMuteConvo (line 245) | function validateLogMuteConvo<V>(v: V) {
type LogUnmuteConvo (line 249) | interface LogUnmuteConvo {
function isLogUnmuteConvo (line 257) | function isLogUnmuteConvo<V>(v: V) {
function validateLogUnmuteConvo (line 261) | function validateLogUnmuteConvo<V>(v: V) {
type LogCreateMessage (line 265) | interface LogCreateMessage {
function isLogCreateMessage (line 274) | function isLogCreateMessage<V>(v: V) {
function validateLogCreateMessage (line 278) | function validateLogCreateMessage<V>(v: V) {
type LogDeleteMessage (line 282) | interface LogDeleteMessage {
function isLogDeleteMessage (line 291) | function isLogDeleteMessage<V>(v: V) {
function validateLogDeleteMessage (line 295) | function validateLogDeleteMessage<V>(v: V) {
type LogReadMessage (line 299) | interface LogReadMessage {
function isLogReadMessage (line 308) | function isLogReadMessage<V>(v: V) {
function validateLogReadMessage (line 312) | function validateLogReadMessage<V>(v: V) {
type LogAddReaction (line 316) | interface LogAddReaction {
function isLogAddReaction (line 326) | function isLogAddReaction<V>(v: V) {
function validateLogAddReaction (line 330) | function validateLogAddReaction<V>(v: V) {
type LogRemoveReaction (line 334) | interface LogRemoveReaction {
function isLogRemoveReaction (line 344) | function isLogRemoveReaction<V>(v: V) {
function validateLogRemoveReaction (line 348) | function validateLogRemoveReaction<V>(v: V) {
FILE: packages/api/src/client/types/chat/bsky/convo/deleteMessageForSelf.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 26) | type OutputSchema = ChatBskyConvoDefs.DeletedMessageView
type CallOptions (line 28) | interface CallOptions {
type Response (line 35) | interface Response {
function toKnownErr (line 41) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/convo/getConvo.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 28) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 39) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/convo/getConvoAvailability.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 34) | interface Response {
function toKnownErr (line 40) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/convo/getConvoForMembers.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 28) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 39) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/convo/getLog.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 41) | interface CallOptions {
type Response (line 46) | interface Response {
function toKnownErr (line 52) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/convo/getMessages.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 35) | interface CallOptions {
type Response (line 40) | interface Response {
function toKnownErr (line 46) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/convo/leaveConvo.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 36) | interface Response {
function toKnownErr (line 42) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/convo/listConvos.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 25) | type InputSchema = undefined
type OutputSchema (line 27) | interface OutputSchema {
type CallOptions (line 32) | interface CallOptions {
type Response (line 37) | interface Response {
function toKnownErr (line 43) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/convo/muteConvo.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 36) | interface Response {
function toKnownErr (line 42) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/convo/removeReaction.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 27) | interface OutputSchema {
type CallOptions (line 31) | interface CallOptions {
type Response (line 38) | interface Response {
class ReactionMessageDeletedError (line 44) | class ReactionMessageDeletedError extends XRPCError {
method constructor (line 45) | constructor(src: XRPCError) {
class ReactionInvalidValueError (line 50) | class ReactionInvalidValueError extends XRPCError {
method constructor (line 51) | constructor(src: XRPCError) {
function toKnownErr (line 56) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/convo/sendMessage.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 26) | type OutputSchema = ChatBskyConvoDefs.MessageView
type CallOptions (line 28) | interface CallOptions {
type Response (line 35) | interface Response {
function toKnownErr (line 41) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/convo/sendMessageBatch.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 36) | interface Response {
function toKnownErr (line 42) | function toKnownErr(e: any) {
type BatchItem (line 46) | interface BatchItem {
function isBatchItem (line 54) | function isBatchItem<V>(v: V) {
function validateBatchItem (line 58) | function validateBatchItem<V>(v: V) {
FILE: packages/api/src/client/types/chat/bsky/convo/unmuteConvo.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 36) | interface Response {
function toKnownErr (line 42) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/convo/updateAllRead.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 36) | interface Response {
function toKnownErr (line 42) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/convo/updateRead.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 30) | interface CallOptions {
type Response (line 37) | interface Response {
function toKnownErr (line 43) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/moderation/getActorMetadata.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 21) | type InputSchema = undefined
type OutputSchema (line 23) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 34) | interface Response {
function toKnownErr (line 40) | function toKnownErr(e: any) {
type Metadata (line 44) | interface Metadata {
function isMetadata (line 54) | function isMetadata<V>(v: V) {
function validateMetadata (line 58) | function validateMetadata<V>(v: V) {
FILE: packages/api/src/client/types/chat/bsky/moderation/getMessageContext.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 26) | type InputSchema = undefined
type OutputSchema (line 28) | interface OutputSchema {
type CallOptions (line 36) | interface CallOptions {
type Response (line 41) | interface Response {
function toKnownErr (line 47) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/chat/bsky/moderation/updateActorAccess.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 26) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 38) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/admin/defs.ts
type StatusAttr (line 18) | interface StatusAttr {
function isStatusAttr (line 26) | function isStatusAttr<V>(v: V) {
function validateStatusAttr (line 30) | function validateStatusAttr<V>(v: V) {
type AccountView (line 34) | interface AccountView {
function isAccountView (line 52) | function isAccountView<V>(v: V) {
function validateAccountView (line 56) | function validateAccountView<V>(v: V) {
type RepoRef (line 60) | interface RepoRef {
function isRepoRef (line 67) | function isRepoRef<V>(v: V) {
function validateRepoRef (line 71) | function validateRepoRef<V>(v: V) {
type RepoBlobRef (line 75) | interface RepoBlobRef {
function isRepoBlobRef (line 84) | function isRepoBlobRef<V>(v: V) {
function validateRepoBlobRef (line 88) | function validateRepoBlobRef<V>(v: V) {
type ThreatSignature (line 92) | interface ThreatSignature {
function isThreatSignature (line 100) | function isThreatSignature<V>(v: V) {
function validateThreatSignature (line 104) | function validateThreatSignature<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/admin/deleteAccount.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 24) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 36) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/admin/disableAccountInvites.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 26) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 38) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/admin/disableInviteCodes.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 25) | interface CallOptions {
type Response (line 32) | interface Response {
function toKnownErr (line 37) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/admin/enableAccountInvites.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 26) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 38) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/admin/getAccountInfo.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 23) | type OutputSchema = ComAtprotoAdminDefs.AccountView
type CallOptions (line 25) | interface CallOptions {
type Response (line 30) | interface Response {
function toKnownErr (line 36) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/admin/getAccountInfos.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 28) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 39) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/admin/getInviteCodes.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 31) | interface CallOptions {
type Response (line 36) | interface Response {
function toKnownErr (line 42) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/admin/getSubjectStatus.ts
type QueryParams (line 20) | type QueryParams = {
type InputSchema (line 25) | type InputSchema = undefined
type OutputSchema (line 27) | interface OutputSchema {
type CallOptions (line 37) | interface CallOptions {
type Response (line 42) | interface Response {
function toKnownErr (line 48) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/admin/searchAccounts.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 31) | interface CallOptions {
type Response (line 36) | interface Response {
function toKnownErr (line 42) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/admin/sendEmail.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type OutputSchema (line 29) | interface OutputSchema {
type CallOptions (line 33) | interface CallOptions {
type Response (line 40) | interface Response {
function toKnownErr (line 46) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/admin/updateAccountEmail.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 26) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 38) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/admin/updateAccountHandle.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 25) | interface CallOptions {
type Response (line 32) | interface Response {
function toKnownErr (line 37) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/admin/updateAccountPassword.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 25) | interface CallOptions {
type Response (line 32) | interface Response {
function toKnownErr (line 37) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/admin/updateAccountSigningKey.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 26) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 38) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/admin/updateSubjectStatus.ts
type QueryParams (line 20) | type QueryParams = {}
type InputSchema (line 22) | interface InputSchema {
type OutputSchema (line 32) | interface OutputSchema {
type CallOptions (line 41) | interface CallOptions {
type Response (line 48) | interface Response {
function toKnownErr (line 54) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/identity/defs.ts
type IdentityInfo (line 17) | interface IdentityInfo {
function isIdentityInfo (line 28) | function isIdentityInfo<V>(v: V) {
function validateIdentityInfo (line 32) | function validateIdentityInfo<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/identity/getRecommendedDidCredentials.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type OutputSchema (line 21) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 34) | interface Response {
function toKnownErr (line 40) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/identity/refreshIdentity.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 25) | type OutputSchema = ComAtprotoIdentityDefs.IdentityInfo
type CallOptions (line 27) | interface CallOptions {
type Response (line 34) | interface Response {
class HandleNotFoundError (line 40) | class HandleNotFoundError extends XRPCError {
method constructor (line 41) | constructor(src: XRPCError) {
class DidNotFoundError (line 46) | class DidNotFoundError extends XRPCError {
method constructor (line 47) | constructor(src: XRPCError) {
class DidDeactivatedError (line 52) | class DidDeactivatedError extends XRPCError {
method constructor (line 53) | constructor(src: XRPCError) {
function toKnownErr (line 58) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/identity/requestPlcOperationSignature.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type CallOptions (line 21) | interface CallOptions {
type Response (line 27) | interface Response {
function toKnownErr (line 32) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/identity/resolveDid.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 34) | interface Response {
class DidNotFoundError (line 40) | class DidNotFoundError extends XRPCError {
method constructor (line 41) | constructor(src: XRPCError) {
class DidDeactivatedError (line 46) | class DidDeactivatedError extends XRPCError {
method constructor (line 47) | constructor(src: XRPCError) {
function toKnownErr (line 52) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/identity/resolveHandle.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 28) | interface CallOptions {
type Response (line 33) | interface Response {
class HandleNotFoundError (line 39) | class HandleNotFoundError extends XRPCError {
method constructor (line 40) | constructor(src: XRPCError) {
function toKnownErr (line 45) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/identity/resolveIdentity.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 24) | type OutputSchema = ComAtprotoIdentityDefs.IdentityInfo
type CallOptions (line 26) | interface CallOptions {
type Response (line 31) | interface Response {
class HandleNotFoundError (line 37) | class HandleNotFoundError extends XRPCError {
method constructor (line 38) | constructor(src: XRPCError) {
class DidNotFoundError (line 43) | class DidNotFoundError extends XRPCError {
method constructor (line 44) | constructor(src: XRPCError) {
class DidDeactivatedError (line 49) | class DidDeactivatedError extends XRPCError {
method constructor (line 50) | constructor(src: XRPCError) {
function toKnownErr (line 55) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/identity/signPlcOperation.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type OutputSchema (line 29) | interface OutputSchema {
type CallOptions (line 34) | interface CallOptions {
type Response (line 41) | interface Response {
function toKnownErr (line 47) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/identity/submitPlcOperation.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 24) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 36) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/identity/updateHandle.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 25) | interface CallOptions {
type Response (line 32) | interface Response {
function toKnownErr (line 37) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/label/defs.ts
type Label (line 18) | interface Label {
function isLabel (line 42) | function isLabel<V>(v: V) {
function validateLabel (line 46) | function validateLabel<V>(v: V) {
type SelfLabels (line 51) | interface SelfLabels {
function isSelfLabels (line 58) | function isSelfLabels<V>(v: V) {
function validateSelfLabels (line 62) | function validateSelfLabels<V>(v: V) {
type SelfLabel (line 67) | interface SelfLabel {
function isSelfLabel (line 75) | function isSelfLabel<V>(v: V) {
function validateSelfLabel (line 79) | function validateSelfLabel<V>(v: V) {
type LabelValueDefinition (line 84) | interface LabelValueDefinition {
function isLabelValueDefinition (line 101) | function isLabelValueDefinition<V>(v: V) {
function validateLabelValueDefinition (line 105) | function validateLabelValueDefinition<V>(v: V) {
type LabelValueDefinitionStrings (line 110) | interface LabelValueDefinitionStrings {
function isLabelValueDefinitionStrings (line 122) | function isLabelValueDefinitionStrings<V>(v: V) {
function validateLabelValueDefinitionStrings (line 126) | function validateLabelValueDefinitionStrings<V>(v: V) {
type LabelValue (line 134) | type LabelValue =
FILE: packages/api/src/client/types/com/atproto/label/queryLabels.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 27) | type InputSchema = undefined
type OutputSchema (line 29) | interface OutputSchema {
type CallOptions (line 34) | interface CallOptions {
type Response (line 39) | interface Response {
function toKnownErr (line 45) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/label/subscribeLabels.ts
type Labels (line 19) | interface Labels {
function isLabels (line 27) | function isLabels<V>(v: V) {
function validateLabels (line 31) | function validateLabels<V>(v: V) {
type Info (line 35) | interface Info {
function isInfo (line 43) | function isInfo<V>(v: V) {
function validateInfo (line 47) | function validateInfo<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/lexicon/resolveLexicon.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 33) | interface CallOptions {
type Response (line 38) | interface Response {
class LexiconNotFoundError (line 44) | class LexiconNotFoundError extends XRPCError {
method constructor (line 45) | constructor(src: XRPCError) {
function toKnownErr (line 50) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/lexicon/schema.ts
type Main (line 17) | interface Main {
function isMain (line 26) | function isMain<V>(v: V) {
function validateMain (line 30) | function validateMain<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/moderation/createReport.ts
type QueryParams (line 21) | type QueryParams = {}
type InputSchema (line 23) | interface InputSchema {
type OutputSchema (line 34) | interface OutputSchema {
type CallOptions (line 46) | interface CallOptions {
type Response (line 53) | interface Response {
function toKnownErr (line 59) | function toKnownErr(e: any) {
type ModTool (line 64) | interface ModTool {
function isModTool (line 74) | function isModTool<V>(v: V) {
function validateModTool (line 78) | function validateModTool<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/moderation/defs.ts
type ReasonType (line 17) | type ReasonType =
constant REASONSPAM (line 68) | const REASONSPAM = `${id}#reasonSpam`
constant REASONVIOLATION (line 70) | const REASONVIOLATION = `${id}#reasonViolation`
constant REASONMISLEADING (line 72) | const REASONMISLEADING = `${id}#reasonMisleading`
constant REASONSEXUAL (line 74) | const REASONSEXUAL = `${id}#reasonSexual`
constant REASONRUDE (line 76) | const REASONRUDE = `${id}#reasonRude`
constant REASONOTHER (line 78) | const REASONOTHER = `${id}#reasonOther`
constant REASONAPPEAL (line 80) | const REASONAPPEAL = `${id}#reasonAppeal`
type SubjectType (line 83) | type SubjectType = 'account' | 'record' | 'chat' | (string & {})
FILE: packages/api/src/client/types/com/atproto/repo/applyWrites.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 31) | interface OutputSchema {
type CallOptions (line 40) | interface CallOptions {
type Response (line 47) | interface Response {
class InvalidSwapError (line 53) | class InvalidSwapError extends XRPCError {
method constructor (line 54) | constructor(src: XRPCError) {
function toKnownErr (line 59) | function toKnownErr(e: any) {
type Create (line 68) | interface Create {
function isCreate (line 78) | function isCreate<V>(v: V) {
function validateCreate (line 82) | function validateCreate<V>(v: V) {
type Update (line 87) | interface Update {
function isUpdate (line 96) | function isUpdate<V>(v: V) {
function validateUpdate (line 100) | function validateUpdate<V>(v: V) {
type Delete (line 105) | interface Delete {
function isDelete (line 113) | function isDelete<V>(v: V) {
function validateDelete (line 117) | function validateDelete<V>(v: V) {
type CreateResult (line 121) | interface CreateResult {
function isCreateResult (line 130) | function isCreateResult<V>(v: V) {
function validateCreateResult (line 134) | function validateCreateResult<V>(v: V) {
type UpdateResult (line 138) | interface UpdateResult {
function isUpdateResult (line 147) | function isUpdateResult<V>(v: V) {
function validateUpdateResult (line 151) | function validateUpdateResult<V>(v: V) {
type DeleteResult (line 155) | interface DeleteResult {
function isDeleteResult (line 161) | function isDeleteResult<V>(v: V) {
function validateDeleteResult (line 165) | function validateDeleteResult<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/repo/createRecord.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 36) | interface OutputSchema {
type CallOptions (line 43) | interface CallOptions {
type Response (line 50) | interface Response {
class InvalidSwapError (line 56) | class InvalidSwapError extends XRPCError {
method constructor (line 57) | constructor(src: XRPCError) {
function toKnownErr (line 62) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/repo/defs.ts
type CommitMeta (line 17) | interface CommitMeta {
function isCommitMeta (line 25) | function isCommitMeta<V>(v: V) {
function validateCommitMeta (line 29) | function validateCommitMeta<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/repo/deleteRecord.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 34) | interface OutputSchema {
type CallOptions (line 38) | interface CallOptions {
type Response (line 45) | interface Response {
class InvalidSwapError (line 51) | class InvalidSwapError extends XRPCError {
method constructor (line 52) | constructor(src: XRPCError) {
function toKnownErr (line 57) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/repo/describeRepo.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 35) | interface CallOptions {
type Response (line 40) | interface Response {
function toKnownErr (line 46) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/repo/getRecord.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 28) | type InputSchema = undefined
type OutputSchema (line 30) | interface OutputSchema {
type CallOptions (line 36) | interface CallOptions {
type Response (line 41) | interface Response {
class RecordNotFoundError (line 47) | class RecordNotFoundError extends XRPCError {
method constructor (line 48) | constructor(src: XRPCError) {
function toKnownErr (line 53) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/repo/importRepo.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = string | Uint8Array | Blob
type CallOptions (line 21) | interface CallOptions {
type Response (line 28) | interface Response {
function toKnownErr (line 33) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/repo/listMissingBlobs.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 34) | interface Response {
function toKnownErr (line 40) | function toKnownErr(e: any) {
type RecordBlob (line 44) | interface RecordBlob {
function isRecordBlob (line 52) | function isRecordBlob<V>(v: V) {
function validateRecordBlob (line 56) | function validateRecordBlob<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/repo/listRecords.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 29) | type InputSchema = undefined
type OutputSchema (line 31) | interface OutputSchema {
type CallOptions (line 36) | interface CallOptions {
type Response (line 41) | interface Response {
function toKnownErr (line 47) | function toKnownErr(e: any) {
type Record (line 51) | interface Record {
function isRecord (line 60) | function isRecord<V>(v: V) {
function validateRecord (line 64) | function validateRecord<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/repo/putRecord.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 38) | interface OutputSchema {
type CallOptions (line 45) | interface CallOptions {
type Response (line 52) | interface Response {
class InvalidSwapError (line 58) | class InvalidSwapError extends XRPCError {
method constructor (line 59) | constructor(src: XRPCError) {
function toKnownErr (line 64) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/repo/strongRef.ts
type Main (line 17) | interface Main {
function isMain (line 25) | function isMain<V>(v: V) {
function validateMain (line 29) | function validateMain<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/repo/uploadBlob.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = string | Uint8Array | Blob
type OutputSchema (line 21) | interface OutputSchema {
type CallOptions (line 25) | interface CallOptions {
type Response (line 32) | interface Response {
function toKnownErr (line 38) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/activateAccount.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type CallOptions (line 21) | interface CallOptions {
type Response (line 27) | interface Response {
function toKnownErr (line 32) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/checkAccountStatus.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type OutputSchema (line 21) | interface OutputSchema {
type CallOptions (line 33) | interface CallOptions {
type Response (line 38) | interface Response {
function toKnownErr (line 44) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/confirmEmail.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 25) | interface CallOptions {
type Response (line 32) | interface Response {
class AccountNotFoundError (line 37) | class AccountNotFoundError extends XRPCError {
method constructor (line 38) | constructor(src: XRPCError) {
class ExpiredTokenError (line 43) | class ExpiredTokenError extends XRPCError {
method constructor (line 44) | constructor(src: XRPCError) {
class InvalidTokenError (line 49) | class InvalidTokenError extends XRPCError {
method constructor (line 50) | constructor(src: XRPCError) {
class InvalidEmailError (line 55) | class InvalidEmailError extends XRPCError {
method constructor (line 56) | constructor(src: XRPCError) {
function toKnownErr (line 61) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/createAccount.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type OutputSchema (line 38) | interface OutputSchema {
type CallOptions (line 48) | interface CallOptions {
type Response (line 55) | interface Response {
class InvalidHandleError (line 61) | class InvalidHandleError extends XRPCError {
method constructor (line 62) | constructor(src: XRPCError) {
class InvalidPasswordError (line 67) | class InvalidPasswordError extends XRPCError {
method constructor (line 68) | constructor(src: XRPCError) {
class InvalidInviteCodeError (line 73) | class InvalidInviteCodeError extends XRPCError {
method constructor (line 74) | constructor(src: XRPCError) {
class HandleNotAvailableError (line 79) | class HandleNotAvailableError extends XRPCError {
method constructor (line 80) | constructor(src: XRPCError) {
class UnsupportedDomainError (line 85) | class UnsupportedDomainError extends XRPCError {
method constructor (line 86) | constructor(src: XRPCError) {
class UnresolvableDidError (line 91) | class UnresolvableDidError extends XRPCError {
method constructor (line 92) | constructor(src: XRPCError) {
class IncompatibleDidDocError (line 97) | class IncompatibleDidDocError extends XRPCError {
method constructor (line 98) | constructor(src: XRPCError) {
function toKnownErr (line 103) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/createAppPassword.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type OutputSchema (line 27) | type OutputSchema = AppPassword
type CallOptions (line 29) | interface CallOptions {
type Response (line 36) | interface Response {
class AccountTakedownError (line 42) | class AccountTakedownError extends XRPCError {
method constructor (line 43) | constructor(src: XRPCError) {
function toKnownErr (line 48) | function toKnownErr(e: any) {
type AppPassword (line 56) | interface AppPassword {
function isAppPassword (line 66) | function isAppPassword<V>(v: V) {
function validateAppPassword (line 70) | function validateAppPassword<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/server/createInviteCode.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 36) | interface Response {
function toKnownErr (line 42) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/createInviteCodes.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 30) | interface CallOptions {
type Response (line 37) | interface Response {
function toKnownErr (line 43) | function toKnownErr(e: any) {
type AccountCodes (line 47) | interface AccountCodes {
function isAccountCodes (line 55) | function isAccountCodes<V>(v: V) {
function validateAccountCodes (line 59) | function validateAccountCodes<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/server/createSession.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type OutputSchema (line 29) | interface OutputSchema {
type CallOptions (line 43) | interface CallOptions {
type Response (line 50) | interface Response {
class AccountTakedownError (line 56) | class AccountTakedownError extends XRPCError {
method constructor (line 57) | constructor(src: XRPCError) {
class AuthFactorTokenRequiredError (line 62) | class AuthFactorTokenRequiredError extends XRPCError {
method constructor (line 63) | constructor(src: XRPCError) {
function toKnownErr (line 68) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/deactivateAccount.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 25) | interface CallOptions {
type Response (line 32) | interface Response {
function toKnownErr (line 37) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/defs.ts
type InviteCode (line 17) | interface InviteCode {
function isInviteCode (line 30) | function isInviteCode<V>(v: V) {
function validateInviteCode (line 34) | function validateInviteCode<V>(v: V) {
type InviteCodeUse (line 38) | interface InviteCodeUse {
function isInviteCodeUse (line 46) | function isInviteCodeUse<V>(v: V) {
function validateInviteCodeUse (line 50) | function validateInviteCodeUse<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/server/deleteAccount.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 26) | interface CallOptions {
type Response (line 33) | interface Response {
class ExpiredTokenError (line 38) | class ExpiredTokenError extends XRPCError {
method constructor (line 39) | constructor(src: XRPCError) {
class InvalidTokenError (line 44) | class InvalidTokenError extends XRPCError {
method constructor (line 45) | constructor(src: XRPCError) {
function toKnownErr (line 50) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/deleteSession.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type CallOptions (line 21) | interface CallOptions {
type Response (line 27) | interface Response {
class InvalidTokenError (line 32) | class InvalidTokenError extends XRPCError {
method constructor (line 33) | constructor(src: XRPCError) {
class ExpiredTokenError (line 38) | class ExpiredTokenError extends XRPCError {
method constructor (line 39) | constructor(src: XRPCError) {
function toKnownErr (line 44) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/describeServer.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type OutputSchema (line 21) | interface OutputSchema {
type CallOptions (line 33) | interface CallOptions {
type Response (line 38) | interface Response {
function toKnownErr (line 44) | function toKnownErr(e: any) {
type Links (line 48) | interface Links {
function isLinks (line 56) | function isLinks<V>(v: V) {
function validateLinks (line 60) | function validateLinks<V>(v: V) {
type Contact (line 64) | interface Contact {
function isContact (line 71) | function isContact<V>(v: V) {
function validateContact (line 75) | function validateContact<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/server/getAccountInviteCodes.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 30) | interface CallOptions {
type Response (line 35) | interface Response {
class DuplicateCreateError (line 41) | class DuplicateCreateError extends XRPCError {
method constructor (line 42) | constructor(src: XRPCError) {
function toKnownErr (line 47) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/getServiceAuth.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 26) | type InputSchema = undefined
type OutputSchema (line 28) | interface OutputSchema {
type CallOptions (line 32) | interface CallOptions {
type Response (line 37) | interface Response {
class BadExpirationError (line 43) | class BadExpirationError extends XRPCError {
method constructor (line 44) | constructor(src: XRPCError) {
function toKnownErr (line 49) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/getSession.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type OutputSchema (line 21) | interface OutputSchema {
type CallOptions (line 33) | interface CallOptions {
type Response (line 38) | interface Response {
function toKnownErr (line 44) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/listAppPasswords.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type OutputSchema (line 21) | interface OutputSchema {
type CallOptions (line 25) | interface CallOptions {
type Response (line 30) | interface Response {
class AccountTakedownError (line 36) | class AccountTakedownError extends XRPCError {
method constructor (line 37) | constructor(src: XRPCError) {
function toKnownErr (line 42) | function toKnownErr(e: any) {
type AppPassword (line 50) | interface AppPassword {
function isAppPassword (line 59) | function isAppPassword<V>(v: V) {
function validateAppPassword (line 63) | function validateAppPassword<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/server/refreshSession.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type OutputSchema (line 21) | interface OutputSchema {
type CallOptions (line 35) | interface CallOptions {
type Response (line 41) | interface Response {
class AccountTakedownError (line 47) | class AccountTakedownError extends XRPCError {
method constructor (line 48) | constructor(src: XRPCError) {
class InvalidTokenError (line 53) | class InvalidTokenError extends XRPCError {
method constructor (line 54) | constructor(src: XRPCError) {
class ExpiredTokenError (line 59) | class ExpiredTokenError extends XRPCError {
method constructor (line 60) | constructor(src: XRPCError) {
function toKnownErr (line 65) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/requestAccountDelete.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type CallOptions (line 21) | interface CallOptions {
type Response (line 27) | interface Response {
function toKnownErr (line 32) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/requestEmailConfirmation.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type CallOptions (line 21) | interface CallOptions {
type Response (line 27) | interface Response {
function toKnownErr (line 32) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/requestEmailUpdate.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type OutputSchema (line 21) | interface OutputSchema {
type CallOptions (line 25) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 37) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/requestPasswordReset.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 24) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 36) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/reserveSigningKey.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 30) | interface CallOptions {
type Response (line 37) | interface Response {
function toKnownErr (line 43) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/resetPassword.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 25) | interface CallOptions {
type Response (line 32) | interface Response {
class ExpiredTokenError (line 37) | class ExpiredTokenError extends XRPCError {
method constructor (line 38) | constructor(src: XRPCError) {
class InvalidTokenError (line 43) | class InvalidTokenError extends XRPCError {
method constructor (line 44) | constructor(src: XRPCError) {
function toKnownErr (line 49) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/revokeAppPassword.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 24) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 36) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/server/updateEmail.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 27) | interface CallOptions {
type Response (line 34) | interface Response {
class ExpiredTokenError (line 39) | class ExpiredTokenError extends XRPCError {
method constructor (line 40) | constructor(src: XRPCError) {
class InvalidTokenError (line 45) | class InvalidTokenError extends XRPCError {
method constructor (line 46) | constructor(src: XRPCError) {
class TokenRequiredError (line 51) | class TokenRequiredError extends XRPCError {
method constructor (line 52) | constructor(src: XRPCError) {
function toKnownErr (line 57) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/sync/defs.ts
type HostStatus (line 17) | type HostStatus =
FILE: packages/api/src/client/types/com/atproto/sync/getBlob.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type CallOptions (line 26) | interface CallOptions {
type Response (line 31) | interface Response {
class BlobNotFoundError (line 37) | class BlobNotFoundError extends XRPCError {
method constructor (line 38) | constructor(src: XRPCError) {
class RepoNotFoundError (line 43) | class RepoNotFoundError extends XRPCError {
method constructor (line 44) | constructor(src: XRPCError) {
class RepoTakendownError (line 49) | class RepoTakendownError extends XRPCError {
method constructor (line 50) | constructor(src: XRPCError) {
class RepoSuspendedError (line 55) | class RepoSuspendedError extends XRPCError {
method constructor (line 56) | constructor(src: XRPCError) {
class RepoDeactivatedError (line 61) | class RepoDeactivatedError extends XRPCError {
method constructor (line 62) | constructor(src: XRPCError) {
function toKnownErr (line 67) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/sync/getBlocks.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type CallOptions (line 25) | interface CallOptions {
type Response (line 30) | interface Response {
class BlockNotFoundError (line 36) | class BlockNotFoundError extends XRPCError {
method constructor (line 37) | constructor(src: XRPCError) {
class RepoNotFoundError (line 42) | class RepoNotFoundError extends XRPCError {
method constructor (line 43) | constructor(src: XRPCError) {
class RepoTakendownError (line 48) | class RepoTakendownError extends XRPCError {
method constructor (line 49) | constructor(src: XRPCError) {
class RepoSuspendedError (line 54) | class RepoSuspendedError extends XRPCError {
method constructor (line 55) | constructor(src: XRPCError) {
class RepoDeactivatedError (line 60) | class RepoDeactivatedError extends XRPCError {
method constructor (line 61) | constructor(src: XRPCError) {
function toKnownErr (line 66) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/sync/getCheckout.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type CallOptions (line 24) | interface CallOptions {
type Response (line 29) | interface Response {
function toKnownErr (line 35) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/sync/getHead.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 28) | interface CallOptions {
type Response (line 33) | interface Response {
class HeadNotFoundError (line 39) | class HeadNotFoundError extends XRPCError {
method constructor (line 40) | constructor(src: XRPCError) {
function toKnownErr (line 45) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/sync/getHostStatus.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 34) | interface CallOptions {
type Response (line 39) | interface Response {
class HostNotFoundError (line 45) | class HostNotFoundError extends XRPCError {
method constructor (line 46) | constructor(src: XRPCError) {
function toKnownErr (line 51) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/sync/getLatestCommit.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 34) | interface Response {
class RepoNotFoundError (line 40) | class RepoNotFoundError extends XRPCError {
method constructor (line 41) | constructor(src: XRPCError) {
class RepoTakendownError (line 46) | class RepoTakendownError extends XRPCError {
method constructor (line 47) | constructor(src: XRPCError) {
class RepoSuspendedError (line 52) | class RepoSuspendedError extends XRPCError {
method constructor (line 53) | constructor(src: XRPCError) {
class RepoDeactivatedError (line 58) | class RepoDeactivatedError extends XRPCError {
method constructor (line 59) | constructor(src: XRPCError) {
function toKnownErr (line 64) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/sync/getRecord.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 25) | type InputSchema = undefined
type CallOptions (line 27) | interface CallOptions {
type Response (line 32) | interface Response {
class RecordNotFoundError (line 38) | class RecordNotFoundError extends XRPCError {
method constructor (line 39) | constructor(src: XRPCError) {
class RepoNotFoundError (line 44) | class RepoNotFoundError extends XRPCError {
method constructor (line 45) | constructor(src: XRPCError) {
class RepoTakendownError (line 50) | class RepoTakendownError extends XRPCError {
method constructor (line 51) | constructor(src: XRPCError) {
class RepoSuspendedError (line 56) | class RepoSuspendedError extends XRPCError {
method constructor (line 57) | constructor(src: XRPCError) {
class RepoDeactivatedError (line 62) | class RepoDeactivatedError extends XRPCError {
method constructor (line 63) | constructor(src: XRPCError) {
function toKnownErr (line 68) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/sync/getRepo.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type CallOptions (line 26) | interface CallOptions {
type Response (line 31) | interface Response {
class RepoNotFoundError (line 37) | class RepoNotFoundError extends XRPCError {
method constructor (line 38) | constructor(src: XRPCError) {
class RepoTakendownError (line 43) | class RepoTakendownError extends XRPCError {
method constructor (line 44) | constructor(src: XRPCError) {
class RepoSuspendedError (line 49) | class RepoSuspendedError extends XRPCError {
method constructor (line 50) | constructor(src: XRPCError) {
class RepoDeactivatedError (line 55) | class RepoDeactivatedError extends XRPCError {
method constructor (line 56) | constructor(src: XRPCError) {
function toKnownErr (line 61) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/sync/getRepoStatus.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 40) | interface CallOptions {
type Response (line 45) | interface Response {
class RepoNotFoundError (line 51) | class RepoNotFoundError extends XRPCError {
method constructor (line 52) | constructor(src: XRPCError) {
function toKnownErr (line 57) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/sync/listBlobs.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 26) | type InputSchema = undefined
type OutputSchema (line 28) | interface OutputSchema {
type CallOptions (line 33) | interface CallOptions {
type Response (line 38) | interface Response {
class RepoNotFoundError (line 44) | class RepoNotFoundError extends XRPCError {
method constructor (line 45) | constructor(src: XRPCError) {
class RepoTakendownError (line 50) | class RepoTakendownError extends XRPCError {
method constructor (line 51) | constructor(src: XRPCError) {
class RepoSuspendedError (line 56) | class RepoSuspendedError extends XRPCError {
method constructor (line 57) | constructor(src: XRPCError) {
class RepoDeactivatedError (line 62) | class RepoDeactivatedError extends XRPCError {
method constructor (line 63) | constructor(src: XRPCError) {
function toKnownErr (line 68) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/sync/listHosts.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 31) | interface CallOptions {
type Response (line 36) | interface Response {
function toKnownErr (line 42) | function toKnownErr(e: any) {
type Host (line 46) | interface Host {
function isHost (line 58) | function isHost<V>(v: V) {
function validateHost (line 62) | function validateHost<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/sync/listRepos.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 34) | interface Response {
function toKnownErr (line 40) | function toKnownErr(e: any) {
type Repo (line 44) | interface Repo {
function isRepo (line 64) | function isRepo<V>(v: V) {
function validateRepo (line 68) | function validateRepo<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/sync/listReposByCollection.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 24) | type InputSchema = undefined
type OutputSchema (line 26) | interface OutputSchema {
type CallOptions (line 31) | interface CallOptions {
type Response (line 36) | interface Response {
function toKnownErr (line 42) | function toKnownErr(e: any) {
type Repo (line 46) | interface Repo {
function isRepo (line 53) | function isRepo<V>(v: V) {
function validateRepo (line 57) | function validateRepo<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/sync/notifyOfUpdate.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 25) | interface CallOptions {
type Response (line 32) | interface Response {
function toKnownErr (line 37) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/sync/requestCrawl.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 25) | interface CallOptions {
type Response (line 32) | interface Response {
class HostBannedError (line 37) | class HostBannedError extends XRPCError {
method constructor (line 38) | constructor(src: XRPCError) {
function toKnownErr (line 43) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/sync/subscribeRepos.ts
type Commit (line 19) | interface Commit {
function isCommit (line 47) | function isCommit<V>(v: V) {
function validateCommit (line 51) | function validateCommit<V>(v: V) {
type Sync (line 56) | interface Sync {
function isSync (line 72) | function isSync<V>(v: V) {
function validateSync (line 76) | function validateSync<V>(v: V) {
type Identity (line 81) | interface Identity {
function isIdentity (line 92) | function isIdentity<V>(v: V) {
function validateIdentity (line 96) | function validateIdentity<V>(v: V) {
type Account (line 101) | interface Account {
function isAccount (line 121) | function isAccount<V>(v: V) {
function validateAccount (line 125) | function validateAccount<V>(v: V) {
type Info (line 129) | interface Info {
function isInfo (line 137) | function isInfo<V>(v: V) {
function validateInfo (line 141) | function validateInfo<V>(v: V) {
type RepoOp (line 146) | interface RepoOp {
function isRepoOp (line 158) | function isRepoOp<V>(v: V) {
function validateRepoOp (line 162) | function validateRepoOp<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/temp/addReservedHandle.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type OutputSchema (line 24) | interface OutputSchema {}
type CallOptions (line 26) | interface CallOptions {
type Response (line 33) | interface Response {
function toKnownErr (line 39) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/temp/checkHandleAvailability.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 26) | type InputSchema = undefined
type OutputSchema (line 28) | interface OutputSchema {
type CallOptions (line 37) | interface CallOptions {
type Response (line 42) | interface Response {
class InvalidEmailError (line 48) | class InvalidEmailError extends XRPCError {
method constructor (line 49) | constructor(src: XRPCError) {
function toKnownErr (line 54) | function toKnownErr(e: any) {
type ResultAvailable (line 63) | interface ResultAvailable {
function isResultAvailable (line 69) | function isResultAvailable<V>(v: V) {
function validateResultAvailable (line 73) | function validateResultAvailable<V>(v: V) {
type ResultUnavailable (line 78) | interface ResultUnavailable {
function isResultUnavailable (line 86) | function isResultUnavailable<V>(v: V) {
function validateResultUnavailable (line 90) | function validateResultUnavailable<V>(v: V) {
type Suggestion (line 94) | interface Suggestion {
function isSuggestion (line 103) | function isSuggestion<V>(v: V) {
function validateSuggestion (line 107) | function validateSuggestion<V>(v: V) {
FILE: packages/api/src/client/types/com/atproto/temp/checkSignupQueue.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 19) | type InputSchema = undefined
type OutputSchema (line 21) | interface OutputSchema {
type CallOptions (line 27) | interface CallOptions {
type Response (line 32) | interface Response {
function toKnownErr (line 38) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/temp/dereferenceScope.ts
type QueryParams (line 18) | type QueryParams = {
type InputSchema (line 22) | type InputSchema = undefined
type OutputSchema (line 24) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 34) | interface Response {
class InvalidScopeReferenceError (line 40) | class InvalidScopeReferenceError extends XRPCError {
method constructor (line 41) | constructor(src: XRPCError) {
function toKnownErr (line 46) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/temp/fetchLabels.ts
type QueryParams (line 19) | type QueryParams = {
type InputSchema (line 23) | type InputSchema = undefined
type OutputSchema (line 25) | interface OutputSchema {
type CallOptions (line 29) | interface CallOptions {
type Response (line 34) | interface Response {
function toKnownErr (line 40) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/temp/requestPhoneVerification.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 24) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 36) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/atproto/temp/revokeAccountCredentials.ts
type QueryParams (line 18) | type QueryParams = {}
type InputSchema (line 20) | interface InputSchema {
type CallOptions (line 24) | interface CallOptions {
type Response (line 31) | interface Response {
function toKnownErr (line 36) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/com/germnetwork/declaration.ts
type Main (line 13) | interface Main {
function isMain (line 29) | function isMain<V>(v: V) {
function validateMain (line 33) | function validateMain<V>(v: V) {
type MessageMe (line 43) | interface MessageMe {
function isMessageMe (line 53) | function isMessageMe<V>(v: V) {
function validateMessageMe (line 57) | function validateMessageMe<V>(v: V) {
FILE: packages/api/src/client/types/tools/ozone/communication/createTemplate.ts
type QueryParams (line 19) | type QueryParams = {}
type InputSchema (line 21) | interface InputSchema {
type OutputSchema (line 34) | type OutputSchema = ToolsOzoneCommunicationDefs.TemplateView
type CallOptions (line 36) | interface CallOptions {
type Response (line 43) | interface Response {
class DuplicateTemplateNameError (line 49) | class DuplicateTemplateNameError extends XRPCError {
method constructor (line 50) | constructor(src: XRPCError) {
function toKnownErr (line 55) | function toKnownErr(e: any) {
FILE: packages/api/src/client/types/tools/ozone/communication/defs.ts
type TemplateView (line 17) | interface TemplateView {
function isTemplateView (line 37) | func
Copy disabled (too large)
Download .json
Condensed preview — 4261 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (18,698K chars).
[
{
"path": ".changeset/README.md",
"chars": 510,
"preview": "# Changesets\n\nHello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that wo"
},
{
"path": ".changeset/config.json",
"chars": 314,
"preview": "{\n \"$schema\": \"https://unpkg.com/@changesets/config@2.3.1/schema.json\",\n \"changelog\": [\"@changesets/changelog-github\","
},
{
"path": ".changeset/giant-goats-repeat.md",
"chars": 96,
"preview": "---\n'@atproto/bsky': patch\n---\n\nRefactor `FeatureGatesClient` to add `scope()` method and docs.\n"
},
{
"path": ".changeset/nine-eyes-switch.md",
"chars": 76,
"preview": "---\n'@atproto/bsky': patch\n---\n\nRemove feature gate for new user onboarding\n"
},
{
"path": ".dockerignore",
"chars": 47,
"preview": "node_modules\n**/dist\n.DS_Store\n.git\nDockerfile\n"
},
{
"path": ".eslintignore",
"chars": 517,
"preview": "dist\nnode_modules\n\n# buf\npackages/bsky/src/proto\npackages/bsync/src/proto\n\n# codegen\npackages/api/src/client\npackages/bs"
},
{
"path": ".eslintrc",
"chars": 2943,
"preview": "{\n \"root\": true,\n \"extends\": [\n \"eslint:recommended\",\n \"plugin:@typescript-eslint/base\",\n \"plugin:@typescript"
},
{
"path": ".gitattributes",
"chars": 504,
"preview": "# buf\npackages/bsky/src/proto/** linguist-generated=true\npackages/bsync/src/proto/** linguist-generated=true\n\n# codegen\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 470,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: bug\nassignees: ''\n---\n\n**Describe the b"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 647,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: feature-request\nassignees: ''\n---\n\n*"
},
{
"path": ".github/workflows/build-and-push-bsky-aws.yaml",
"chars": 1578,
"preview": "name: build-and-push-bsky-aws\non:\n push:\n branches:\n - main\n\nenv:\n REGISTRY: ${{ secrets.AWS_ECR_REGISTRY_USEA"
},
{
"path": ".github/workflows/build-and-push-bsky-ghcr.yaml",
"chars": 1522,
"preview": "name: build-and-push-bsky-ghcr\non:\n push:\n branches:\n - main\n\nenv:\n REGISTRY: ghcr.io\n USERNAME: ${{ github.a"
},
{
"path": ".github/workflows/build-and-push-bsync-aws.yaml",
"chars": 1573,
"preview": "name: build-and-push-bsync-aws\non:\n push:\n branches:\n - main\n\nenv:\n REGISTRY: ${{ secrets.AWS_ECR_REGISTRY_USE"
},
{
"path": ".github/workflows/build-and-push-bsync-ghcr.yaml",
"chars": 1526,
"preview": "name: build-and-push-bsync-ghcr\non:\n push:\n branches:\n - main\n\nenv:\n REGISTRY: ghcr.io\n USERNAME: ${{ github."
},
{
"path": ".github/workflows/build-and-push-ozone-aws.yaml",
"chars": 1573,
"preview": "name: build-and-push-ozone-aws\non:\n push:\n branches:\n - main\n\nenv:\n REGISTRY: ${{ secrets.AWS_ECR_REGISTRY_USE"
},
{
"path": ".github/workflows/build-and-push-ozone-ghcr.yaml",
"chars": 1526,
"preview": "name: build-and-push-ozone-ghcr\non:\n push:\n branches:\n - main\n\nenv:\n REGISTRY: ghcr.io\n USERNAME: ${{ github."
},
{
"path": ".github/workflows/build-and-push-pds-aws.yaml",
"chars": 1565,
"preview": "name: build-and-push-pds-aws\non:\n push:\n branches:\n - main\n\nenv:\n REGISTRY: ${{ secrets.AWS_ECR_REGISTRY_USEAS"
},
{
"path": ".github/workflows/build-and-push-pds-ghcr.yaml",
"chars": 1518,
"preview": "name: build-and-push-pds-ghcr\non:\n push:\n branches:\n - main\n\nenv:\n REGISTRY: ghcr.io\n USERNAME: ${{ github.ac"
},
{
"path": ".github/workflows/claude.yaml",
"chars": 2019,
"preview": "name: Claude Code\n\non:\n issue_comment:\n types: [created]\n pull_request_review_comment:\n types: [created]\n issue"
},
{
"path": ".github/workflows/publish.yaml",
"chars": 921,
"preview": "name: Publish\n\non:\n push:\n branches:\n - main\n\npermissions:\n id-token: write\n contents: write\n pull-requests:"
},
{
"path": ".github/workflows/repo.yaml",
"chars": 3538,
"preview": "name: Repository CI\n\non:\n pull_request:\n branches:\n - '*'\n\nconcurrency:\n group: '${{ github.workflow }}-${{ gi"
},
{
"path": ".github/workflows/sync-internal.yaml",
"chars": 1003,
"preview": "name: Sync to internal repo\n\non:\n push:\n branches: [main]\n\njobs:\n sync:\n if: github.repository == 'bluesky-socia"
},
{
"path": ".gitignore",
"chars": 195,
"preview": "node_modules\nlerna-debug.log\nnpm-debug.log\nyarn-error.log\npackages/**/dist\n.idea\npackages/*/coverage\ntest.sqlite\n.DS_Sto"
},
{
"path": ".npmrc",
"chars": 61,
"preview": "enable-pre-post-scripts = true\ninclude-workspace-root = true\n"
},
{
"path": ".nvmrc",
"chars": 3,
"preview": "22\n"
},
{
"path": ".prettierignore",
"chars": 596,
"preview": "node_modules\ninterop-test-files\n__snapshots__\ndist\npnpm-lock.yaml\n.pnpm*\n.changeset\nCHANGELOG.md\n\n# buf\npackages/bsky/sr"
},
{
"path": ".prettierrc",
"chars": 374,
"preview": "{\n \"trailingComma\": \"all\",\n \"tabWidth\": 2,\n \"semi\": false,\n \"singleQuote\": true,\n \"plugins\": [\"prettier-plugin-tail"
},
{
"path": ".vscode/extensions.json",
"chars": 193,
"preview": "{\n \"recommendations\": [\n \"dbaeumer.vscode-eslint\",\n \"wengerk.highlight-bad-chars\",\n \"esbenp.prettier-vscode\",\n"
},
{
"path": ".vscode/settings.json",
"chars": 992,
"preview": "{\n \"cSpell.language\": \"en,en-US\",\n \"cSpell.words\": [\n \"algs\",\n \"appview\",\n \"atproto\",\n \"blockstore\",\n \""
},
{
"path": "CONTRIBUTORS.md",
"chars": 1215,
"preview": "# Contributors\n\nATProto receives so many contributions that we could never list everyone who deserves it. However, in th"
},
{
"path": "LICENSE-APACHE.txt",
"chars": 11358,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "LICENSE-MIT.txt",
"chars": 1036,
"preview": "MIT License\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associate"
},
{
"path": "LICENSE.txt",
"chars": 529,
"preview": "Dual MIT/Apache-2.0 License\n\nCopyright (c) 2022-2026 Bluesky Social PBC, and Contributors\n\nExcept as otherwise noted in "
},
{
"path": "Makefile",
"chars": 1547,
"preview": "\nSHELL = /bin/bash\n.SHELLFLAGS = -o pipefail -c\n\n.PHONY: help\nhelp: ## Print info about all commands\n\t@echo \"Helper Comm"
},
{
"path": "README.md",
"chars": 8882,
"preview": "# AT Protocol Reference Implementation (TypeScript)\n\nWelcome friends!\n\nThis repository contains Bluesky's reference impl"
},
{
"path": "SECURITY.md",
"chars": 594,
"preview": "# Security Policy\n\n## Reporting a Vulnerability\n\nPlease do NOT report possible security vulnerabilities in public channe"
},
{
"path": "interop-test-files/README.md",
"chars": 498,
"preview": "\natproto Interop Test Files\n==========================\n\nThis directory contains reusable files for testing interoperabil"
},
{
"path": "interop-test-files/crypto/signature-fixtures.json",
"chars": 3276,
"preview": "[\n {\n \"comment\": \"valid P-256 key and signature, with low-S signature\",\n \"messageBase64\": \"oWVoZWxsb2V3b3JsZA\",\n "
},
{
"path": "interop-test-files/crypto/w3c_didkey_K256.json",
"chars": 918,
"preview": "[\n {\n \"privateKeyBytesHex\": \"9085d2bef69286a6cbb51623c8fa258629945cd55ca705cc4e66700396894e0c\",\n \"publicDidKey\": "
},
{
"path": "interop-test-files/crypto/w3c_didkey_P256.json",
"chars": 169,
"preview": "[\n {\n \"privateKeyBytesBase58\": \"9p4VRzdmhsnq869vQjVCTrRry7u4TtfRxhvBFJTGU2Cp\",\n \"publicDidKey\": \"did:key:zDnaeTiq"
},
{
"path": "interop-test-files/syntax/atidentifier_syntax_invalid.txt",
"chars": 332,
"preview": "\n# invalid handles\ndid:thing.test\ndid:thing\njohn-.test\njohn.0\njohn.-\nxn--bcher-.tld\njohn..test\njo_hn.test\n\n# invalid DID"
},
{
"path": "interop-test-files/syntax/atidentifier_syntax_valid.txt",
"chars": 212,
"preview": "\n# allows valid handles\nXX.LCS.MIT.EDU\njohn.test\njan.test\na234567890123456789.test\njohn2.test\njohn-john.test\n\n# allows v"
},
{
"path": "interop-test-files/syntax/aturi_syntax_invalid.txt",
"chars": 11090,
"preview": "\n# enforces spec basics\na://did:plc:asdf123\nat//did:plc:asdf123\nat:/a/did:plc:asdf123\nat:/did:plc:asdf123\nAT://did:plc:a"
},
{
"path": "interop-test-files/syntax/aturi_syntax_valid.txt",
"chars": 1597,
"preview": "\n# enforces spec basics\nat://did:plc:asdf123\nat://user.bsky.social\nat://did:plc:asdf123/com.atproto.feed.post\nat://did:p"
},
{
"path": "interop-test-files/syntax/datetime_parse_invalid.txt",
"chars": 250,
"preview": "# superficial syntax parses ok, but are not valid datetimes for semantic reasons (eg, \"month zero\")\n1985-00-12T23:20:50."
},
{
"path": "interop-test-files/syntax/datetime_syntax_invalid.txt",
"chars": 1433,
"preview": "\n# subtle changes to: 1985-04-12T23:20:50.123Z\n1985-04-12T23:20:50.123z\n01985-04-12T23:20:50.123Z\n985-04-12T23:20:50.123"
},
{
"path": "interop-test-files/syntax/datetime_syntax_valid.txt",
"chars": 1022,
"preview": "# \"preferred\"\n1985-04-12T23:20:50.123Z\n1985-04-12T23:20:50.000Z\n2000-01-01T00:00:00.000Z\n1985-04-12T23:20:50.123456Z\n198"
},
{
"path": "interop-test-files/syntax/did_syntax_invalid.txt",
"chars": 2757,
"preview": "did\ndidmethodval\nmethod:did:val\ndid:method:\ndidmethod:val\ndid:methodval)\n:did:method:val\ndid.method.val\ndid:method:val:\n"
},
{
"path": "interop-test-files/syntax/did_syntax_valid.txt",
"chars": 827,
"preview": "did:method:val\ndid:method:VAL\ndid:method:val123\ndid:method:123\ndid:method:val-two\ndid:method:val_two\ndid:method:val.two\n"
},
{
"path": "interop-test-files/syntax/handle_syntax_invalid.txt",
"chars": 1201,
"preview": "# throws on invalid handles\ndid:thing.test\ndid:thing\njohn-.test\njohn.0\njohn.-\nxn--bcher-.tld\njohn..test\njo_hn.test\n-john"
},
{
"path": "interop-test-files/syntax/handle_syntax_valid.txt",
"chars": 2101,
"preview": "# allows valid handles\nA.ISI.EDU\nXX.LCS.MIT.EDU\nSRI-NIC.ARPA\njohn.test\njan.test\na234567890123456789.test\njohn2.test\njohn"
},
{
"path": "interop-test-files/syntax/nsid_syntax_invalid.txt",
"chars": 950,
"preview": "# length checks\ncom.oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.foo\ncom.example.ooooooooooooooooooo"
},
{
"path": "interop-test-files/syntax/nsid_syntax_valid.txt",
"chars": 1089,
"preview": "# length checks\ncom.ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.foo\ncom.example.oooooooooooooooooooo"
},
{
"path": "interop-test-files/syntax/recordkey_syntax_invalid.txt",
"chars": 639,
"preview": "# specs\nalpha/beta\n.\n..\n#extra\n@handle\nany space\nany+space\nnumber[3]\nnumber(3)\n\"quote\"\ndHJ1ZQ==\n\n# too long: 'o'.repeat("
},
{
"path": "interop-test-files/syntax/recordkey_syntax_valid.txt",
"chars": 657,
"preview": "# specs\nself\nexample.com\n~1.2-3_\ndHJ1ZQ\n_\nliteral:self\npre:fix\n\n# more corner-cases\n:\n-\n_\n~\n...\nself.\nlang:\n:lang\n\n# ver"
},
{
"path": "interop-test-files/syntax/tid_syntax_invalid.txt",
"chars": 222,
"preview": "\n# not base32\n3jzfcijpj2z21\n0000000000000\n\n# too long/short\n3jzfcijpj2z2aa\n3jzfcijpj2z2\n\n# old dashes syntax not actuall"
},
{
"path": "interop-test-files/syntax/tid_syntax_valid.txt",
"chars": 90,
"preview": "# 13 digits\n# 234567abcdefghijklmnopqrstuvwxyz\n\n3jzfcijpj2z2a\n7777777777777\n3zzzzzzzzzzzz\n"
},
{
"path": "jest.config.js",
"chars": 111,
"preview": "/** @type {import('jest').Config} */\nmodule.exports = {\n projects: ['<rootDir>/packages/*/jest.config.js'],\n}\n"
},
{
"path": "jest.setup.ts",
"chars": 67,
"preview": "import dotenv from 'dotenv'\n\ndotenv.config({ path: './test.env' })\n"
},
{
"path": "lexicons/app/bsky/actor/defs.json",
"chars": 22113,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.actor.defs\",\n \"defs\": {\n \"profileViewBasic\": {\n \"type\": \"object\",\n \"re"
},
{
"path": "lexicons/app/bsky/actor/getPreferences.json",
"chars": 728,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.actor.getPreferences\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descr"
},
{
"path": "lexicons/app/bsky/actor/getProfile.json",
"chars": 723,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.actor.getProfile\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descripti"
},
{
"path": "lexicons/app/bsky/actor/getProfiles.json",
"chars": 878,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.actor.getProfiles\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descript"
},
{
"path": "lexicons/app/bsky/actor/getSuggestions.json",
"chars": 1288,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.actor.getSuggestions\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descr"
},
{
"path": "lexicons/app/bsky/actor/profile.json",
"chars": 1891,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.actor.profile\",\n \"defs\": {\n \"main\": {\n \"type\": \"record\",\n \"description"
},
{
"path": "lexicons/app/bsky/actor/putPreferences.json",
"chars": 528,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.actor.putPreferences\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n \"d"
},
{
"path": "lexicons/app/bsky/actor/searchActors.json",
"chars": 1254,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.actor.searchActors\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descrip"
},
{
"path": "lexicons/app/bsky/actor/searchActorsTypeahead.json",
"chars": 1174,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.actor.searchActorsTypeahead\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n "
},
{
"path": "lexicons/app/bsky/actor/status.json",
"chars": 1130,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.actor.status\",\n \"defs\": {\n \"main\": {\n \"type\": \"record\",\n \"description\""
},
{
"path": "lexicons/app/bsky/ageassurance/begin.json",
"chars": 1451,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.ageassurance.begin\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n \"des"
},
{
"path": "lexicons/app/bsky/ageassurance/defs.json",
"chars": 8618,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.ageassurance.defs\",\n \"defs\": {\n \"access\": {\n \"description\": \"The access lev"
},
{
"path": "lexicons/app/bsky/ageassurance/getConfig.json",
"chars": 379,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.ageassurance.getConfig\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"des"
},
{
"path": "lexicons/app/bsky/ageassurance/getState.json",
"chars": 966,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.ageassurance.getState\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"desc"
},
{
"path": "lexicons/app/bsky/authCreatePosts.json",
"chars": 830,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.authCreatePosts\",\n \"defs\": {\n \"main\": {\n \"type\": \"permission-set\",\n \"t"
},
{
"path": "lexicons/app/bsky/authDeleteContent.json",
"chars": 659,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.authDeleteContent\",\n \"defs\": {\n \"main\": {\n \"type\": \"permission-set\",\n "
},
{
"path": "lexicons/app/bsky/authFullApp.json",
"chars": 5720,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.authFullApp\",\n \"defs\": {\n \"main\": {\n \"type\": \"permission-set\",\n \"title"
},
{
"path": "lexicons/app/bsky/authManageFeedDeclarations.json",
"chars": 504,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.authManageFeedDeclarations\",\n \"defs\": {\n \"main\": {\n \"type\": \"permission-set"
},
{
"path": "lexicons/app/bsky/authManageLabelerService.json",
"chars": 507,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.authManageLabelerService\",\n \"defs\": {\n \"main\": {\n \"type\": \"permission-set\","
},
{
"path": "lexicons/app/bsky/authManageModeration.json",
"chars": 1042,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.authManageModeration\",\n \"defs\": {\n \"main\": {\n \"type\": \"permission-set\",\n "
},
{
"path": "lexicons/app/bsky/authManageNotifications.json",
"chars": 1012,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.authManageNotifications\",\n \"defs\": {\n \"main\": {\n \"type\": \"permission-set\",\n"
},
{
"path": "lexicons/app/bsky/authManageProfile.json",
"chars": 628,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.authManageProfile\",\n \"defs\": {\n \"main\": {\n \"type\": \"permission-set\",\n "
},
{
"path": "lexicons/app/bsky/authViewAll.json",
"chars": 3766,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.authViewAll\",\n \"defs\": {\n \"main\": {\n \"type\": \"permission-set\",\n \"title"
},
{
"path": "lexicons/app/bsky/bookmark/createBookmark.json",
"chars": 782,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.bookmark.createBookmark\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n "
},
{
"path": "lexicons/app/bsky/bookmark/defs.json",
"chars": 1062,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.bookmark.defs\",\n \"defs\": {\n \"bookmark\": {\n \"description\": \"Object used to s"
},
{
"path": "lexicons/app/bsky/bookmark/deleteBookmark.json",
"chars": 717,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.bookmark.deleteBookmark\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n "
},
{
"path": "lexicons/app/bsky/bookmark/getBookmarks.json",
"chars": 955,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.bookmark.getBookmarks\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"desc"
},
{
"path": "lexicons/app/bsky/contact/defs.json",
"chars": 1928,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.contact.defs\",\n \"defs\": {\n \"matchAndContactIndex\": {\n \"description\": \"Assoc"
},
{
"path": "lexicons/app/bsky/contact/dismissMatch.json",
"chars": 945,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.contact.dismissMatch\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n \"d"
},
{
"path": "lexicons/app/bsky/contact/getMatches.json",
"chars": 1223,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.contact.getMatches\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descrip"
},
{
"path": "lexicons/app/bsky/contact/getSyncStatus.json",
"chars": 942,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.contact.getSyncStatus\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"desc"
},
{
"path": "lexicons/app/bsky/contact/importContacts.json",
"chars": 2108,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.contact.importContacts\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n "
},
{
"path": "lexicons/app/bsky/contact/removeData.json",
"chars": 694,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.contact.removeData\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n \"des"
},
{
"path": "lexicons/app/bsky/contact/sendNotification.json",
"chars": 950,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.contact.sendNotification\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n "
},
{
"path": "lexicons/app/bsky/contact/startPhoneVerification.json",
"chars": 1057,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.contact.startPhoneVerification\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\""
},
{
"path": "lexicons/app/bsky/contact/verifyPhone.json",
"chars": 1578,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.contact.verifyPhone\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n \"de"
},
{
"path": "lexicons/app/bsky/draft/createDraft.json",
"chars": 1067,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.draft.createDraft\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n \"desc"
},
{
"path": "lexicons/app/bsky/draft/defs.json",
"chars": 6205,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.draft.defs\",\n \"defs\": {\n \"draftWithId\": {\n \"description\": \"A draft with an "
},
{
"path": "lexicons/app/bsky/draft/deleteDraft.json",
"chars": 480,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.draft.deleteDraft\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n \"desc"
},
{
"path": "lexicons/app/bsky/draft/getDrafts.json",
"chars": 904,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.draft.getDrafts\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descriptio"
},
{
"path": "lexicons/app/bsky/draft/updateDraft.json",
"chars": 726,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.draft.updateDraft\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n \"desc"
},
{
"path": "lexicons/app/bsky/embed/defs.json",
"chars": 448,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.embed.defs\",\n \"defs\": {\n \"aspectRatio\": {\n \"type\": \"object\",\n \"descrip"
},
{
"path": "lexicons/app/bsky/embed/external.json",
"chars": 1314,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.embed.external\",\n \"defs\": {\n \"main\": {\n \"type\": \"object\",\n \"descriptio"
},
{
"path": "lexicons/app/bsky/embed/images.json",
"chars": 2001,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.embed.images\",\n \"description\": \"A set of images embedded in a Bluesky record (eg, a"
},
{
"path": "lexicons/app/bsky/embed/record.json",
"chars": 2942,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.embed.record\",\n \"description\": \"A representation of a record embedded in a Bluesky "
},
{
"path": "lexicons/app/bsky/embed/recordWithMedia.json",
"chars": 1120,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.embed.recordWithMedia\",\n \"description\": \"A representation of a record embedded in a"
},
{
"path": "lexicons/app/bsky/embed/video.json",
"chars": 2123,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.embed.video\",\n \"description\": \"A video embedded in a Bluesky record (eg, a post).\","
},
{
"path": "lexicons/app/bsky/feed/defs.json",
"chars": 11042,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.defs\",\n \"defs\": {\n \"postView\": {\n \"type\": \"object\",\n \"required\": "
},
{
"path": "lexicons/app/bsky/feed/describeFeedGenerator.json",
"chars": 1080,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.describeFeedGenerator\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n "
},
{
"path": "lexicons/app/bsky/feed/generator.json",
"chars": 1719,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.generator\",\n \"defs\": {\n \"main\": {\n \"type\": \"record\",\n \"descriptio"
},
{
"path": "lexicons/app/bsky/feed/getActorFeeds.json",
"chars": 1044,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.getActorFeeds\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descrip"
},
{
"path": "lexicons/app/bsky/feed/getActorLikes.json",
"chars": 1120,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.getActorLikes\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descrip"
},
{
"path": "lexicons/app/bsky/feed/getAuthorFeed.json",
"chars": 1644,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.getAuthorFeed\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descrip"
},
{
"path": "lexicons/app/bsky/feed/getFeed.json",
"chars": 1068,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.getFeed\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"description\":"
},
{
"path": "lexicons/app/bsky/feed/getFeedGenerator.json",
"chars": 1226,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.getFeedGenerator\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"desc"
},
{
"path": "lexicons/app/bsky/feed/getFeedGenerators.json",
"chars": 834,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.getFeedGenerators\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"des"
},
{
"path": "lexicons/app/bsky/feed/getFeedSkeleton.json",
"chars": 1537,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.getFeedSkeleton\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descr"
},
{
"path": "lexicons/app/bsky/feed/getLikes.json",
"chars": 1698,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.getLikes\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"description\""
},
{
"path": "lexicons/app/bsky/feed/getListFeed.json",
"chars": 1200,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.getListFeed\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descripti"
},
{
"path": "lexicons/app/bsky/feed/getPostThread.json",
"chars": 1656,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.getPostThread\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descrip"
},
{
"path": "lexicons/app/bsky/feed/getPosts.json",
"chars": 956,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.getPosts\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"description\""
},
{
"path": "lexicons/app/bsky/feed/getQuotes.json",
"chars": 1398,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.getQuotes\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"description"
},
{
"path": "lexicons/app/bsky/feed/getRepostedBy.json",
"chars": 1418,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.getRepostedBy\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descrip"
},
{
"path": "lexicons/app/bsky/feed/getSuggestedFeeds.json",
"chars": 936,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.getSuggestedFeeds\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"des"
},
{
"path": "lexicons/app/bsky/feed/getTimeline.json",
"chars": 1197,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.getTimeline\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descripti"
},
{
"path": "lexicons/app/bsky/feed/like.json",
"chars": 559,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.like\",\n \"defs\": {\n \"main\": {\n \"type\": \"record\",\n \"description\": \""
},
{
"path": "lexicons/app/bsky/feed/post.json",
"chars": 3295,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.post\",\n \"defs\": {\n \"main\": {\n \"type\": \"record\",\n \"description\": \""
},
{
"path": "lexicons/app/bsky/feed/postgate.json",
"chars": 1514,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.postgate\",\n \"defs\": {\n \"main\": {\n \"type\": \"record\",\n \"key\": \"tid\""
},
{
"path": "lexicons/app/bsky/feed/repost.json",
"chars": 564,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.repost\",\n \"defs\": {\n \"main\": {\n \"description\": \"Record representing a "
},
{
"path": "lexicons/app/bsky/feed/searchPosts.json",
"chars": 4076,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.searchPosts\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descripti"
},
{
"path": "lexicons/app/bsky/feed/sendInteractions.json",
"chars": 864,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.sendInteractions\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n \""
},
{
"path": "lexicons/app/bsky/feed/threadgate.json",
"chars": 2152,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.feed.threadgate\",\n \"defs\": {\n \"main\": {\n \"type\": \"record\",\n \"key\": \"ti"
},
{
"path": "lexicons/app/bsky/graph/block.json",
"chars": 641,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.block\",\n \"defs\": {\n \"main\": {\n \"type\": \"record\",\n \"description\":"
},
{
"path": "lexicons/app/bsky/graph/defs.json",
"chars": 6874,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.defs\",\n \"defs\": {\n \"listViewBasic\": {\n \"type\": \"object\",\n \"requi"
},
{
"path": "lexicons/app/bsky/graph/follow.json",
"chars": 606,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.follow\",\n \"defs\": {\n \"main\": {\n \"type\": \"record\",\n \"description\""
},
{
"path": "lexicons/app/bsky/graph/getActorStarterPacks.json",
"chars": 1035,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.getActorStarterPacks\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n "
},
{
"path": "lexicons/app/bsky/graph/getBlocks.json",
"chars": 941,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.getBlocks\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descriptio"
},
{
"path": "lexicons/app/bsky/graph/getFollowers.json",
"chars": 1159,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.getFollowers\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descrip"
},
{
"path": "lexicons/app/bsky/graph/getFollows.json",
"chars": 1154,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.getFollows\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descripti"
},
{
"path": "lexicons/app/bsky/graph/getKnownFollowers.json",
"chars": 1195,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.getKnownFollowers\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"de"
},
{
"path": "lexicons/app/bsky/graph/getList.json",
"chars": 1202,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.getList\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"description\""
},
{
"path": "lexicons/app/bsky/graph/getListBlocks.json",
"chars": 885,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.getListBlocks\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descri"
},
{
"path": "lexicons/app/bsky/graph/getListMutes.json",
"chars": 899,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.getListMutes\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descrip"
},
{
"path": "lexicons/app/bsky/graph/getLists.json",
"chars": 1376,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.getLists\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"description"
},
{
"path": "lexicons/app/bsky/graph/getListsWithMembership.json",
"chars": 2006,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.getListsWithMembership\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n "
},
{
"path": "lexicons/app/bsky/graph/getMutes.json",
"chars": 943,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.getMutes\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"description"
},
{
"path": "lexicons/app/bsky/graph/getRelationships.json",
"chars": 1571,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.getRelationships\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"des"
},
{
"path": "lexicons/app/bsky/graph/getStarterPack.json",
"chars": 812,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.getStarterPack\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descr"
},
{
"path": "lexicons/app/bsky/graph/getStarterPacks.json",
"chars": 872,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.getStarterPacks\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"desc"
},
{
"path": "lexicons/app/bsky/graph/getStarterPacksWithMembership.json",
"chars": 1700,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.getStarterPacksWithMembership\",\n \"defs\": {\n \"main\": {\n \"type\": \"query"
},
{
"path": "lexicons/app/bsky/graph/getSuggestedFollowsByActor.json",
"chars": 1475,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.getSuggestedFollowsByActor\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n"
},
{
"path": "lexicons/app/bsky/graph/list.json",
"chars": 1451,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.list\",\n \"defs\": {\n \"main\": {\n \"type\": \"record\",\n \"description\": "
},
{
"path": "lexicons/app/bsky/graph/listblock.json",
"chars": 624,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.listblock\",\n \"defs\": {\n \"main\": {\n \"type\": \"record\",\n \"descripti"
},
{
"path": "lexicons/app/bsky/graph/listitem.json",
"chars": 832,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.listitem\",\n \"defs\": {\n \"main\": {\n \"type\": \"record\",\n \"descriptio"
},
{
"path": "lexicons/app/bsky/graph/muteActor.json",
"chars": 506,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.muteActor\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n \"descri"
},
{
"path": "lexicons/app/bsky/graph/muteActorList.json",
"chars": 510,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.muteActorList\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n \"de"
},
{
"path": "lexicons/app/bsky/graph/muteThread.json",
"chars": 524,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.muteThread\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n \"descr"
},
{
"path": "lexicons/app/bsky/graph/searchStarterPacks.json",
"chars": 1231,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.searchStarterPacks\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"d"
},
{
"path": "lexicons/app/bsky/graph/starterpack.json",
"chars": 1418,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.starterpack\",\n \"defs\": {\n \"main\": {\n \"type\": \"record\",\n \"descrip"
},
{
"path": "lexicons/app/bsky/graph/unmuteActor.json",
"chars": 454,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.unmuteActor\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n \"desc"
},
{
"path": "lexicons/app/bsky/graph/unmuteActorList.json",
"chars": 458,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.unmuteActorList\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n \""
},
{
"path": "lexicons/app/bsky/graph/unmuteThread.json",
"chars": 445,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.unmuteThread\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n \"des"
},
{
"path": "lexicons/app/bsky/graph/verification.json",
"chars": 1519,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.graph.verification\",\n \"defs\": {\n \"main\": {\n \"type\": \"record\",\n \"descri"
},
{
"path": "lexicons/app/bsky/labeler/defs.json",
"chars": 3455,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.labeler.defs\",\n \"defs\": {\n \"labelerView\": {\n \"type\": \"object\",\n \"requi"
},
{
"path": "lexicons/app/bsky/labeler/getServices.json",
"chars": 1029,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.labeler.getServices\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descri"
},
{
"path": "lexicons/app/bsky/labeler/service.json",
"chars": 1724,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.labeler.service\",\n \"defs\": {\n \"main\": {\n \"type\": \"record\",\n \"descripti"
},
{
"path": "lexicons/app/bsky/notification/declaration.json",
"chars": 699,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.notification.declaration\",\n \"defs\": {\n \"main\": {\n \"type\": \"record\",\n \""
},
{
"path": "lexicons/app/bsky/notification/defs.json",
"chars": 2749,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.notification.defs\",\n \"defs\": {\n \"recordDeleted\": {\n \"type\": \"object\",\n "
},
{
"path": "lexicons/app/bsky/notification/getPreferences.json",
"chars": 636,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.notification.getPreferences\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n "
},
{
"path": "lexicons/app/bsky/notification/getUnreadCount.json",
"chars": 672,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.notification.getUnreadCount\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n "
},
{
"path": "lexicons/app/bsky/notification/listActivitySubscriptions.json",
"chars": 1005,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.notification.listActivitySubscriptions\",\n \"defs\": {\n \"main\": {\n \"type\": \"qu"
},
{
"path": "lexicons/app/bsky/notification/listNotifications.json",
"chars": 2748,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.notification.listNotifications\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n "
},
{
"path": "lexicons/app/bsky/notification/putActivitySubscription.json",
"chars": 1127,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.notification.putActivitySubscription\",\n \"defs\": {\n \"main\": {\n \"type\": \"proc"
},
{
"path": "lexicons/app/bsky/notification/putPreferences.json",
"chars": 466,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.notification.putPreferences\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n "
},
{
"path": "lexicons/app/bsky/notification/putPreferencesV2.json",
"chars": 2518,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.notification.putPreferencesV2\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\","
},
{
"path": "lexicons/app/bsky/notification/registerPush.json",
"chars": 923,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.notification.registerPush\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n "
},
{
"path": "lexicons/app/bsky/notification/unregisterPush.json",
"chars": 830,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.notification.unregisterPush\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n "
},
{
"path": "lexicons/app/bsky/notification/updateSeen.json",
"chars": 492,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.notification.updateSeen\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n "
},
{
"path": "lexicons/app/bsky/richtext/facet.json",
"chars": 2026,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.richtext.facet\",\n \"defs\": {\n \"main\": {\n \"type\": \"object\",\n \"descriptio"
},
{
"path": "lexicons/app/bsky/unspecced/defs.json",
"chars": 6071,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.defs\",\n \"defs\": {\n \"skeletonSearchPost\": {\n \"type\": \"object\",\n "
},
{
"path": "lexicons/app/bsky/unspecced/getAgeAssuranceState.json",
"chars": 503,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getAgeAssuranceState\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n "
},
{
"path": "lexicons/app/bsky/unspecced/getConfig.json",
"chars": 862,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getConfig\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descri"
},
{
"path": "lexicons/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.json",
"chars": 864,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getOnboardingSuggestedStarterPacks\",\n \"defs\": {\n \"main\": {\n \"type"
},
{
"path": "lexicons/app/bsky/unspecced/getOnboardingSuggestedStarterPacksSkeleton.json",
"chars": 1158,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getOnboardingSuggestedStarterPacksSkeleton\",\n \"defs\": {\n \"main\": {\n "
},
{
"path": "lexicons/app/bsky/unspecced/getOnboardingSuggestedUsersSkeleton.json",
"chars": 1573,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getOnboardingSuggestedUsersSkeleton\",\n \"defs\": {\n \"main\": {\n \"typ"
},
{
"path": "lexicons/app/bsky/unspecced/getPopularFeedGenerators.json",
"chars": 968,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getPopularFeedGenerators\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\""
},
{
"path": "lexicons/app/bsky/unspecced/getPostThreadOtherV2.json",
"chars": 2087,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getPostThreadOtherV2\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n "
},
{
"path": "lexicons/app/bsky/unspecced/getPostThreadV2.json",
"chars": 3731,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getPostThreadV2\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \""
},
{
"path": "lexicons/app/bsky/unspecced/getSuggestedFeeds.json",
"chars": 808,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getSuggestedFeeds\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n "
},
{
"path": "lexicons/app/bsky/unspecced/getSuggestedFeedsSkeleton.json",
"chars": 1088,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getSuggestedFeedsSkeleton\",\n \"defs\": {\n \"main\": {\n \"type\": \"query"
},
{
"path": "lexicons/app/bsky/unspecced/getSuggestedOnboardingUsers.json",
"chars": 1289,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getSuggestedOnboardingUsers\",\n \"defs\": {\n \"main\": {\n \"type\": \"que"
},
{
"path": "lexicons/app/bsky/unspecced/getSuggestedStarterPacks.json",
"chars": 839,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getSuggestedStarterPacks\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\""
},
{
"path": "lexicons/app/bsky/unspecced/getSuggestedStarterPacksSkeleton.json",
"chars": 1123,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getSuggestedStarterPacksSkeleton\",\n \"defs\": {\n \"main\": {\n \"type\":"
},
{
"path": "lexicons/app/bsky/unspecced/getSuggestedUsers.json",
"chars": 1264,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getSuggestedUsers\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n "
},
{
"path": "lexicons/app/bsky/unspecced/getSuggestedUsersSkeleton.json",
"chars": 1538,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getSuggestedUsersSkeleton\",\n \"defs\": {\n \"main\": {\n \"type\": \"query"
},
{
"path": "lexicons/app/bsky/unspecced/getSuggestionsSkeleton.json",
"chars": 2072,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getSuggestionsSkeleton\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n"
},
{
"path": "lexicons/app/bsky/unspecced/getTaggedSuggestions.json",
"chars": 1022,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getTaggedSuggestions\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n "
},
{
"path": "lexicons/app/bsky/unspecced/getTrendingTopics.json",
"chars": 1292,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getTrendingTopics\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n "
},
{
"path": "lexicons/app/bsky/unspecced/getTrends.json",
"chars": 811,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getTrends\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n \"descri"
},
{
"path": "lexicons/app/bsky/unspecced/getTrendsSkeleton.json",
"chars": 1117,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.getTrendsSkeleton\",\n \"defs\": {\n \"main\": {\n \"type\": \"query\",\n "
},
{
"path": "lexicons/app/bsky/unspecced/initAgeAssurance.json",
"chars": 1317,
"preview": "{\n \"lexicon\": 1,\n \"id\": \"app.bsky.unspecced.initAgeAssurance\",\n \"defs\": {\n \"main\": {\n \"type\": \"procedure\",\n "
}
]
// ... and 4061 more files (download for full content)
About this extraction
This page contains the full source code of the bluesky-social/atproto GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 4261 files (16.8 MB), approximately 4.6M tokens, and a symbol index with 21717 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.