···2. "$(dirname -- "$0")/_/husky.sh"
34# Run tests before commit
5-npm run test -w @tylex/emitter
···2. "$(dirname -- "$0")/_/husky.sh"
34# Run tests before commit
5+npm run test -w @typelex/emitter
+1-1
CLAUDE.md
···1you're working on a TypeSpec emitter for atproto lexicons. you have these commands: `pnpm run build` builds the example (you can inspect the generated lexicons in the `packages/example/lexicon`) and `pnpm test` runs tests (they are in `packages/emitter/test/`).
23-what i want you to do is to gradually keep adding features to tylex so that in the end it's possible to express all Lexicon code with that language. you have the following resources:
45- read `SYNTAX.md`!!! it's the main guideline
6
···1you're working on a TypeSpec emitter for atproto lexicons. you have these commands: `pnpm run build` builds the example (you can inspect the generated lexicons in the `packages/example/lexicon`) and `pnpm test` runs tests (they are in `packages/emitter/test/`).
23+what i want you to do is to gradually keep adding features to typelex so that in the end it's possible to express all Lexicon code with that language. you have the following resources:
45- read `SYNTAX.md`!!! it's the main guideline
6
+2-2
DOCS.md
···1# TypeSpec to Lexicon Reference
23-This guide maps atproto Lexicon JSON syntax to TypeSpec (Tylex). It assumes you're familiar with Lexicon and want to understand how to express it in TypeSpec.
45## Quick Start
67Every TypeSpec file starts with an import and namespace:
89```typescript
10-import "@tylex/emitter";
1112/** Common definitions used by other lexicons */
13namespace com.example.defs {
···1# TypeSpec to Lexicon Reference
23+This guide maps atproto Lexicon JSON syntax to TypeSpec (typelex). It assumes you're familiar with Lexicon and want to understand how to express it in TypeSpec.
45## Quick Start
67Every TypeSpec file starts with an import and namespace:
89```typescript
10+import "@typelex/emitter";
1112/** Common definitions used by other lexicons */
13namespace com.example.defs {
+1-1
LICENSE
···1MIT License
23-Copyright (c) 2024 tylex Contributors
45Permission is hereby granted, free of charge, to any person obtaining a copy
6of this software and associated documentation files (the "Software"), to deal
···1MIT License
23+Copyright (c) 2024 typelex Contributors
45Permission is hereby granted, free of charge, to any person obtaining a copy
6of this software and associated documentation files (the "Software"), to deal
+10-10
README.md
···1-# tylex
23> TypeSpec-based IDL for ATProto Lexicons
45-tylex allows you to define [ATProto](https://atproto.com) lexicons using [TypeSpec](https://typespec.io), providing type safety, better tooling, and a more ergonomic syntax compared to writing raw JSON.
67## Features
8···17# Install TypeSpec compiler
18npm install -g @typespec/compiler
1920-# Install tylex emitter
21-npm install --save-dev @tylex/emitter
22```
2324Create a `main.tsp` file:
···4344```yaml
45emit:
46- - "@tylex/emitter"
47options:
48- "@tylex/emitter":
49 output-dir: "./lexicons"
50```
51···5758## Output
5960-tylex generates standard ATProto lexicon files:
6162```json
63{
···102103```bash
104# Clone the repository
105-git clone https://github.com/yourusername/tylex.git
106-cd tylex
107108# Build the emitter
109pnpm install
···115116## Current Status
117118-⚠️ **Early Development** - tylex currently supports basic record types. Support for queries, procedures, and subscriptions is coming soon.
119120### Supported
121
···1+# typelex
23> TypeSpec-based IDL for ATProto Lexicons
45+typelex allows you to define [ATProto](https://atproto.com) lexicons using [TypeSpec](https://typespec.io), providing type safety, better tooling, and a more ergonomic syntax compared to writing raw JSON.
67## Features
8···17# Install TypeSpec compiler
18npm install -g @typespec/compiler
1920+# Install typelex emitter
21+npm install --save-dev @typelex/emitter
22```
2324Create a `main.tsp` file:
···4344```yaml
45emit:
46+ - "@typelex/emitter"
47options:
48+ "@typelex/emitter":
49 output-dir: "./lexicons"
50```
51···5758## Output
5960+typelex generates standard ATProto lexicon files:
6162```json
63{
···102103```bash
104# Clone the repository
105+git clone https://github.com/yourusername/typelex.git
106+cd typelex
107108# Build the emitter
109pnpm install
···115116## Current Status
117118+⚠️ **Early Development** - typelex currently supports basic record types. Support for queries, procedures, and subscriptions is coming soon.
119120### Supported
121
···1import "../dist/tsp-index.js";
23/**
4- * Private decorators for internal use by the Tylex emitter.
5 * These are not intended for direct use in user code.
6 */
7-namespace Tylex.Private;
···1import "../dist/tsp-index.js";
23/**
4+ * Private decorators for internal use by the Typelex emitter.
5 * These are not intended for direct use in user code.
6 */
7+namespace Typelex.Private;
···1-import "@tylex/emitter";
23namespace app.bsky.actor.getPreferences {
4 @doc("Get private preferences attached to the current account. Expected use is synchronization between multiple devices, and import/export during account migration. Requires auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.actor.getPreferences {
4 @doc("Get private preferences attached to the current account. Expected use is synchronization between multiple devices, and import/export during account migration. Requires auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.actor.getProfile {
4 @doc("Get detailed profile view of an actor. Does not require auth, but contains relevant metadata with auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.actor.getProfile {
4 @doc("Get detailed profile view of an actor. Does not require auth, but contains relevant metadata with auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.actor.getSuggestions {
4 @doc("Get a list of suggested actors. Expected use is discovery of accounts to follow during new account onboarding.")
···1+import "@typelex/emitter";
23namespace app.bsky.actor.getSuggestions {
4 @doc("Get a list of suggested actors. Expected use is discovery of accounts to follow during new account onboarding.")
···1-import "@tylex/emitter";
23namespace app.bsky.actor.searchActorsTypeahead {
4 @doc("Find actor suggestions for a prefix search term. Expected use is for auto-completion during text field entry. Does not require auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.actor.searchActorsTypeahead {
4 @doc("Find actor suggestions for a prefix search term. Expected use is for auto-completion during text field entry. Does not require auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.bookmark.createBookmark {
4 @doc("Creates a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication.")
···1+import "@typelex/emitter";
23namespace app.bsky.bookmark.createBookmark {
4 @doc("Creates a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication.")
···1-import "@tylex/emitter";
23namespace app.bsky.bookmark.deleteBookmark {
4 @doc("Deletes a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication.")
···1+import "@typelex/emitter";
23namespace app.bsky.bookmark.deleteBookmark {
4 @doc("Deletes a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication.")
···1-import "@tylex/emitter";
23namespace app.bsky.bookmark.getBookmarks {
4 @doc("Gets views of records bookmarked by the authenticated user. Requires authentication.")
···1+import "@typelex/emitter";
23namespace app.bsky.bookmark.getBookmarks {
4 @doc("Gets views of records bookmarked by the authenticated user. Requires authentication.")
···1-import "@tylex/emitter";
23namespace app.bsky.embed.defs {
4 // Description goes on the model for defs, unlike standalone lexicons where it goes at lexicon level
···1+import "@typelex/emitter";
23namespace app.bsky.embed.defs {
4 // Description goes on the model for defs, unlike standalone lexicons where it goes at lexicon level
···1-import "@tylex/emitter";
23namespace app.bsky.embed.external {
4 @doc("A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post).")
···1+import "@typelex/emitter";
23namespace app.bsky.embed.external {
4 @doc("A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post).")
···1-import "@tylex/emitter";
23@doc("A representation of a record embedded in a Bluesky record (eg, a post). For example, a quote-post, or sharing a feed generator record.")
4namespace app.bsky.embed.`record` {
···1+import "@typelex/emitter";
23@doc("A representation of a record embedded in a Bluesky record (eg, a post). For example, a quote-post, or sharing a feed generator record.")
4namespace app.bsky.embed.`record` {
···1-import "@tylex/emitter";
23@doc("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.")
4namespace app.bsky.embed.recordWithMedia {
···1+import "@typelex/emitter";
23@doc("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.")
4namespace app.bsky.embed.recordWithMedia {
···1-import "@tylex/emitter";
23namespace app.bsky.feed.describeFeedGenerator {
4 @doc("Get information about a feed generator, including policies and offered feed URIs. Does not require auth; implemented by Feed Generator services (not App View).")
···1+import "@typelex/emitter";
23namespace app.bsky.feed.describeFeedGenerator {
4 @doc("Get information about a feed generator, including policies and offered feed URIs. Does not require auth; implemented by Feed Generator services (not App View).")
···1-import "@tylex/emitter";
23namespace app.bsky.feed.generator {
4 @doc("Record declaring of the existence of a feed generator, and containing metadata about it. The record can exist in any repository.")
···1+import "@typelex/emitter";
23namespace app.bsky.feed.generator {
4 @doc("Record declaring of the existence of a feed generator, and containing metadata about it. The record can exist in any repository.")
···1-import "@tylex/emitter";
23namespace app.bsky.feed.getActorFeeds {
4 @doc("Get a list of feeds (feed generator records) created by the actor (in the actor's repo).")
···1+import "@typelex/emitter";
23namespace app.bsky.feed.getActorFeeds {
4 @doc("Get a list of feeds (feed generator records) created by the actor (in the actor's repo).")
···1-import "@tylex/emitter";
23namespace app.bsky.feed.getPosts {
4 @doc("Gets post views for a specified list of posts (by AT-URI). This is sometimes referred to as 'hydrating' a 'feed skeleton'.")
···1+import "@typelex/emitter";
23namespace app.bsky.feed.getPosts {
4 @doc("Gets post views for a specified list of posts (by AT-URI). This is sometimes referred to as 'hydrating' a 'feed skeleton'.")
···1-import "@tylex/emitter";
23namespace app.bsky.feed.getSuggestedFeeds {
4 @doc("Get a list of suggested feeds (feed generators) for the requesting account.")
···1+import "@typelex/emitter";
23namespace app.bsky.feed.getSuggestedFeeds {
4 @doc("Get a list of suggested feeds (feed generators) for the requesting account.")
···1-import "@tylex/emitter";
23namespace app.bsky.feed.getTimeline {
4 @doc("Get a view of the requesting account's home timeline. This is expected to be some form of reverse-chronological feed.")
···1+import "@typelex/emitter";
23namespace app.bsky.feed.getTimeline {
4 @doc("Get a view of the requesting account's home timeline. This is expected to be some form of reverse-chronological feed.")
···1-import "@tylex/emitter";
23namespace app.bsky.feed.sendInteractions {
4 @doc("Send information about interactions with feed items back to the feed generator that served them.")
···1+import "@typelex/emitter";
23namespace app.bsky.feed.sendInteractions {
4 @doc("Send information about interactions with feed items back to the feed generator that served them.")
···1-import "@tylex/emitter";
23namespace app.bsky.graph.getBlocks {
4 @doc("Enumerates which accounts the requesting account is currently blocking. Requires auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.graph.getBlocks {
4 @doc("Enumerates which accounts the requesting account is currently blocking. Requires auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.graph.getKnownFollowers {
4 @doc("Enumerates accounts which follow a specified account (actor) and are followed by the viewer.")
···1+import "@typelex/emitter";
23namespace app.bsky.graph.getKnownFollowers {
4 @doc("Enumerates accounts which follow a specified account (actor) and are followed by the viewer.")
···1-import "@tylex/emitter";
23namespace app.bsky.graph.getListBlocks {
4 @doc("Get mod lists that the requesting account (actor) is blocking. Requires auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.graph.getListBlocks {
4 @doc("Get mod lists that the requesting account (actor) is blocking. Requires auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.graph.getListMutes {
4 @doc("Enumerates mod lists that the requesting account (actor) currently has muted. Requires auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.graph.getListMutes {
4 @doc("Enumerates mod lists that the requesting account (actor) currently has muted. Requires auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.graph.getListsWithMembership {
4 @doc("Enumerates the lists created by the session user, and includes membership information about `actor` in those lists. Only supports curation and moderation lists (no reference lists, used in starter packs). Requires auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.graph.getListsWithMembership {
4 @doc("Enumerates the lists created by the session user, and includes membership information about `actor` in those lists. Only supports curation and moderation lists (no reference lists, used in starter packs). Requires auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.graph.getMutes {
4 @doc("Enumerates accounts that the requesting account (actor) currently has muted. Requires auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.graph.getMutes {
4 @doc("Enumerates accounts that the requesting account (actor) currently has muted. Requires auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.graph.getRelationships {
4 @doc("Enumerates public relationships between one account, and a list of other accounts. Does not require auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.graph.getRelationships {
4 @doc("Enumerates public relationships between one account, and a list of other accounts. Does not require auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.graph.getStarterPacksWithMembership {
4 @doc("Enumerates the starter packs created by the session user, and includes membership information about `actor` in those starter packs. Requires auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.graph.getStarterPacksWithMembership {
4 @doc("Enumerates the starter packs created by the session user, and includes membership information about `actor` in those starter packs. Requires auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.graph.getSuggestedFollowsByActor {
4 @doc("Enumerates follows similar to a given account (actor). Expected use is to recommend additional accounts immediately after following one account.")
···1+import "@typelex/emitter";
23namespace app.bsky.graph.getSuggestedFollowsByActor {
4 @doc("Enumerates follows similar to a given account (actor). Expected use is to recommend additional accounts immediately after following one account.")
···1-import "@tylex/emitter";
23namespace app.bsky.graph.list {
4 @doc("Record representing a list of accounts (actors). Scope includes both moderation-oriented lists and curration-oriented lists.")
···1+import "@typelex/emitter";
23namespace app.bsky.graph.list {
4 @doc("Record representing a list of accounts (actors). Scope includes both moderation-oriented lists and curration-oriented lists.")
···1-import "@tylex/emitter";
23namespace app.bsky.graph.muteActor {
4 @doc("Creates a mute relationship for the specified account. Mutes are private in Bluesky. Requires auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.graph.muteActor {
4 @doc("Creates a mute relationship for the specified account. Mutes are private in Bluesky. Requires auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.graph.muteActorList {
4 @doc("Creates a mute relationship for the specified list of accounts. Mutes are private in Bluesky. Requires auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.graph.muteActorList {
4 @doc("Creates a mute relationship for the specified list of accounts. Mutes are private in Bluesky. Requires auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.graph.muteThread {
4 @doc("Mutes a thread preventing notifications from the thread and any of its children. Mutes are private in Bluesky. Requires auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.graph.muteThread {
4 @doc("Mutes a thread preventing notifications from the thread and any of its children. Mutes are private in Bluesky. Requires auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.notification.getUnreadCount {
4 @doc("Count the number of unread notifications for the requesting account. Requires auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.notification.getUnreadCount {
4 @doc("Count the number of unread notifications for the requesting account. Requires auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.notification.listActivitySubscriptions {
4 @doc("Enumerate all accounts to which the requesting account is subscribed to receive notifications for. Requires auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.notification.listActivitySubscriptions {
4 @doc("Enumerate all accounts to which the requesting account is subscribed to receive notifications for. Requires auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.notification.putActivitySubscription {
4 @doc("Puts an activity subscription entry. The key should be omitted for creation and provided for updates. Requires auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.notification.putActivitySubscription {
4 @doc("Puts an activity subscription entry. The key should be omitted for creation and provided for updates. Requires auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.notification.registerPush {
4 @doc("Register to receive push notifications, via a specified service, for the requesting account. Requires auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.notification.registerPush {
4 @doc("Register to receive push notifications, via a specified service, for the requesting account. Requires auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.notification.unregisterPush {
4 @doc("The inverse of registerPush - inform a specified service that push notifications should no longer be sent to the given token for the requesting account. Requires auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.notification.unregisterPush {
4 @doc("The inverse of registerPush - inform a specified service that push notifications should no longer be sent to the given token for the requesting account. Requires auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.notification.updateSeen {
4 @doc("Notify server that the requesting account has seen notifications. Requires auth.")
···1+import "@typelex/emitter";
23namespace app.bsky.notification.updateSeen {
4 @doc("Notify server that the requesting account has seen notifications. Requires auth.")
···1-import "@tylex/emitter";
23namespace app.bsky.unspecced.getAgeAssuranceState {
4 @doc("Returns the current state of the age assurance process for an account. This is used to check if the user has completed age assurance or if further action is required.")
···1+import "@typelex/emitter";
23namespace app.bsky.unspecced.getAgeAssuranceState {
4 @doc("Returns the current state of the age assurance process for an account. This is used to check if the user has completed age assurance or if further action is required.")
···1-import "@tylex/emitter";
23namespace app.bsky.unspecced.getOnboardingSuggestedStarterPacks {
4 @doc("Get a list of suggested starterpacks for onboarding")
···1+import "@typelex/emitter";
23namespace app.bsky.unspecced.getOnboardingSuggestedStarterPacks {
4 @doc("Get a list of suggested starterpacks for onboarding")
···1-import "@tylex/emitter";
23namespace app.bsky.unspecced.getOnboardingSuggestedStarterPacksSkeleton {
4 @doc("Get a skeleton of suggested starterpacks for onboarding. Intended to be called and hydrated by app.bsky.unspecced.getOnboardingSuggestedStarterPacks")
···1+import "@typelex/emitter";
23namespace app.bsky.unspecced.getOnboardingSuggestedStarterPacksSkeleton {
4 @doc("Get a skeleton of suggested starterpacks for onboarding. Intended to be called and hydrated by app.bsky.unspecced.getOnboardingSuggestedStarterPacks")
···1-import "@tylex/emitter";
23namespace app.bsky.unspecced.getPostThreadOtherV2 {
4 @doc("(NOTE: this endpoint is under development and WILL change without notice. Don't use it until it is moved out of `unspecced` or your application WILL break) Get additional posts under a thread e.g. replies hidden by threadgate. Based on an anchor post at any depth of the tree, returns top-level replies below that anchor. It does not include ancestors nor the anchor itself. This should be called after exhausting `app.bsky.unspecced.getPostThreadV2`. Does not require auth, but additional metadata and filtering will be applied for authed requests.")
···1+import "@typelex/emitter";
23namespace app.bsky.unspecced.getPostThreadOtherV2 {
4 @doc("(NOTE: this endpoint is under development and WILL change without notice. Don't use it until it is moved out of `unspecced` or your application WILL break) Get additional posts under a thread e.g. replies hidden by threadgate. Based on an anchor post at any depth of the tree, returns top-level replies below that anchor. It does not include ancestors nor the anchor itself. This should be called after exhausting `app.bsky.unspecced.getPostThreadV2`. Does not require auth, but additional metadata and filtering will be applied for authed requests.")
···1-import "@tylex/emitter";
23namespace app.bsky.unspecced.getPostThreadV2 {
4 @doc("(NOTE: this endpoint is under development and WILL change without notice. Don't use it until it is moved out of `unspecced` or your application WILL break) Get posts in a thread. It is based in an anchor post at any depth of the tree, and returns posts above it (recursively resolving the parent, without further branching to their replies) and below it (recursive replies, with branching to their replies). Does not require auth, but additional metadata and filtering will be applied for authed requests.")
···1+import "@typelex/emitter";
23namespace app.bsky.unspecced.getPostThreadV2 {
4 @doc("(NOTE: this endpoint is under development and WILL change without notice. Don't use it until it is moved out of `unspecced` or your application WILL break) Get posts in a thread. It is based in an anchor post at any depth of the tree, and returns posts above it (recursively resolving the parent, without further branching to their replies) and below it (recursive replies, with branching to their replies). Does not require auth, but additional metadata and filtering will be applied for authed requests.")
···1-import "@tylex/emitter";
23namespace app.bsky.unspecced.getSuggestedFeedsSkeleton {
4 @doc("Get a skeleton of suggested feeds. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedFeeds")
···1+import "@typelex/emitter";
23namespace app.bsky.unspecced.getSuggestedFeedsSkeleton {
4 @doc("Get a skeleton of suggested feeds. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedFeeds")
···1-import "@tylex/emitter";
23namespace app.bsky.unspecced.getSuggestedStarterPacksSkeleton {
4 @doc("Get a skeleton of suggested starterpacks. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedStarterpacks")
···1+import "@typelex/emitter";
23namespace app.bsky.unspecced.getSuggestedStarterPacksSkeleton {
4 @doc("Get a skeleton of suggested starterpacks. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedStarterpacks")
···1-import "@tylex/emitter";
23namespace app.bsky.unspecced.getSuggestedUsersSkeleton {
4 @doc("Get a skeleton of suggested users. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedUsers")
···1+import "@typelex/emitter";
23namespace app.bsky.unspecced.getSuggestedUsersSkeleton {
4 @doc("Get a skeleton of suggested users. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedUsers")
···1-import "@tylex/emitter";
23namespace app.bsky.unspecced.getSuggestionsSkeleton {
4 @doc("Get a skeleton of suggested actors. Intended to be called and then hydrated through app.bsky.actor.getSuggestions")
···1+import "@typelex/emitter";
23namespace app.bsky.unspecced.getSuggestionsSkeleton {
4 @doc("Get a skeleton of suggested actors. Intended to be called and then hydrated through app.bsky.actor.getSuggestions")
···1-import "@tylex/emitter";
23namespace app.bsky.unspecced.getTaggedSuggestions {
4 @doc("Get a list of suggestions (feeds and users) tagged with categories")
···1+import "@typelex/emitter";
23namespace app.bsky.unspecced.getTaggedSuggestions {
4 @doc("Get a list of suggestions (feeds and users) tagged with categories")
···1-import "@tylex/emitter";
23namespace app.bsky.unspecced.getTrendsSkeleton {
4 @doc("Get the skeleton of trends on the network. Intended to be called and then hydrated through app.bsky.unspecced.getTrends")
···1+import "@typelex/emitter";
23namespace app.bsky.unspecced.getTrendsSkeleton {
4 @doc("Get the skeleton of trends on the network. Intended to be called and then hydrated through app.bsky.unspecced.getTrends")
···1-import "@tylex/emitter";
23namespace chat.bsky.convo.addReaction {
4 @doc("Indicates that the message has been deleted and reactions can no longer be added/removed.")
···1+import "@typelex/emitter";
23namespace chat.bsky.convo.addReaction {
4 @doc("Indicates that the message has been deleted and reactions can no longer be added/removed.")
···1-import "@tylex/emitter";
23namespace chat.bsky.convo.getConvoAvailability {
4 @doc("Get whether the requester and the other members can chat. If an existing convo is found for these members, it is returned.")
···1+import "@typelex/emitter";
23namespace chat.bsky.convo.getConvoAvailability {
4 @doc("Get whether the requester and the other members can chat. If an existing convo is found for these members, it is returned.")
···1-import "@tylex/emitter";
23namespace chat.bsky.convo.removeReaction {
4 @doc("Indicates that the message has been deleted and reactions can no longer be added/removed.")
···1+import "@typelex/emitter";
23namespace chat.bsky.convo.removeReaction {
4 @doc("Indicates that the message has been deleted and reactions can no longer be added/removed.")
···1-import "@tylex/emitter";
23namespace com.atproto.admin.disableAccountInvites {
4 @doc("Disable an account from receiving new invite codes, but does not invalidate existing codes.")
···1+import "@typelex/emitter";
23namespace com.atproto.admin.disableAccountInvites {
4 @doc("Disable an account from receiving new invite codes, but does not invalidate existing codes.")
···1-import "@tylex/emitter";
23namespace com.atproto.admin.disableInviteCodes {
4 @doc("Disable some set of codes and/or all codes associated with a set of users.")
···1+import "@typelex/emitter";
23namespace com.atproto.admin.disableInviteCodes {
4 @doc("Disable some set of codes and/or all codes associated with a set of users.")
···1-import "@tylex/emitter";
23namespace com.atproto.admin.getSubjectStatus {
4 @doc("Get the service-specific admin status of a subject (account, record, or blob).")
···1+import "@typelex/emitter";
23namespace com.atproto.admin.getSubjectStatus {
4 @doc("Get the service-specific admin status of a subject (account, record, or blob).")
···1-import "@tylex/emitter";
23namespace com.atproto.admin.updateAccountPassword {
4 @doc("Update the password for a user account as an administrator.")
···1+import "@typelex/emitter";
23namespace com.atproto.admin.updateAccountPassword {
4 @doc("Update the password for a user account as an administrator.")
···1-import "@tylex/emitter";
23namespace com.atproto.admin.updateAccountSigningKey {
4 @doc("Administrative action to update an account's signing key in their Did document.")
···1+import "@typelex/emitter";
23namespace com.atproto.admin.updateAccountSigningKey {
4 @doc("Administrative action to update an account's signing key in their Did document.")
···1-import "@tylex/emitter";
23namespace com.atproto.admin.updateSubjectStatus {
4 @doc("Update the service-specific admin status of a subject (account, record, or blob).")
···1+import "@typelex/emitter";
23namespace com.atproto.admin.updateSubjectStatus {
4 @doc("Update the service-specific admin status of a subject (account, record, or blob).")
···1-import "@tylex/emitter";
23namespace com.atproto.identity.getRecommendedDidCredentials {
4 @doc("Describe the credentials that should be included in the DID doc of an account that is migrating to this service.")
···1+import "@typelex/emitter";
23namespace com.atproto.identity.getRecommendedDidCredentials {
4 @doc("Describe the credentials that should be included in the DID doc of an account that is migrating to this service.")
···1-import "@tylex/emitter";
23namespace com.atproto.identity.refreshIdentity {
4 @doc("The resolution process confirmed that the handle does not resolve to any DID.")
···1+import "@typelex/emitter";
23namespace com.atproto.identity.refreshIdentity {
4 @doc("The resolution process confirmed that the handle does not resolve to any DID.")
···1-import "@tylex/emitter";
23namespace com.atproto.identity.requestPlcOperationSignature {
4 @doc("Request an email with a code to in order to request a signed PLC operation. Requires Auth.")
···1+import "@typelex/emitter";
23namespace com.atproto.identity.requestPlcOperationSignature {
4 @doc("Request an email with a code to in order to request a signed PLC operation. Requires Auth.")
···1-import "@tylex/emitter";
23namespace com.atproto.identity.resolveDid {
4 @doc("Resolves DID to DID document. Does not bi-directionally verify handle.")
···1+import "@typelex/emitter";
23namespace com.atproto.identity.resolveDid {
4 @doc("Resolves DID to DID document. Does not bi-directionally verify handle.")
···1-import "@tylex/emitter";
23namespace com.atproto.identity.resolveHandle {
4 @doc("Resolves an atproto handle (hostname) to a DID. Does not necessarily bi-directionally verify against the the DID document.")
···1+import "@typelex/emitter";
23namespace com.atproto.identity.resolveHandle {
4 @doc("Resolves an atproto handle (hostname) to a DID. Does not necessarily bi-directionally verify against the the DID document.")
···1-import "@tylex/emitter";
23namespace com.atproto.identity.resolveIdentity {
4 @doc("The resolution process confirmed that the handle does not resolve to any DID.")
···1+import "@typelex/emitter";
23namespace com.atproto.identity.resolveIdentity {
4 @doc("The resolution process confirmed that the handle does not resolve to any DID.")
···1-import "@tylex/emitter";
23namespace com.atproto.identity.signPlcOperation {
4 @doc("Signs a PLC operation to update some value(s) in the requesting DID's document.")
···1+import "@typelex/emitter";
23namespace com.atproto.identity.signPlcOperation {
4 @doc("Signs a PLC operation to update some value(s) in the requesting DID's document.")
···1-import "@tylex/emitter";
23namespace com.atproto.identity.submitPlcOperation {
4 @doc("Validates a PLC operation to ensure that it doesn't violate a service's constraints or get the identity into a bad state, then submits it to the PLC registry")
···1+import "@typelex/emitter";
23namespace com.atproto.identity.submitPlcOperation {
4 @doc("Validates a PLC operation to ensure that it doesn't violate a service's constraints or get the identity into a bad state, then submits it to the PLC registry")
···1-import "@tylex/emitter";
23namespace com.atproto.identity.updateHandle {
4 @doc("Updates the current account's handle. Verifies handle validity, and updates did:plc document if necessary. Implemented by PDS, and requires auth.")
···1+import "@typelex/emitter";
23namespace com.atproto.identity.updateHandle {
4 @doc("Updates the current account's handle. Verifies handle validity, and updates did:plc document if necessary. Implemented by PDS, and requires auth.")
···1-import "@tylex/emitter";
23namespace com.atproto.label.queryLabels {
4 @doc("Find labels relevant to the provided AT-URI patterns. Public endpoint for moderation services, though may return different or additional results with auth.")
···1+import "@typelex/emitter";
23namespace com.atproto.label.queryLabels {
4 @doc("Find labels relevant to the provided AT-URI patterns. Public endpoint for moderation services, though may return different or additional results with auth.")
···1-import "@tylex/emitter";
23namespace com.atproto.lexicon.schema {
4 @doc("Representation of Lexicon schemas themselves, when published as atproto records. Note that the schema language is not defined in Lexicon; this meta schema currently only includes a single version field ('lexicon'). See the atproto specifications for description of the other expected top-level fields ('id', 'defs', etc).")
···1+import "@typelex/emitter";
23namespace com.atproto.lexicon.schema {
4 @doc("Representation of Lexicon schemas themselves, when published as atproto records. Note that the schema language is not defined in Lexicon; this meta schema currently only includes a single version field ('lexicon'). See the atproto specifications for description of the other expected top-level fields ('id', 'defs', etc).")
···1-import "@tylex/emitter";
23namespace com.atproto.repo.applyWrites {
4 @doc("Indicates that the 'swapCommit' parameter did not match current commit.")
···1+import "@typelex/emitter";
23namespace com.atproto.repo.applyWrites {
4 @doc("Indicates that the 'swapCommit' parameter did not match current commit.")
···1-import "@tylex/emitter";
23namespace com.atproto.repo.createRecord {
4 @doc("Create a single new repository record. Requires auth, implemented by PDS.")
···1+import "@typelex/emitter";
23namespace com.atproto.repo.createRecord {
4 @doc("Create a single new repository record. Requires auth, implemented by PDS.")
···1-import "@tylex/emitter";
23namespace com.atproto.repo.deleteRecord {
4 @doc("Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS.")
···1+import "@typelex/emitter";
23namespace com.atproto.repo.deleteRecord {
4 @doc("Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS.")
···1-import "@tylex/emitter";
23namespace com.atproto.repo.describeRepo {
4 @doc("Get information about an account and repository, including the list of collections. Does not require auth.")
···1+import "@typelex/emitter";
23namespace com.atproto.repo.describeRepo {
4 @doc("Get information about an account and repository, including the list of collections. Does not require auth.")
···1-import "@tylex/emitter";
23namespace com.atproto.repo.importRepo {
4 @doc("Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set.")
···1+import "@typelex/emitter";
23namespace com.atproto.repo.importRepo {
4 @doc("Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set.")
···1-import "@tylex/emitter";
23namespace com.atproto.repo.listMissingBlobs {
4 @doc("Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow.")
···1+import "@typelex/emitter";
23namespace com.atproto.repo.listMissingBlobs {
4 @doc("Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow.")
···1-import "@tylex/emitter";
23namespace com.atproto.repo.listRecords {
4 @doc("List a range of records in a repository, matching a specific collection. Does not require auth.")
···1+import "@typelex/emitter";
23namespace com.atproto.repo.listRecords {
4 @doc("List a range of records in a repository, matching a specific collection. Does not require auth.")
···1-import "@tylex/emitter";
23namespace com.atproto.repo.putRecord {
4 @doc("Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS.")
···1+import "@typelex/emitter";
23namespace com.atproto.repo.putRecord {
4 @doc("Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS.")
···1-import "@tylex/emitter";
23namespace com.atproto.repo.uploadBlob {
4 @doc("Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS.")
···1+import "@typelex/emitter";
23namespace com.atproto.repo.uploadBlob {
4 @doc("Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS.")
···1-import "@tylex/emitter";
23namespace com.atproto.server.activateAccount {
4 @doc("Activates a currently deactivated account. Used to finalize account migration after the account's repo is imported and identity is setup.")
···1+import "@typelex/emitter";
23namespace com.atproto.server.activateAccount {
4 @doc("Activates a currently deactivated account. Used to finalize account migration after the account's repo is imported and identity is setup.")
···1-import "@tylex/emitter";
23namespace com.atproto.server.checkAccountStatus {
4 @doc("Returns the status of an account, especially as pertaining to import or recovery. Can be called many times over the course of an account migration. Requires auth and can only be called pertaining to oneself.")
···1+import "@typelex/emitter";
23namespace com.atproto.server.checkAccountStatus {
4 @doc("Returns the status of an account, especially as pertaining to import or recovery. Can be called many times over the course of an account migration. Requires auth and can only be called pertaining to oneself.")
···1-import "@tylex/emitter";
23namespace com.atproto.server.deactivateAccount {
4 @doc("Deactivates a currently active account. Stops serving of repo, and future writes to repo until reactivated. Used to finalize account migration with the old host after the account has been activated on the new host.")
···1+import "@typelex/emitter";
23namespace com.atproto.server.deactivateAccount {
4 @doc("Deactivates a currently active account. Stops serving of repo, and future writes to repo until reactivated. Used to finalize account migration with the old host after the account has been activated on the new host.")
···1-import "@tylex/emitter";
23namespace com.atproto.server.getServiceAuth {
4 @doc("Indicates that the requested expiration date is not a valid. May be in the past or may be reliant on the requested scopes.")
···1+import "@typelex/emitter";
23namespace com.atproto.server.getServiceAuth {
4 @doc("Indicates that the requested expiration date is not a valid. May be in the past or may be reliant on the requested scopes.")
···1-import "@tylex/emitter";
23namespace com.atproto.server.requestEmailConfirmation {
4 @doc("Request an email with a code to confirm ownership of email.")
···1+import "@typelex/emitter";
23namespace com.atproto.server.requestEmailConfirmation {
4 @doc("Request an email with a code to confirm ownership of email.")
···1-import "@tylex/emitter";
23namespace com.atproto.server.reserveSigningKey {
4 @doc("Reserve a repo signing key, for use with account creation. Necessary so that a DID PLC update operation can be constructed during an account migraiton. Public and does not require auth; implemented by PDS. NOTE: this endpoint may change when full account migration is implemented.")
···1+import "@typelex/emitter";
23namespace com.atproto.server.reserveSigningKey {
4 @doc("Reserve a repo signing key, for use with account creation. Necessary so that a DID PLC update operation can be constructed during an account migraiton. Public and does not require auth; implemented by PDS. NOTE: this endpoint may change when full account migration is implemented.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.getBlob {
4 @doc("Get a blob associated with a given account. Returns the full blob as originally uploaded. Does not require auth; implemented by PDS.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.getBlob {
4 @doc("Get a blob associated with a given account. Returns the full blob as originally uploaded. Does not require auth; implemented by PDS.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.getBlocks {
4 @doc("Get data blocks from a given repo, by CID. For example, intermediate MST nodes, or records. Does not require auth; implemented by PDS.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.getBlocks {
4 @doc("Get data blocks from a given repo, by CID. For example, intermediate MST nodes, or records. Does not require auth; implemented by PDS.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.getHostStatus {
4 @doc("Returns information about a specified upstream host, as consumed by the server. Implemented by relays.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.getHostStatus {
4 @doc("Returns information about a specified upstream host, as consumed by the server. Implemented by relays.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.getLatestCommit {
4 @doc("Get the current commit CID & revision of the specified repo. Does not require auth.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.getLatestCommit {
4 @doc("Get the current commit CID & revision of the specified repo. Does not require auth.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.getRecord {
4 @doc("Get data blocks needed to prove the existence or non-existence of record in the current version of repo. Does not require auth.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.getRecord {
4 @doc("Get data blocks needed to prove the existence or non-existence of record in the current version of repo. Does not require auth.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.getRepo {
4 @doc("Download a repository export as CAR file. Optionally only a 'diff' since a previous revision. Does not require auth; implemented by PDS.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.getRepo {
4 @doc("Download a repository export as CAR file. Optionally only a 'diff' since a previous revision. Does not require auth; implemented by PDS.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.getRepoStatus {
4 @doc("Get the hosting status for a repository, on this server. Expected to be implemented by PDS and Relay.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.getRepoStatus {
4 @doc("Get the hosting status for a repository, on this server. Expected to be implemented by PDS and Relay.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.listBlobs {
4 @doc("List blob CIDs for an account, since some repo revision. Does not require auth; implemented by PDS.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.listBlobs {
4 @doc("List blob CIDs for an account, since some repo revision. Does not require auth; implemented by PDS.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.listHosts {
4 @doc("Enumerates upstream hosts (eg, PDS or relay instances) that this service consumes from. Implemented by relays.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.listHosts {
4 @doc("Enumerates upstream hosts (eg, PDS or relay instances) that this service consumes from. Implemented by relays.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.listRepos {
4 @doc("Enumerates all the DID, rev, and commit CID for all repos hosted by this service. Does not require auth; implemented by PDS and Relay.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.listRepos {
4 @doc("Enumerates all the DID, rev, and commit CID for all repos hosted by this service. Does not require auth; implemented by PDS and Relay.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.listReposByCollection {
4 @doc("Enumerates all the DIDs which have records with the given collection NSID.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.listReposByCollection {
4 @doc("Enumerates all the DIDs which have records with the given collection NSID.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.notifyOfUpdate {
4 @doc("Notify a crawling service of a recent update, and that crawling should resume. Intended use is after a gap between repo stream events caused the crawling service to disconnect. Does not require auth; implemented by Relay. DEPRECATED: just use com.atproto.sync.requestCrawl")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.notifyOfUpdate {
4 @doc("Notify a crawling service of a recent update, and that crawling should resume. Intended use is after a gap between repo stream events caused the crawling service to disconnect. Does not require auth; implemented by Relay. DEPRECATED: just use com.atproto.sync.requestCrawl")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.requestCrawl {
4 @doc("Request a service to persistently crawl hosted repos. Expected use is new PDS instances declaring their existence to Relays. Does not require auth.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.requestCrawl {
4 @doc("Request a service to persistently crawl hosted repos. Expected use is new PDS instances declaring their existence to Relays. Does not require auth.")
···1-import "@tylex/emitter";
23namespace com.atproto.temp.fetchLabels {
4 @doc("DEPRECATED: use queryLabels or subscribeLabels instead -- Fetch all labels from a labeler created after a certain date.")
···1+import "@typelex/emitter";
23namespace com.atproto.temp.fetchLabels {
4 @doc("DEPRECATED: use queryLabels or subscribeLabels instead -- Fetch all labels from a labeler created after a certain date.")
···1-import "@tylex/emitter";
23namespace com.atproto.temp.requestPhoneVerification {
4 @doc("Request a verification code to be sent to the supplied phone number")
···1+import "@typelex/emitter";
23namespace com.atproto.temp.requestPhoneVerification {
4 @doc("Request a verification code to be sent to the supplied phone number")
···1-import "@tylex/emitter";
23namespace com.atproto.temp.revokeAccountCredentials {
4 @doc("Revoke sessions, password, and app passwords associated with account. May be resolved by a password reset.")
···1+import "@typelex/emitter";
23namespace com.atproto.temp.revokeAccountCredentials {
4 @doc("Revoke sessions, password, and app passwords associated with account. May be resolved by a password reset.")
···1-import "@tylex/emitter";
23namespace tools.ozone.hosting.getAccountHistory {
4 @doc("Get account history, e.g. log of updated email addresses or other identity information.")
···1+import "@typelex/emitter";
23namespace tools.ozone.hosting.getAccountHistory {
4 @doc("Get account history, e.g. log of updated email addresses or other identity information.")
···1-import "@tylex/emitter";
23namespace tools.ozone.set.addValues {
4 @doc("Add values to a specific set. Attempting to add values to a set that does not exist will result in an error.")
···1+import "@typelex/emitter";
23namespace tools.ozone.set.addValues {
4 @doc("Add values to a specific set. Attempting to add values to a set that does not exist will result in an error.")
···1-import "@tylex/emitter";
23namespace tools.ozone.signature.findCorrelation {
4 @doc("Find all correlated threat signatures between 2 or more accounts.")
···1+import "@typelex/emitter";
23namespace tools.ozone.signature.findCorrelation {
4 @doc("Find all correlated threat signatures between 2 or more accounts.")
···1-import "@tylex/emitter";
23namespace tools.ozone.signature.findRelatedAccounts {
4 @doc("Get accounts that share some matching threat signatures with the root account.")
···1+import "@typelex/emitter";
23namespace tools.ozone.signature.findRelatedAccounts {
4 @doc("Get accounts that share some matching threat signatures with the root account.")
···1-import "@tylex/emitter";
23namespace tools.ozone.signature.searchAccounts {
4 @doc("Search for accounts that match one or more threat signature values.")
···1+import "@typelex/emitter";
23namespace tools.ozone.signature.searchAccounts {
4 @doc("Search for accounts that match one or more threat signature values.")
···1-import "@tylex/emitter";
23namespace tools.ozone.verification.grantVerifications {
4 @doc("Grant verifications to multiple subjects. Allows batch processing of up to 100 verifications at once.")
···1+import "@typelex/emitter";
23namespace tools.ozone.verification.grantVerifications {
4 @doc("Grant verifications to multiple subjects. Allows batch processing of up to 100 verifications at once.")
···1-import "@tylex/emitter";
23namespace tools.ozone.verification.revokeVerifications {
4 @doc("Revoke previously granted verifications in batches of up to 100.")
···1+import "@typelex/emitter";
23namespace tools.ozone.verification.revokeVerifications {
4 @doc("Revoke previously granted verifications in batches of up to 100.")
···1-import "@tylex/emitter";
23namespace com.atproto.admin.disableAccountInvites {
4 @doc("Disable an account from receiving new invite codes, but does not invalidate existing codes.")
···1+import "@typelex/emitter";
23namespace com.atproto.admin.disableAccountInvites {
4 @doc("Disable an account from receiving new invite codes, but does not invalidate existing codes.")
···1-import "@tylex/emitter";
23namespace com.atproto.admin.disableInviteCodes {
4 @doc("Disable some set of codes and/or all codes associated with a set of users.")
···1+import "@typelex/emitter";
23namespace com.atproto.admin.disableInviteCodes {
4 @doc("Disable some set of codes and/or all codes associated with a set of users.")
···1-import "@tylex/emitter";
23namespace com.atproto.admin.getSubjectStatus {
4 @doc("Get the service-specific admin status of a subject (account, record, or blob).")
···1+import "@typelex/emitter";
23namespace com.atproto.admin.getSubjectStatus {
4 @doc("Get the service-specific admin status of a subject (account, record, or blob).")
···1-import "@tylex/emitter";
23namespace com.atproto.admin.updateAccountPassword {
4 @doc("Update the password for a user account as an administrator.")
···1+import "@typelex/emitter";
23namespace com.atproto.admin.updateAccountPassword {
4 @doc("Update the password for a user account as an administrator.")
···1-import "@tylex/emitter";
23namespace com.atproto.admin.updateAccountSigningKey {
4 @doc("Administrative action to update an account's signing key in their Did document.")
···1+import "@typelex/emitter";
23namespace com.atproto.admin.updateAccountSigningKey {
4 @doc("Administrative action to update an account's signing key in their Did document.")
···1-import "@tylex/emitter";
23namespace com.atproto.admin.updateSubjectStatus {
4 @doc("Update the service-specific admin status of a subject (account, record, or blob).")
···1+import "@typelex/emitter";
23namespace com.atproto.admin.updateSubjectStatus {
4 @doc("Update the service-specific admin status of a subject (account, record, or blob).")
···1-import "@tylex/emitter";
23namespace com.atproto.identity.getRecommendedDidCredentials {
4 @doc("Describe the credentials that should be included in the DID doc of an account that is migrating to this service.")
···1+import "@typelex/emitter";
23namespace com.atproto.identity.getRecommendedDidCredentials {
4 @doc("Describe the credentials that should be included in the DID doc of an account that is migrating to this service.")
···1-import "@tylex/emitter";
23namespace com.atproto.identity.refreshIdentity {
4 @doc("The resolution process confirmed that the handle does not resolve to any DID.")
···1+import "@typelex/emitter";
23namespace com.atproto.identity.refreshIdentity {
4 @doc("The resolution process confirmed that the handle does not resolve to any DID.")
···1-import "@tylex/emitter";
23namespace com.atproto.identity.requestPlcOperationSignature {
4 @doc("Request an email with a code to in order to request a signed PLC operation. Requires Auth.")
···1+import "@typelex/emitter";
23namespace com.atproto.identity.requestPlcOperationSignature {
4 @doc("Request an email with a code to in order to request a signed PLC operation. Requires Auth.")
···1-import "@tylex/emitter";
23namespace com.atproto.identity.resolveDid {
4 @doc("Resolves DID to DID document. Does not bi-directionally verify handle.")
···1+import "@typelex/emitter";
23namespace com.atproto.identity.resolveDid {
4 @doc("Resolves DID to DID document. Does not bi-directionally verify handle.")
···1-import "@tylex/emitter";
23namespace com.atproto.identity.resolveHandle {
4 @doc("Resolves an atproto handle (hostname) to a DID. Does not necessarily bi-directionally verify against the the DID document.")
···1+import "@typelex/emitter";
23namespace com.atproto.identity.resolveHandle {
4 @doc("Resolves an atproto handle (hostname) to a DID. Does not necessarily bi-directionally verify against the the DID document.")
···1-import "@tylex/emitter";
23namespace com.atproto.identity.resolveIdentity {
4 @doc("The resolution process confirmed that the handle does not resolve to any DID.")
···1+import "@typelex/emitter";
23namespace com.atproto.identity.resolveIdentity {
4 @doc("The resolution process confirmed that the handle does not resolve to any DID.")
···1-import "@tylex/emitter";
23namespace com.atproto.identity.signPlcOperation {
4 @doc("Signs a PLC operation to update some value(s) in the requesting DID's document.")
···1+import "@typelex/emitter";
23namespace com.atproto.identity.signPlcOperation {
4 @doc("Signs a PLC operation to update some value(s) in the requesting DID's document.")
···1-import "@tylex/emitter";
23namespace com.atproto.identity.submitPlcOperation {
4 @doc("Validates a PLC operation to ensure that it doesn't violate a service's constraints or get the identity into a bad state, then submits it to the PLC registry")
···1+import "@typelex/emitter";
23namespace com.atproto.identity.submitPlcOperation {
4 @doc("Validates a PLC operation to ensure that it doesn't violate a service's constraints or get the identity into a bad state, then submits it to the PLC registry")
···1-import "@tylex/emitter";
23namespace com.atproto.identity.updateHandle {
4 @doc("Updates the current account's handle. Verifies handle validity, and updates did:plc document if necessary. Implemented by PDS, and requires auth.")
···1+import "@typelex/emitter";
23namespace com.atproto.identity.updateHandle {
4 @doc("Updates the current account's handle. Verifies handle validity, and updates did:plc document if necessary. Implemented by PDS, and requires auth.")
···1-import "@tylex/emitter";
23namespace com.atproto.label.queryLabels {
4 @doc("Find labels relevant to the provided AT-URI patterns. Public endpoint for moderation services, though may return different or additional results with auth.")
···1+import "@typelex/emitter";
23namespace com.atproto.label.queryLabels {
4 @doc("Find labels relevant to the provided AT-URI patterns. Public endpoint for moderation services, though may return different or additional results with auth.")
···1-import "@tylex/emitter";
23namespace com.atproto.lexicon.schema {
4 @doc("Representation of Lexicon schemas themselves, when published as atproto records. Note that the schema language is not defined in Lexicon; this meta schema currently only includes a single version field ('lexicon'). See the atproto specifications for description of the other expected top-level fields ('id', 'defs', etc).")
···1+import "@typelex/emitter";
23namespace com.atproto.lexicon.schema {
4 @doc("Representation of Lexicon schemas themselves, when published as atproto records. Note that the schema language is not defined in Lexicon; this meta schema currently only includes a single version field ('lexicon'). See the atproto specifications for description of the other expected top-level fields ('id', 'defs', etc).")
···1-import "@tylex/emitter";
23namespace com.atproto.repo.applyWrites {
4 @doc("Indicates that the 'swapCommit' parameter did not match current commit.")
···1+import "@typelex/emitter";
23namespace com.atproto.repo.applyWrites {
4 @doc("Indicates that the 'swapCommit' parameter did not match current commit.")
···1-import "@tylex/emitter";
23namespace com.atproto.repo.createRecord {
4 @doc("Create a single new repository record. Requires auth, implemented by PDS.")
···1+import "@typelex/emitter";
23namespace com.atproto.repo.createRecord {
4 @doc("Create a single new repository record. Requires auth, implemented by PDS.")
···1-import "@tylex/emitter";
23namespace com.atproto.repo.deleteRecord {
4 @doc("Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS.")
···1+import "@typelex/emitter";
23namespace com.atproto.repo.deleteRecord {
4 @doc("Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS.")
···1-import "@tylex/emitter";
23namespace com.atproto.repo.describeRepo {
4 @doc("Get information about an account and repository, including the list of collections. Does not require auth.")
···1+import "@typelex/emitter";
23namespace com.atproto.repo.describeRepo {
4 @doc("Get information about an account and repository, including the list of collections. Does not require auth.")
···1-import "@tylex/emitter";
23namespace com.atproto.repo.importRepo {
4 @doc("Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set.")
···1+import "@typelex/emitter";
23namespace com.atproto.repo.importRepo {
4 @doc("Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set.")
···1-import "@tylex/emitter";
23namespace com.atproto.repo.listMissingBlobs {
4 @doc("Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow.")
···1+import "@typelex/emitter";
23namespace com.atproto.repo.listMissingBlobs {
4 @doc("Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow.")
···1-import "@tylex/emitter";
23namespace com.atproto.repo.listRecords {
4 @doc("List a range of records in a repository, matching a specific collection. Does not require auth.")
···1+import "@typelex/emitter";
23namespace com.atproto.repo.listRecords {
4 @doc("List a range of records in a repository, matching a specific collection. Does not require auth.")
···1-import "@tylex/emitter";
23namespace com.atproto.repo.putRecord {
4 @doc("Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS.")
···1+import "@typelex/emitter";
23namespace com.atproto.repo.putRecord {
4 @doc("Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS.")
···1-import "@tylex/emitter";
23namespace com.atproto.repo.uploadBlob {
4 @doc("Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS.")
···1+import "@typelex/emitter";
23namespace com.atproto.repo.uploadBlob {
4 @doc("Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS.")
···1-import "@tylex/emitter";
23namespace com.atproto.server.activateAccount {
4 @doc("Activates a currently deactivated account. Used to finalize account migration after the account's repo is imported and identity is setup.")
···1+import "@typelex/emitter";
23namespace com.atproto.server.activateAccount {
4 @doc("Activates a currently deactivated account. Used to finalize account migration after the account's repo is imported and identity is setup.")
···1-import "@tylex/emitter";
23namespace com.atproto.server.checkAccountStatus {
4 @doc("Returns the status of an account, especially as pertaining to import or recovery. Can be called many times over the course of an account migration. Requires auth and can only be called pertaining to oneself.")
···1+import "@typelex/emitter";
23namespace com.atproto.server.checkAccountStatus {
4 @doc("Returns the status of an account, especially as pertaining to import or recovery. Can be called many times over the course of an account migration. Requires auth and can only be called pertaining to oneself.")
···1-import "@tylex/emitter";
23namespace com.atproto.server.deactivateAccount {
4 @doc("Deactivates a currently active account. Stops serving of repo, and future writes to repo until reactivated. Used to finalize account migration with the old host after the account has been activated on the new host.")
···1+import "@typelex/emitter";
23namespace com.atproto.server.deactivateAccount {
4 @doc("Deactivates a currently active account. Stops serving of repo, and future writes to repo until reactivated. Used to finalize account migration with the old host after the account has been activated on the new host.")
···1-import "@tylex/emitter";
23namespace com.atproto.server.getServiceAuth {
4 @doc("Indicates that the requested expiration date is not a valid. May be in the past or may be reliant on the requested scopes.")
···1+import "@typelex/emitter";
23namespace com.atproto.server.getServiceAuth {
4 @doc("Indicates that the requested expiration date is not a valid. May be in the past or may be reliant on the requested scopes.")
···1-import "@tylex/emitter";
23namespace com.atproto.server.requestEmailConfirmation {
4 @doc("Request an email with a code to confirm ownership of email.")
···1+import "@typelex/emitter";
23namespace com.atproto.server.requestEmailConfirmation {
4 @doc("Request an email with a code to confirm ownership of email.")
···1-import "@tylex/emitter";
23namespace com.atproto.server.reserveSigningKey {
4 @doc("Reserve a repo signing key, for use with account creation. Necessary so that a DID PLC update operation can be constructed during an account migraiton. Public and does not require auth; implemented by PDS. NOTE: this endpoint may change when full account migration is implemented.")
···1+import "@typelex/emitter";
23namespace com.atproto.server.reserveSigningKey {
4 @doc("Reserve a repo signing key, for use with account creation. Necessary so that a DID PLC update operation can be constructed during an account migraiton. Public and does not require auth; implemented by PDS. NOTE: this endpoint may change when full account migration is implemented.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.getBlob {
4 @doc("Get a blob associated with a given account. Returns the full blob as originally uploaded. Does not require auth; implemented by PDS.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.getBlob {
4 @doc("Get a blob associated with a given account. Returns the full blob as originally uploaded. Does not require auth; implemented by PDS.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.getBlocks {
4 @doc("Get data blocks from a given repo, by CID. For example, intermediate MST nodes, or records. Does not require auth; implemented by PDS.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.getBlocks {
4 @doc("Get data blocks from a given repo, by CID. For example, intermediate MST nodes, or records. Does not require auth; implemented by PDS.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.getHostStatus {
4 @doc("Returns information about a specified upstream host, as consumed by the server. Implemented by relays.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.getHostStatus {
4 @doc("Returns information about a specified upstream host, as consumed by the server. Implemented by relays.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.getLatestCommit {
4 @doc("Get the current commit CID & revision of the specified repo. Does not require auth.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.getLatestCommit {
4 @doc("Get the current commit CID & revision of the specified repo. Does not require auth.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.getRecord {
4 @doc("Get data blocks needed to prove the existence or non-existence of record in the current version of repo. Does not require auth.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.getRecord {
4 @doc("Get data blocks needed to prove the existence or non-existence of record in the current version of repo. Does not require auth.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.getRepo {
4 @doc("Download a repository export as CAR file. Optionally only a 'diff' since a previous revision. Does not require auth; implemented by PDS.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.getRepo {
4 @doc("Download a repository export as CAR file. Optionally only a 'diff' since a previous revision. Does not require auth; implemented by PDS.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.getRepoStatus {
4 @doc("Get the hosting status for a repository, on this server. Expected to be implemented by PDS and Relay.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.getRepoStatus {
4 @doc("Get the hosting status for a repository, on this server. Expected to be implemented by PDS and Relay.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.listBlobs {
4 @doc("List blob CIDs for an account, since some repo revision. Does not require auth; implemented by PDS.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.listBlobs {
4 @doc("List blob CIDs for an account, since some repo revision. Does not require auth; implemented by PDS.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.listHosts {
4 @doc("Enumerates upstream hosts (eg, PDS or relay instances) that this service consumes from. Implemented by relays.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.listHosts {
4 @doc("Enumerates upstream hosts (eg, PDS or relay instances) that this service consumes from. Implemented by relays.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.listRepos {
4 @doc("Enumerates all the DID, rev, and commit CID for all repos hosted by this service. Does not require auth; implemented by PDS and Relay.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.listRepos {
4 @doc("Enumerates all the DID, rev, and commit CID for all repos hosted by this service. Does not require auth; implemented by PDS and Relay.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.listReposByCollection {
4 @doc("Enumerates all the DIDs which have records with the given collection NSID.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.listReposByCollection {
4 @doc("Enumerates all the DIDs which have records with the given collection NSID.")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.notifyOfUpdate {
4 @doc("Notify a crawling service of a recent update, and that crawling should resume. Intended use is after a gap between repo stream events caused the crawling service to disconnect. Does not require auth; implemented by Relay. DEPRECATED: just use com.atproto.sync.requestCrawl")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.notifyOfUpdate {
4 @doc("Notify a crawling service of a recent update, and that crawling should resume. Intended use is after a gap between repo stream events caused the crawling service to disconnect. Does not require auth; implemented by Relay. DEPRECATED: just use com.atproto.sync.requestCrawl")
···1-import "@tylex/emitter";
23namespace com.atproto.sync.requestCrawl {
4 @doc("Request a service to persistently crawl hosted repos. Expected use is new PDS instances declaring their existence to Relays. Does not require auth.")
···1+import "@typelex/emitter";
23namespace com.atproto.sync.requestCrawl {
4 @doc("Request a service to persistently crawl hosted repos. Expected use is new PDS instances declaring their existence to Relays. Does not require auth.")
···1-import "@tylex/emitter";
23namespace com.atproto.temp.fetchLabels {
4 @doc("DEPRECATED: use queryLabels or subscribeLabels instead -- Fetch all labels from a labeler created after a certain date.")
···1+import "@typelex/emitter";
23namespace com.atproto.temp.fetchLabels {
4 @doc("DEPRECATED: use queryLabels or subscribeLabels instead -- Fetch all labels from a labeler created after a certain date.")
···1-import "@tylex/emitter";
23namespace com.atproto.temp.requestPhoneVerification {
4 @doc("Request a verification code to be sent to the supplied phone number")
···1+import "@typelex/emitter";
23namespace com.atproto.temp.requestPhoneVerification {
4 @doc("Request a verification code to be sent to the supplied phone number")
···1-import "@tylex/emitter";
23namespace com.atproto.temp.revokeAccountCredentials {
4 @doc("Revoke sessions, password, and app passwords associated with account. May be resolved by a password reset.")
···1+import "@typelex/emitter";
23namespace com.atproto.temp.revokeAccountCredentials {
4 @doc("Revoke sessions, password, and app passwords associated with account. May be resolved by a password reset.")
···1-import "@tylex/emitter";
23namespace `pub`.leaflet.theme.color {
4 // Dummy Main to satisfy namespace requirements - actual defs are Rgba and Rgb
···1+import "@typelex/emitter";
23namespace `pub`.leaflet.theme.color {
4 // Dummy Main to satisfy namespace requirements - actual defs are Rgba and Rgb
···1-# Tylex Website
23-Landing page for tylex - TypeSpec for AT Protocol Lexicons.
45## Features
67- **Live Examples**: TypeSpec examples are compiled during build to show real Lexicon JSON output
8- **Syntax Highlighting**: Using Shiki for beautiful code highlighting
9-- **Interactive Playground**: Try tylex in the browser (coming soon)
1011## Development
12
···1+# Typelex Website
23+Landing page for typelex - TypeSpec for AT Protocol Lexicons.
45## Features
67- **Live Examples**: TypeSpec examples are compiled during build to show real Lexicon JSON output
8- **Syntax Highlighting**: Using Shiki for beautiful code highlighting
9+- **Interactive Playground**: Try typelex in the browser (coming soon)
1011## Development
12