···22. "$(dirname -- "$0")/_/husky.sh"
3344# Run tests before commit
55-npm run test -w @tlex/emitter55+npm run test -w @tylex/emitter
+1-1
CLAUDE.md
···11you'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/`).
2233-what i want you to do is to gradually keep adding features to tlex so that in the end it's possible to express all Lexicon code with that language. you have the following resources:
33+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:
4455- read `SYNTAX.md`!!! it's the main guideline
66
+1-1
LICENSE
···11MIT License
2233-Copyright (c) 2024 tlex Contributors
33+Copyright (c) 2024 tylex Contributors
4455Permission is hereby granted, free of charge, to any person obtaining a copy
66of this software and associated documentation files (the "Software"), to deal
+10-10
README.md
···11-# tlex
11+# tylex
2233> TypeSpec-based IDL for ATProto Lexicons
4455-tlex 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.
55+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.
6677## Features
88···1717# Install TypeSpec compiler
1818npm install -g @typespec/compiler
19192020-# Install tlex emitter
2121-npm install --save-dev @tlex/emitter
2020+# Install tylex emitter
2121+npm install --save-dev @tylex/emitter
2222```
23232424Create a `main.tsp` file:
···43434444```yaml
4545emit:
4646- - "@tlex/emitter"
4646+ - "@tylex/emitter"
4747options:
4848- "@tlex/emitter":
4848+ "@tylex/emitter":
4949 output-dir: "./lexicons"
5050```
5151···57575858## Output
59596060-tlex generates standard ATProto lexicon files:
6060+tylex generates standard ATProto lexicon files:
61616262```json
6363{
···102102103103```bash
104104# Clone the repository
105105-git clone https://github.com/yourusername/tlex.git
106106-cd tlex
105105+git clone https://github.com/yourusername/tylex.git
106106+cd tylex
107107108108# Build the emitter
109109pnpm install
···115115116116## Current Status
117117118118-⚠️ **Early Development** - tlex currently supports basic record types. Support for queries, procedures, and subscriptions is coming soon.
118118+⚠️ **Early Development** - tylex currently supports basic record types. Support for queries, procedures, and subscriptions is coming soon.
119119120120### Supported
121121
···11import "../dist/tsp-index.js";
2233/**
44- * Private decorators for internal use by the Tlex emitter.
44+ * Private decorators for internal use by the Tylex emitter.
55 * These are not intended for direct use in user code.
66 */
77-namespace Tlex.Private;
77+namespace Tylex.Private;
8899/**
1010 * Internal decorator that marks the Blob model.
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.actor.getPreferences {
44 @doc("Get private preferences attached to the current account. Expected use is synchronization between multiple devices, and import/export during account migration. Requires auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.actor.getProfile {
44 @doc("Get detailed profile view of an actor. Does not require auth, but contains relevant metadata with auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.actor.getSuggestions {
44 @doc("Get a list of suggested actors. Expected use is discovery of accounts to follow during new account onboarding.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.actor.searchActorsTypeahead {
44 @doc("Find actor suggestions for a prefix search term. Expected use is for auto-completion during text field entry. Does not require auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.bookmark.createBookmark {
44 @doc("Creates a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.bookmark.defs {
44 @doc("Object used to store bookmark data in stash.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.bookmark.deleteBookmark {
44 @doc("Deletes a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.bookmark.getBookmarks {
44 @doc("Gets views of records bookmarked by the authenticated user. Requires authentication.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.embed.defs {
44 // Description goes on the model for defs, unlike standalone lexicons where it goes at lexicon level
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.embed.external {
44 @doc("A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post).")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
22import "./defs.tsp";
3344@doc("A set of images embedded in a Bluesky record (eg, a post).")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233@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.")
44namespace app.bsky.embed.record {
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233@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.")
44namespace app.bsky.embed.recordWithMedia {
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.feed.describeFeedGenerator {
44 @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).")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.feed.generator {
44 @doc("Record declaring of the existence of a feed generator, and containing metadata about it. The record can exist in any repository.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.feed.getActorFeeds {
44 @doc("Get a list of feeds (feed generator records) created by the actor (in the actor's repo).")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.feed.getFeedGenerator {
44 @doc("Get information about a feed generator. Implemented by AppView.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.feed.getFeedGenerators {
44 @doc("Get information about a list of feed generators.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.feed.getLikes {
44 @doc("Get like records which reference a subject (by AT-URI and CID).")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.feed.getPosts {
44 @doc("Gets post views for a specified list of posts (by AT-URI). This is sometimes referred to as 'hydrating' a 'feed skeleton'.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.feed.getRepostedBy {
44 @doc("Get a list of reposts for a given post.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.feed.getSuggestedFeeds {
44 @doc("Get a list of suggested feeds (feed generators) for the requesting account.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.feed.getTimeline {
44 @doc("Get a view of the requesting account's home timeline. This is expected to be some form of reverse-chronological feed.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.feed.sendInteractions {
44 @doc("Send information about interactions with feed items back to the feed generator that served them.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.graph.getActorStarterPacks {
44 @doc("Get a list of starter packs created by the actor.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.graph.getBlocks {
44 @doc("Enumerates which accounts the requesting account is currently blocking. Requires auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.graph.getKnownFollowers {
44 @doc("Enumerates accounts which follow a specified account (actor) and are followed by the viewer.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.graph.getListBlocks {
44 @doc("Get mod lists that the requesting account (actor) is blocking. Requires auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.graph.getListMutes {
44 @doc("Enumerates mod lists that the requesting account (actor) currently has muted. Requires auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.graph.getLists {
44 @doc("Enumerates the lists created by a specified account (actor).")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.graph.getListsWithMembership {
44 @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.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.graph.getMutes {
44 @doc("Enumerates accounts that the requesting account (actor) currently has muted. Requires auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.graph.getRelationships {
44 @doc("Enumerates public relationships between one account, and a list of other accounts. Does not require auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.graph.getStarterPacks {
44 @doc("Get views for a list of starter packs.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.graph.getStarterPacksWithMembership {
44 @doc("Enumerates the starter packs created by the session user, and includes membership information about `actor` in those starter packs. Requires auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.graph.getSuggestedFollowsByActor {
44 @doc("Enumerates follows similar to a given account (actor). Expected use is to recommend additional accounts immediately after following one account.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.graph.list {
44 @doc("Record representing a list of accounts (actors). Scope includes both moderation-oriented lists and curration-oriented lists.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.graph.muteActor {
44 @doc("Creates a mute relationship for the specified account. Mutes are private in Bluesky. Requires auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.graph.muteActorList {
44 @doc("Creates a mute relationship for the specified list of accounts. Mutes are private in Bluesky. Requires auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.graph.muteThread {
44 @doc("Mutes a thread preventing notifications from the thread and any of its children. Mutes are private in Bluesky. Requires auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.labeler.getServices {
44 @doc("Get information about a list of labeler services.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.labeler.service {
44 @doc("A declaration of the existence of labeler service.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.notification.getUnreadCount {
44 @doc("Count the number of unread notifications for the requesting account. Requires auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.notification.listActivitySubscriptions {
44 @doc("Enumerate all accounts to which the requesting account is subscribed to receive notifications for. Requires auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.notification.putActivitySubscription {
44 @doc("Puts an activity subscription entry. The key should be omitted for creation and provided for updates. Requires auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.notification.registerPush {
44 @doc("Register to receive push notifications, via a specified service, for the requesting account. Requires auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.notification.unregisterPush {
44 @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.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.notification.updateSeen {
44 @doc("Notify server that the requesting account has seen notifications. Requires auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.richtext.facet {
44 @doc("Annotation of a sub-string within rich text.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.unspecced.getAgeAssuranceState {
44 @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.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.unspecced.getOnboardingSuggestedStarterPacks {
44 @doc("Get a list of suggested starterpacks for onboarding")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.unspecced.getOnboardingSuggestedStarterPacksSkeleton {
44 @doc("Get a skeleton of suggested starterpacks for onboarding. Intended to be called and hydrated by app.bsky.unspecced.getOnboardingSuggestedStarterPacks")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.unspecced.getPostThreadOtherV2 {
44 @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.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.unspecced.getPostThreadV2 {
44 @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.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.unspecced.getSuggestedFeeds {
44 @doc("Get a list of suggested feeds")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.unspecced.getSuggestedFeedsSkeleton {
44 @doc("Get a skeleton of suggested feeds. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedFeeds")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.unspecced.getSuggestedStarterPacks {
44 @doc("Get a list of suggested starterpacks")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.unspecced.getSuggestedStarterPacksSkeleton {
44 @doc("Get a skeleton of suggested starterpacks. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedStarterpacks")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.unspecced.getSuggestedUsers {
44 @doc("Get a list of suggested users")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.unspecced.getSuggestedUsersSkeleton {
44 @doc("Get a skeleton of suggested users. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedUsers")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.unspecced.getSuggestionsSkeleton {
44 @doc("Get a skeleton of suggested actors. Intended to be called and then hydrated through app.bsky.actor.getSuggestions")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.unspecced.getTaggedSuggestions {
44 @doc("Get a list of suggestions (feeds and users) tagged with categories")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.unspecced.getTrendingTopics {
44 @doc("Get a list of trending topics")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.unspecced.getTrends {
44 @doc("Get the current trends on the network")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.unspecced.getTrendsSkeleton {
44 @doc("Get the skeleton of trends on the network. Intended to be called and then hydrated through app.bsky.unspecced.getTrends")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.video.getJobStatus {
44 @doc("Get status details for a video processing job.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace app.bsky.video.uploadVideo {
44 @doc("Upload a video to be processed then stored on the PDS.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace chat.bsky.convo.addReaction {
44 @doc("Indicates that the message has been deleted and reactions can no longer be added/removed.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace chat.bsky.convo.getConvoAvailability {
44 @doc("Get whether the requester and the other members can chat. If an existing convo is found for these members, it is returned.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace chat.bsky.convo.removeReaction {
44 @doc("Indicates that the message has been deleted and reactions can no longer be added/removed.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.admin.deleteAccount {
44 @doc("Delete a user account as an administrator.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.admin.disableAccountInvites {
44 @doc("Disable an account from receiving new invite codes, but does not invalidate existing codes.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.admin.disableInviteCodes {
44 @doc("Disable some set of codes and/or all codes associated with a set of users.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.admin.getSubjectStatus {
44 @doc("Get the service-specific admin status of a subject (account, record, or blob).")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.admin.searchAccounts {
44 @doc("Get list of accounts that matches your search query.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.admin.updateAccountPassword {
44 @doc("Update the password for a user account as an administrator.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.admin.updateAccountSigningKey {
44 @doc("Administrative action to update an account's signing key in their Did document.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.admin.updateSubjectStatus {
44 @doc("Update the service-specific admin status of a subject (account, record, or blob).")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.identity.getRecommendedDidCredentials {
44 @doc("Describe the credentials that should be included in the DID doc of an account that is migrating to this service.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.identity.refreshIdentity {
44 @doc("The resolution process confirmed that the handle does not resolve to any DID.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.identity.requestPlcOperationSignature {
44 @doc("Request an email with a code to in order to request a signed PLC operation. Requires Auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.identity.resolveDid {
44 @doc("Resolves DID to DID document. Does not bi-directionally verify handle.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.identity.resolveHandle {
44 @doc("Resolves an atproto handle (hostname) to a DID. Does not necessarily bi-directionally verify against the the DID document.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.identity.resolveIdentity {
44 @doc("The resolution process confirmed that the handle does not resolve to any DID.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.identity.signPlcOperation {
44 @doc("Signs a PLC operation to update some value(s) in the requesting DID's document.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.identity.submitPlcOperation {
44 @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")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.identity.updateHandle {
44 @doc("Updates the current account's handle. Verifies handle validity, and updates did:plc document if necessary. Implemented by PDS, and requires auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.label.defs {
44 @doc("Metadata tag on an atproto resource (eg, repo or record).")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.label.queryLabels {
44 @doc("Find labels relevant to the provided AT-URI patterns. Public endpoint for moderation services, though may return different or additional results with auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.lexicon.schema {
44 @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).")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.repo.applyWrites {
44 @doc("Indicates that the 'swapCommit' parameter did not match current commit.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.repo.createRecord {
44 @doc("Create a single new repository record. Requires auth, implemented by PDS.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.repo.describeRepo {
44 @doc("Get information about an account and repository, including the list of collections. Does not require auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.repo.getRecord {
44 @doc("Get a single record from a repository. Does not require auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.repo.importRepo {
44 @doc("Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.repo.listMissingBlobs {
44 @doc("Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.repo.listRecords {
44 @doc("List a range of records in a repository, matching a specific collection. Does not require auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.repo.putRecord {
44 @doc("Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.repo.uploadBlob {
44 @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.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.server.activateAccount {
44 @doc("Activates a currently deactivated account. Used to finalize account migration after the account's repo is imported and identity is setup.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.server.checkAccountStatus {
44 @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.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.server.deactivateAccount {
44 @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.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.server.getServiceAuth {
44 @doc("Indicates that the requested expiration date is not a valid. May be in the past or may be reliant on the requested scopes.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.server.getSession {
44 @doc("Get information about the current auth session. Requires auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.server.requestAccountDelete {
44 @doc("Initiate a user account deletion via email.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.server.requestEmailConfirmation {
44 @doc("Request an email with a code to confirm ownership of email.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.server.requestEmailUpdate {
44 @doc("Request a token in order to update email.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.server.reserveSigningKey {
44 @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.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.sync.getBlob {
44 @doc("Get a blob associated with a given account. Returns the full blob as originally uploaded. Does not require auth; implemented by PDS.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.sync.getBlocks {
44 @doc("Get data blocks from a given repo, by CID. For example, intermediate MST nodes, or records. Does not require auth; implemented by PDS.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.sync.getLatestCommit {
44 @doc("Get the current commit CID & revision of the specified repo. Does not require auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.sync.getRecord {
44 @doc("Get data blocks needed to prove the existence or non-existence of record in the current version of repo. Does not require auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.sync.getRepo {
44 @doc("Download a repository export as CAR file. Optionally only a 'diff' since a previous revision. Does not require auth; implemented by PDS.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.sync.getRepoStatus {
44 @doc("Get the hosting status for a repository, on this server. Expected to be implemented by PDS and Relay.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.sync.listBlobs {
44 @doc("List blob CIDs for an account, since some repo revision. Does not require auth; implemented by PDS.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.sync.listRepos {
44 @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.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.sync.listReposByCollection {
44 @doc("Enumerates all the DIDs which have records with the given collection NSID.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.sync.notifyOfUpdate {
44 @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")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.sync.requestCrawl {
44 @doc("Request a service to persistently crawl hosted repos. Expected use is new PDS instances declaring their existence to Relays. Does not require auth.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.temp.addReservedHandle {
44 @doc("Add a handle to the set of reserved handles.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.temp.fetchLabels {
44 @doc("DEPRECATED: use queryLabels or subscribeLabels instead -- Fetch all labels from a labeler created after a certain date.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.temp.requestPhoneVerification {
44 @doc("Request a verification code to be sent to the supplied phone number")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace com.atproto.temp.revokeAccountCredentials {
44 @doc("Revoke sessions, password, and app passwords associated with account. May be resolved by a password reset.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace tools.ozone.communication.listTemplates {
44 @doc("Get list of all communication templates.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace tools.ozone.moderation.getReporterStats {
44 @doc("Get reporter stats for a list of users.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace tools.ozone.moderation.searchRepos {
44 @doc("Find repositories based on a search term.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace tools.ozone.safelink.removeRule {
44 @doc("No active rule found for this URL/domain")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace tools.ozone.safelink.updateRule {
44 @doc("No active rule found for this URL/domain")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace tools.ozone.set.addValues {
44 @doc("Add values to a specific set. Attempting to add values to a set that does not exist will result in an error.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace tools.ozone.set.deleteValues {
44 @doc("set with the given name does not exist")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace tools.ozone.signature.findCorrelation {
44 @doc("Find all correlated threat signatures between 2 or more accounts.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace tools.ozone.signature.findRelatedAccounts {
44 @doc("Get accounts that share some matching threat signatures with the root account.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace tools.ozone.signature.searchAccounts {
44 @doc("Search for accounts that match one or more threat signature values.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace tools.ozone.team.deleteMember {
44 @doc("The member being deleted does not exist")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace tools.ozone.team.listMembers {
44 @doc("List all members with access to the ozone service.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace tools.ozone.team.updateMember {
44 @doc("The member being updated does not exist in the team")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace tools.ozone.verification.defs {
44 @doc("Verification data for the associated subject.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace tools.ozone.verification.grantVerifications {
44 @doc("Grant verifications to multiple subjects. Allows batch processing of up to 100 verifications at once.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233namespace tools.ozone.verification.revokeVerifications {
44 @doc("Revoke previously granted verifications in batches of up to 100.")
···11-import "@tlex/emitter";
11+import "@tylex/emitter";
2233-// Example showing tlex as source of truth for atproto lexicons
33+// Example showing tylex as source of truth for atproto lexicons
4455// ============ Common Types ============
66