+52
-17
README.md
+52
-17
README.md
···
1
-
# atproto-identity-rs
1
+
# AT Protocol Identity Rust Components
2
2
3
-
A comprehensive collection of Rust crates for building AT Protocol applications. This workspace provides identity management, record operations, OAuth 2.0 flows, HTTP client operations, XRPC services, and event streaming capabilities.
3
+
A comprehensive collection of Rust components for creating AT Protocol applications. This workspace provides essential building blocks for identity management, record operations, OAuth 2.0 authentication flows, HTTP client operations, XRPC services, and real-time event streaming.
4
4
5
-
**Note**: This project contains components extracted from the open-source [smokesignal.events](https://tangled.sh/@smokesignal.events/smokesignal) project, an AT Protocol event and RSVP management application. This library is released under the MIT license.
5
+
**Origin**: Parts of this project were extracted from the open-source [smokesignal.events](https://tangled.sh/@smokesignal.events/smokesignal) project, an AT Protocol event and RSVP management application. This library is released under the MIT license to enable broader AT Protocol ecosystem development.
6
6
7
7
## Components
8
8
9
-
### Core Libraries
9
+
This workspace contains 9 specialized crates that work together to provide complete AT Protocol application development capabilities:
10
10
11
-
- **[`atproto-identity`](crates/atproto-identity/)** - Identity management with DID resolution and cryptographic operations. Includes 4 CLI tools for identity resolution, key management, signing, and validation.
12
-
- **[`atproto-record`](crates/atproto-record/)** - AT Protocol record signature operations. Includes 2 CLI tools for signing and verifying records.
13
-
- **[`atproto-oauth`](crates/atproto-oauth/)** - OAuth 2.0 implementation with AT Protocol security extensions including PKCE, DPoP, and JWT operations.
14
-
- **[`atproto-oauth-aip`](crates/atproto-oauth-aip/)** - AT Protocol Identity Provider (AIP) OAuth workflow implementation for client applications.
15
-
- **[`atproto-client`](crates/atproto-client/)** - HTTP client with DPoP authentication and repository operations. Includes 3 CLI tools for client authentication testing.
11
+
### Identity & Cryptography
12
+
13
+
- **[`atproto-identity`](crates/atproto-identity/)** - Core identity management with multi-method DID resolution (plc, web, key), DNS/HTTP handle resolution, and P-256/P-384/K-256 cryptographic operations. *Includes 4 CLI tools.*
14
+
- **[`atproto-record`](crates/atproto-record/)** - Cryptographic signature operations for AT Protocol records using IPLD DAG-CBOR serialization with AT-URI parsing support. *Includes 2 CLI tools.*
15
+
16
+
### Authentication & Authorization
17
+
18
+
- **[`atproto-oauth`](crates/atproto-oauth/)** - Complete OAuth 2.0 implementation with AT Protocol security extensions including DPoP (RFC 9449), PKCE (RFC 7636), JWT operations, and secure storage abstractions.
19
+
- **[`atproto-oauth-aip`](crates/atproto-oauth-aip/)** - OAuth AIP (Identity Provider) implementation providing complete authorization code flow with PAR, token exchange, and AT Protocol session management.
20
+
- **[`atproto-oauth-axum`](crates/atproto-oauth-axum/)** - Production-ready Axum web handlers for OAuth endpoints including authorization callbacks, JWKS endpoints, and client metadata. *Includes 1 CLI tool.*
16
21
17
-
### Web Framework Integration
22
+
### Client & Service Development
18
23
19
-
- **[`atproto-oauth-axum`](crates/atproto-oauth-axum/)** - Axum web handlers for OAuth endpoints. Includes 1 CLI tool for OAuth client testing.
20
-
- **[`atproto-xrpcs`](crates/atproto-xrpcs/)** - XRPC service components with JWT authorization extractors.
21
-
- **[`atproto-xrpcs-helloworld`](crates/atproto-xrpcs-helloworld/)** - Example XRPC service implementation with DID web support.
24
+
- **[`atproto-client`](crates/atproto-client/)** - HTTP client library supporting multiple authentication methods (DPoP, Bearer tokens, sessions) with native XRPC protocol operations and repository management. *Includes 3 CLI tools.*
25
+
- **[`atproto-xrpcs`](crates/atproto-xrpcs/)** - XRPC service framework providing JWT authorization extractors, DID resolution integration, and Axum middleware for building AT Protocol services.
26
+
- **[`atproto-xrpcs-helloworld`](crates/atproto-xrpcs-helloworld/)** - Complete example XRPC service demonstrating DID:web identity, service document generation, and JWT authentication patterns. *Includes 1 service binary.*
22
27
23
-
### Event Streaming
28
+
### Real-time Event Processing
24
29
25
-
- **[`atproto-jetstream`](crates/atproto-jetstream/)** - WebSocket event stream consumer with compression support. Includes 1 CLI tool for event consumption.
30
+
- **[`atproto-jetstream`](crates/atproto-jetstream/)** - WebSocket consumer for AT Protocol Jetstream events with Zstandard compression, automatic reconnection, and configurable event filtering. *Includes 1 CLI tool.*
26
31
27
32
## Quick Start
28
33
···
173
178
174
179
## Command Line Tools
175
180
176
-
The workspace includes 12 command-line tools across the crates. All CLI tools require the `clap` feature:
181
+
The workspace includes 11 command-line tools across multiple crates, providing ready-to-use utilities for AT Protocol development and testing. All CLI tools require the `clap` feature:
177
182
178
183
```bash
179
184
# Build with CLI support
···
224
229
225
230
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
226
231
232
+
## Architecture
233
+
234
+
These components are designed to work together as building blocks for AT Protocol applications:
235
+
236
+
- **Identity Layer**: `atproto-identity` provides the foundation for DID resolution and cryptographic operations
237
+
- **Authentication Layer**: `atproto-oauth*` crates handle complete OAuth 2.0 flows with AT Protocol security extensions
238
+
- **Application Layer**: `atproto-client` and `atproto-xrpcs*` enable client applications and service development
239
+
- **Data Layer**: `atproto-record` handles record signing and verification with proper IPLD serialization
240
+
- **Event Layer**: `atproto-jetstream` provides real-time event processing capabilities
241
+
242
+
## Use Cases
243
+
244
+
This workspace enables development of:
245
+
246
+
- **AT Protocol Identity Providers (AIPs)** - Complete OAuth servers with DID-based authentication
247
+
- **Personal Data Servers (PDS)** - XRPC services with JWT authorization and repository management
248
+
- **AT Protocol Clients** - Applications that authenticate and interact with AT Protocol services
249
+
- **Event Processing Systems** - Real-time processors for AT Protocol repository events
250
+
- **Development Tools** - CLI utilities for testing, debugging, and managing AT Protocol identities
251
+
252
+
## Contributing
253
+
254
+
Contributions are welcome! This project follows standard Rust development practices:
255
+
256
+
1. Fork this repository
257
+
2. Create a feature branch
258
+
3. Run tests: `cargo test`
259
+
4. Run linting: `cargo fmt && cargo clippy`
260
+
5. Submit a pull request
261
+
227
262
## Acknowledgments
228
263
229
-
This library was extracted from the [smokesignal.events](https://tangled.sh/@smokesignal.events/smokesignal) project, an open-source AT Protocol event and RSVP management application.
264
+
Parts of this project were extracted from the [smokesignal.events](https://tangled.sh/@smokesignal.events/smokesignal) project, an open-source AT Protocol event and RSVP management application. This extraction enables broader community use and contribution to AT Protocol tooling in Rust.
+15
-7
crates/atproto-client/README.md
+15
-7
crates/atproto-client/README.md
···
1
1
# atproto-client
2
2
3
-
HTTP client library for AT Protocol services with DPoP authentication support.
3
+
AT Protocol HTTP client with authentication support.
4
4
5
5
## Overview
6
6
7
-
`atproto-client` provides HTTP client functionality specifically designed for interacting with AT Protocol endpoints. This library handles both basic HTTP operations and DPoP-authenticated requests required for secure AT Protocol communication.
7
+
HTTP client for AT Protocol services supporting DPoP, bearer tokens, and sessions with native XRPC protocol operations and repository management.
8
8
9
-
## Binaries
9
+
## Features
10
10
11
-
All CLI tools require the `clap` feature:
11
+
- **Multiple authentication methods**: DPoP, Bearer tokens, and session-based authentication
12
+
- **XRPC protocol support**: Native support for AT Protocol's XRPC communication protocol
13
+
- **Repository operations**: Complete client for AT Protocol repository CRUD operations
14
+
- **Session management**: Authentication session creation, refresh, and validation
15
+
- **URL utilities**: Helper functions for AT Protocol URL construction and validation
12
16
13
-
- **atproto-client-auth**: Create and refresh authentication sessions with AT Protocol services using identifier and password
14
-
- **atproto-client-app-password**: Make authenticated XRPC calls using application-specific Bearer tokens and app passwords
15
-
- **atproto-client-dpop**: Make authenticated XRPC calls using DPoP (Demonstration of Proof-of-Possession) tokens for enhanced security
17
+
## CLI Tools
18
+
19
+
The following command-line tools are available when built with the `clap` feature:
20
+
21
+
- **`atproto-client-auth`**: Create and refresh authentication sessions using identifier and password
22
+
- **`atproto-client-app-password`**: Make authenticated XRPC calls using app password Bearer tokens
23
+
- **`atproto-client-dpop`**: Make authenticated XRPC calls using DPoP (Demonstration of Proof-of-Possession) tokens
16
24
17
25
## Usage
18
26
+2
-2
crates/atproto-client/src/client.rs
+2
-2
crates/atproto-client/src/client.rs
···
1
1
//! HTTP client operations with DPoP authentication support.
2
2
//!
3
-
//! Provides authenticated and unauthenticated HTTP request functions for JSON APIs,
4
-
//! with support for DPoP (Demonstration of Proof-of-Possession) authentication.
3
+
//! Authenticated and unauthenticated HTTP requests for JSON APIs
4
+
//! with DPoP (Demonstration of Proof-of-Possession) support.
5
5
6
6
use crate::errors::{ClientError, DPoPError};
7
7
use anyhow::Result;
+3
-9
crates/atproto-client/src/com_atproto_repo.rs
+3
-9
crates/atproto-client/src/com_atproto_repo.rs
···
1
-
//! AT Protocol repository operations for record management.
2
-
//!
3
-
//! This module provides client functions for interacting with AT Protocol repository endpoints,
4
-
//! including CRUD operations for records with DPoP authentication. Supports the `com.atproto.repo`
5
-
//! XRPC methods for managing user data in AT Protocol repositories.
6
-
//!
7
-
//! ## Operations
1
+
//! AT Protocol repository operations.
8
2
//!
9
-
//! - **`get_record()`**: Retrieve a specific record by repository, collection, and key
10
-
//! - **`list_records()`**: List records in a collection with pagination support
3
+
//! Client functions for com.atproto.repo XRPC methods including
4
+
//! record CRUD operations with DPoP authentication support.
11
5
//! - **`create_record()`**: Create a new record in a repository
12
6
//! - **`put_record()`**: Update or create a record with a specific key
13
7
//! - **`delete_record()`**: Delete a record from a repository
+3
-9
crates/atproto-client/src/com_atproto_server.rs
+3
-9
crates/atproto-client/src/com_atproto_server.rs
···
1
-
//! AT Protocol server operations for session management.
2
-
//!
3
-
//! This module provides client functions for interacting with AT Protocol server endpoints,
4
-
//! including session creation and refresh operations using app passwords. Supports the
5
-
//! `com.atproto.server` XRPC methods for authentication and session management.
6
-
//!
7
-
//! ## Operations
1
+
//! AT Protocol server authentication operations.
8
2
//!
9
-
//! - **`create_session()`**: Create a new authentication session with app password
10
-
//! - **`refresh_session()`**: Refresh an existing authentication session
3
+
//! Client functions for com.atproto.server XRPC methods including
4
+
//! session creation and refresh with app password authentication.
11
5
//! - **`create_app_password()`**: Create a new app password for authenticated account
12
6
//!
13
7
//! ## Request/Response Types
+3
-19
crates/atproto-client/src/lib.rs
+3
-19
crates/atproto-client/src/lib.rs
···
1
-
//! # AT Protocol HTTP Client Library
2
-
//!
3
-
//! Comprehensive HTTP client library for AT Protocol services with support for multiple
4
-
//! authentication methods and XRPC protocol operations. Provides both low-level HTTP
5
-
//! client functionality and high-level AT Protocol specific operations.
6
-
//!
7
-
//! ## Key Features
8
-
//!
9
-
//! - **Multiple Authentication Methods**: DPoP, Bearer tokens, and session-based authentication
10
-
//! - **XRPC Protocol Support**: Native support for AT Protocol's XRPC communication protocol
11
-
//! - **Repository Operations**: Complete client for AT Protocol repository operations
12
-
//! - **Session Management**: Authentication session creation, refresh, and validation
13
-
//! - **Error Handling**: Structured error types with detailed context for debugging
14
-
//! - **URL Utilities**: Helper functions for AT Protocol URL construction and validation
1
+
//! AT Protocol HTTP client with authentication support.
15
2
//!
16
-
//! ## Architecture
17
-
//!
18
-
//! The library provides both raw HTTP client capabilities and AT Protocol specific abstractions:
19
-
//!
20
-
//! - **`client`**: Core HTTP client with authentication middleware support
3
+
//! HTTP client for AT Protocol services supporting DPoP, bearer tokens, and sessions
4
+
//! with native XRPC protocol operations and repository management.
21
5
//! - **`url`**: URL construction and validation utilities for AT Protocol endpoints
22
6
//! - **`com::atproto::repo`**: Repository operations for record management
23
7
//! - **`com::atproto::server`**: Server operations for authentication and session management
+3
-3
crates/atproto-client/src/url.rs
+3
-3
crates/atproto-client/src/url.rs
···
1
-
//! URL construction utilities for building HTTP endpoints.
1
+
//! URL construction utilities for HTTP endpoints.
2
2
//!
3
-
//! Provides flexible URL building with parameter encoding and query string generation
4
-
//! for constructing well-formed HTTP request URLs.
3
+
//! Build well-formed HTTP request URLs with parameter encoding
4
+
//! and query string generation.
5
5
6
6
/// A single query parameter as a key-value pair.
7
7
pub type QueryParam<'a> = (&'a str, &'a str);
+16
-17
crates/atproto-identity/README.md
+16
-17
crates/atproto-identity/README.md
···
1
1
# atproto-identity
2
2
3
-
Comprehensive Rust library for AT Protocol identity management with DID resolution, handle resolution, and cryptographic key operations.
3
+
AT Protocol identity management for DID resolution, handle resolution, and cryptographic operations.
4
4
5
5
## Overview
6
6
7
-
`atproto-identity` provides full functionality for DID resolution, handle resolution, and identity document management across multiple DID methods. This library supports complete AT Protocol identity workflows including DNS/HTTP resolution, DID document caching, cryptographic operations, and structured error handling.
7
+
Core identity functionality for AT Protocol applications including multi-method DID resolution (plc, web, key), DNS/HTTP handle resolution, and P-256/P-384/K-256 key operations.
8
8
9
9
## Features
10
10
11
-
- **Multi-method DID resolution**: Support for `did:plc` and `did:web` methods
12
-
- **Handle resolution**: DNS TXT record and HTTP `.well-known` endpoint resolution
13
-
- **Cryptographic operations**: P-256, P-384, and K-256 elliptic curve support
14
-
- **Identity validation**: Input validation for handles and DIDs
15
-
- **Document storage**: LRU cache-based DID document storage
16
-
- **Configuration management**: Environment variable and DNS configuration
17
-
- **CLI tools**: Command-line utilities for identity operations (requires `clap` feature)
11
+
- **Multi-method DID resolution**: Support for `did:plc`, `did:web`, and `did:key` methods
12
+
- **Handle resolution**: DNS TXT record and HTTP `.well-known` endpoint resolution with conflict detection
13
+
- **Cryptographic operations**: P-256, P-384, and K-256 elliptic curve key generation, signing, and validation
14
+
- **Identity validation**: Input validation for handles and DIDs following AT Protocol specifications
15
+
- **Document storage**: LRU cache-based DID document storage with pluggable backends
16
+
- **Configuration management**: Environment variable handling and DNS nameserver configuration
18
17
19
-
## Binaries
18
+
## CLI Tools
20
19
21
-
All CLI tools require the `clap` feature and use consistent command-line argument processing:
20
+
The following command-line tools are available when built with the `clap` and `hickory-dns` features:
22
21
23
-
- **atproto-identity-resolve**: Resolve AT Protocol handles and DIDs to canonical identifiers
24
-
- **atproto-identity-key**: Generate and manage cryptographic keys (P-256, P-384, K-256)
25
-
- **atproto-identity-sign**: Create cryptographic signatures of JSON data
26
-
- **atproto-identity-validate**: Validate cryptographic signatures
22
+
- **`atproto-identity-resolve`**: Resolve AT Protocol handles and DIDs to canonical identifiers with optional DID document output
23
+
- **`atproto-identity-key`**: Generate cryptographic keys for P-256, P-384, and K-256 curves
24
+
- **`atproto-identity-sign`**: Create cryptographic signatures of JSON data using private keys
25
+
- **`atproto-identity-validate`**: Validate cryptographic signatures against public keys
27
26
28
27
## Library Usage
29
28
···
59
58
60
59
```bash
61
60
# Build with CLI support
62
-
cargo build --features clap --bins
61
+
cargo build --features clap,hickory-dns --bins
63
62
64
63
# Resolve a handle to DID
65
-
cargo run --features clap --bin atproto-identity-resolve -- alice.bsky.social
64
+
cargo run --features clap,hickory-dns --bin atproto-identity-resolve -- alice.bsky.social
66
65
67
66
# Generate a new P-256 key
68
67
cargo run --features clap --bin atproto-identity-key -- generate p256
+2
-3
crates/atproto-identity/src/config.rs
+2
-3
crates/atproto-identity/src/config.rs
···
1
1
//! Configuration management for AT Protocol identity operations.
2
2
//!
3
-
//! Provides utilities for reading environment variables, parsing configuration values,
4
-
//! and managing DNS nameservers and TLS certificate bundles. Supports fallback defaults
5
-
//! and structured error handling for missing or invalid configuration.
3
+
//! Environment variable utilities, DNS nameserver configuration, and TLS certificate
4
+
//! bundle management with structured error handling.
6
5
7
6
use crate::errors::ConfigError;
8
7
use anyhow::Result;
+3
-9
crates/atproto-identity/src/key.rs
+3
-9
crates/atproto-identity/src/key.rs
···
1
-
//! Cryptographic key operations for AT Protocol identity management.
2
-
//!
3
-
//! This module provides utilities for working with elliptic curve cryptographic keys
4
-
//! used in AT Protocol DID documents and identity verification. Supports P-256
5
-
//! (secp256r1), P-384 (secp384r1), and K-256 (secp256k1) curves with operations for key identification,
6
-
//! signature validation, and content signing.
7
-
//!
8
-
//! # Supported Key Types
1
+
//! Cryptographic key operations for AT Protocol identity.
9
2
//!
10
-
//! - **P-256** (secp256r1/ES256): NIST standard curve, commonly used in web standards
3
+
//! Elliptic curve cryptography for P-256, P-384, and K-256 curves including
4
+
//! key identification, signature validation, and content signing.
11
5
//! - **P-384** (secp384r1/ES384): NIST standard curve, providing higher security than P-256
12
6
//! - **K-256** (secp256k1/ES256K): Bitcoin curve, widely used in blockchain applications
13
7
//!
+3
-29
crates/atproto-identity/src/lib.rs
+3
-29
crates/atproto-identity/src/lib.rs
···
1
-
//! # AT Protocol Identity Management Library
2
-
//!
3
-
//! Comprehensive Rust library for AT Protocol identity operations including DID resolution,
4
-
//! handle resolution, and cryptographic key management. This is the core identity management
5
-
//! library for building AT Protocol applications and services.
6
-
//!
7
-
//! ## Key Features
8
-
//!
9
-
//! - **Multi-Method DID Resolution**: Support for `did:plc`, `did:web`, and `did:key` methods
10
-
//! - **Handle Resolution**: DNS and HTTP-based handle-to-DID resolution with conflict detection
11
-
//! - **Cryptographic Key Operations**: P-256, P-384, and K-256 key generation, signing, and validation
12
-
//! - **DID Document Management**: Parsing, validation, and caching of DID documents
13
-
//! - **Storage Abstraction**: Pluggable storage with LRU cache implementation
14
-
//! - **Configuration Management**: Environment-based configuration with validation
15
-
//! - **Error Handling**: Structured error types with descriptive messages
16
-
//!
17
-
//! ## Architecture
18
-
//!
19
-
//! The library is organized into focused modules that can be used independently or together:
20
-
//!
21
-
//! - **`resolve`**: Core identity resolution logic for handles and DIDs
22
-
//! - **`plc`**: PLC directory client for `did:plc` resolution
23
-
//! - **`web`**: Web DID client for `did:web` resolution and URL conversion
24
-
//! - **`key`**: Cryptographic operations including signature validation and key identification
25
-
//! - **`model`**: Data structures for DID documents and AT Protocol entities
26
-
//! - **`validation`**: Input validation for handles and DIDs
27
-
//! - **`storage`**: Storage abstraction for DID document caching
28
-
//! - **`config`**: Configuration management and environment variable handling
1
+
//! AT Protocol identity management for DID resolution, handle resolution, and cryptographic operations.
29
2
//!
30
-
//! ## Command-Line Tools
3
+
//! This crate provides core identity functionality for AT Protocol applications including multi-method
4
+
//! DID resolution (plc, web, key), DNS/HTTP handle resolution, and P-256/P-384/K-256 key operations.
31
5
//!
32
6
//! When built with the `clap` feature, provides comprehensive CLI tools:
33
7
//!
+2
-3
crates/atproto-identity/src/model.rs
+2
-3
crates/atproto-identity/src/model.rs
···
1
1
//! Data structures for DID documents and AT Protocol entities.
2
2
//!
3
-
//! Defines the core data models used throughout the AT Protocol identity system
4
-
//! including DID documents, services, and verification methods. All structures
5
-
//! support JSON serialization/deserialization for working with AT Protocol APIs.
3
+
//! Core data models for AT Protocol identity including DID documents, services,
4
+
//! and verification methods with full JSON serialization support.
6
5
7
6
use serde::{Deserialize, Serialize};
8
7
use serde_json::Value;
+3
-9
crates/atproto-identity/src/plc.rs
+3
-9
crates/atproto-identity/src/plc.rs
···
1
-
//! # PLC Directory Client
2
-
//!
3
-
//! Simple HTTP client for querying PLC (Public Ledger of Credentials) directories to retrieve
4
-
//! DID documents for `did:plc` identifiers. The PLC system serves as a centralized registry
5
-
//! for AT Protocol DIDs.
6
-
//!
7
-
//! ## Usage
1
+
//! PLC directory client for did:plc resolution.
8
2
//!
9
-
//! The primary function `query()` fetches complete DID documents from PLC directory servers
10
-
//! using HTTPS requests to the standard PLC API endpoint format.
3
+
//! Fetches DID documents from PLC directory servers using HTTPS requests
4
+
//! to resolve did:plc identifiers in the AT Protocol ecosystem.
11
5
12
6
use tracing::{Instrument, instrument};
13
7
+3
-9
crates/atproto-identity/src/resolve.rs
+3
-9
crates/atproto-identity/src/resolve.rs
···
1
-
//! # Core Resolution Logic
2
-
//!
3
-
//! Provides comprehensive resolution capabilities for AT Protocol identities including handle-to-DID
4
-
//! resolution via DNS TXT records and HTTPS well-known endpoints, input parsing for multiple
5
-
//! identifier formats, and DNS resolver configuration.
6
-
//!
7
-
//! ## Key Features
1
+
//! AT Protocol identity resolution for handles and DIDs.
8
2
//!
9
-
//! - **Multi-method resolution**: Uses both DNS and HTTP methods for handle resolution
10
-
//! - **Input parsing**: Automatically detects and parses handles, `did:plc`, and `did:web` identifiers
3
+
//! Resolves AT Protocol identities via DNS TXT records and HTTPS well-known endpoints,
4
+
//! with automatic input detection for handles, did:plc, and did:web identifiers.
11
5
//! - **Validation**: Ensures DNS and HTTP resolution methods agree on the resolved DID
12
6
//! - **Custom DNS**: Supports custom DNS nameservers for resolution
13
7
//!
+3
-6
crates/atproto-identity/src/storage.rs
+3
-6
crates/atproto-identity/src/storage.rs
···
1
-
//! DID document storage abstraction for AT Protocol identity management.
1
+
//! DID document storage abstraction.
2
2
//!
3
-
//! This module provides the `DidDocumentStorage` trait for implementing DID document CRUD operations
4
-
//! across different storage backends (database, file system, in-memory, etc.).
5
-
//!
6
-
//! The trait enables flexible storage implementations while maintaining a consistent
7
-
//! interface for DID document operations throughout the AT Protocol ecosystem.
3
+
//! Storage trait for DID document CRUD operations supporting multiple
4
+
//! backends (database, file system, memory) with consistent interface.
8
5
9
6
use anyhow::Result;
10
7
+3
-7
crates/atproto-identity/src/storage_lru.rs
+3
-7
crates/atproto-identity/src/storage_lru.rs
···
1
-
//! LRU-based implementation of the `DidDocumentStorage` trait.
2
-
//!
3
-
//! This module provides an in-memory implementation of DID document storage using an LRU (Least Recently Used)
4
-
//! cache. This is useful for scenarios where you want to cache DID documents with automatic
5
-
//! eviction of least recently used entries when the cache reaches its capacity limit.
1
+
//! LRU cache implementation for DID document storage.
6
2
//!
7
-
//! The implementation is thread-safe and can be used in concurrent environments where multiple
8
-
//! async tasks need to access the document storage simultaneously.
3
+
//! Thread-safe in-memory storage with automatic eviction of least recently used
4
+
//! DID documents when capacity is reached.
9
5
10
6
use std::num::NonZeroUsize;
11
7
use std::sync::{Arc, Mutex};
+2
-8
crates/atproto-identity/src/validation.rs
+2
-8
crates/atproto-identity/src/validation.rs
···
1
1
//! Input validation for AT Protocol handles and DIDs.
2
2
//!
3
-
//! This module provides comprehensive validation functions for various identifier formats
4
-
//! used in the AT Protocol ecosystem. All validation follows established standards including
5
-
//! RFC 1035 for hostnames and AT Protocol specifications for handle and DID formats.
6
-
//!
7
-
//! # Main Functions
8
-
//!
9
-
//! ## Handle Validation
10
-
//! - [`is_valid_handle`] - Validates and normalizes AT Protocol handles
3
+
//! Validates AT Protocol identifiers including handles, DIDs, and TLDs
4
+
//! following RFC 1035 and AT Protocol specifications.
11
5
//! - [`strip_handle_prefixes`] - Removes common handle prefixes (`@`, `at://`)
12
6
//!
13
7
//! ## DID Validation
+3
-9
crates/atproto-identity/src/web.rs
+3
-9
crates/atproto-identity/src/web.rs
···
1
-
//! # Web DID Client
2
-
//!
3
-
//! HTTP client for resolving `did:web` identifiers by converting DID formats to HTTPS URLs
4
-
//! and fetching DID documents from well-known locations. Supports both standard did:web
5
-
//! resolution and direct hostname-based document retrieval.
6
-
//!
7
-
//! ## Key Functions
1
+
//! Web DID client for did:web resolution.
8
2
//!
9
-
//! - **`did_web_to_url()`**: Converts `did:web:example.com` format to HTTPS well-known URLs
10
-
//! - **`query()`**: Fetches DID documents for did:web identifiers
3
+
//! Resolves did:web identifiers by converting them to HTTPS URLs and fetching
4
+
//! DID documents from well-known locations on web servers.
11
5
//! - **`query_hostname()`**: Direct document retrieval from hostname well-known endpoints
12
6
//!
13
7
//! ## URL Conversion
+13
-11
crates/atproto-jetstream/README.md
+13
-11
crates/atproto-jetstream/README.md
···
1
1
# atproto-jetstream
2
2
3
-
WebSocket event stream consumer library for AT Protocol Jetstream.
3
+
WebSocket consumer for AT Protocol Jetstream events.
4
4
5
5
## Overview
6
6
7
-
`atproto-jetstream` provides a comprehensive async stream consumer for AT Protocol Jetstream events. This library enables real-time consumption of AT Protocol repository events, identity changes, and account updates through WebSocket connections with support for filtering, compression, and graceful shutdown patterns.
7
+
Real-time event streaming with Zstandard compression, automatic reconnection, and configurable event filtering for AT Protocol repository changes.
8
8
9
-
## Binaries
9
+
## Features
10
10
11
-
- **atproto-jetstream-consumer**: Real-time event stream consumer with filtering and compression support
11
+
- **WebSocket streaming**: High-performance event consumption with automatic reconnection handling
12
+
- **Event filtering**: Configurable filtering by collections and DIDs for targeted event processing
13
+
- **Zstandard compression**: Built-in support for compressed event streams with custom dictionaries
14
+
- **Event handlers**: Flexible handler system supporting multiple custom event processors
15
+
- **Background processing**: Asynchronous event processing with graceful shutdown via cancellation tokens
16
+
- **Structured errors**: Comprehensive error handling with detailed error codes
12
17
13
-
## Features
18
+
## CLI Tools
14
19
15
-
- High-performance WebSocket streaming with automatic reconnection
16
-
- Flexible event handler system with multiple custom handlers
17
-
- Zstandard compression support with custom dictionaries
18
-
- Event filtering by collections and DIDs
19
-
- Graceful shutdown with cancellation token support
20
-
- Structured error handling with detailed error codes
20
+
The following command-line tool is available when built with the `clap` feature:
21
+
22
+
- **`atproto-jetstream-consumer`**: Real-time event stream consumer with filtering, compression, and background processing support
21
23
22
24
## Usage
23
25
+3
-3
crates/atproto-jetstream/src/consumer.rs
+3
-3
crates/atproto-jetstream/src/consumer.rs
···
1
-
//! Async stream consumer for AT Protocol Jetstream events
1
+
//! Async stream consumer for Jetstream events.
2
2
//!
3
-
//! This module provides structures for consuming events from an async stream
4
-
//! and dispatching them to registered event handlers.
3
+
//! WebSocket event consumption with background processing and
4
+
//! customizable event handler dispatch.
5
5
6
6
use anyhow::Result;
7
7
use async_trait::async_trait;
+3
-19
crates/atproto-jetstream/src/lib.rs
+3
-19
crates/atproto-jetstream/src/lib.rs
···
1
-
//! # AT Protocol Jetstream Consumer Library
2
-
//!
3
-
//! Real-time WebSocket consumer library for AT Protocol Jetstream events with high-performance
4
-
//! streaming and compression support. Enables applications to receive live AT Protocol events
5
-
//! such as posts, likes, follows, and other repository changes.
6
-
//!
7
-
//! ## Key Features
8
-
//!
9
-
//! - **WebSocket Streaming**: Real-time event consumption via WebSocket connections
10
-
//! - **Zstandard Compression**: Built-in support for Zstandard (zstd) compressed event streams
11
-
//! - **Background Processing**: Asynchronous event processing with configurable concurrency
12
-
//! - **Resilient Connections**: Automatic reconnection handling for production reliability
13
-
//! - **Event Filtering**: Configurable filtering for specific event types and collections
14
-
//! - **Performance Optimized**: Low-latency event processing with minimal overhead
1
+
//! WebSocket consumer for AT Protocol Jetstream events.
15
2
//!
16
-
//! ## Architecture
17
-
//!
18
-
//! The library provides a high-level consumer interface with customizable event handlers:
19
-
//!
20
-
//! - **`consumer`**: Core WebSocket consumer with event handling and connection management
3
+
//! Real-time event streaming with Zstandard compression, automatic reconnection,
4
+
//! and configurable event filtering for AT Protocol repository changes.
21
5
//!
22
6
//! ## Command-Line Tools
23
7
//!
+12
-12
crates/atproto-oauth-aip/README.md
+12
-12
crates/atproto-oauth-aip/README.md
···
1
1
# atproto-oauth-aip
2
2
3
-
AT Protocol OAuth implementation for AT Protocol Identity Provider (AIP) integration. This crate provides high-level OAuth workflow functions for client applications that need to authenticate with AT Protocol services.
3
+
OAuth AIP (Identity Provider) implementation for AT Protocol.
4
4
5
5
## Overview
6
6
7
-
`atproto-oauth-aip` builds on top of the foundational `atproto-oauth` crate to provide a complete OAuth authentication workflow specifically tailored for AT Protocol. It handles the full OAuth flow including:
8
-
9
-
- OAuth metadata discovery
10
-
- Pushed Authorization Request (PAR) initiation
11
-
- Authorization code exchange
12
-
- AT Protocol session establishment
7
+
Complete OAuth 2.0 authorization code flow with PAR, PKCE, token exchange, and AT Protocol session management for identity providers.
13
8
14
9
## Features
15
10
16
-
- **PAR Support**: Enhanced security through Pushed Authorization Requests
17
-
- **AT Protocol Session Exchange**: Convert OAuth tokens to rich AT Protocol sessions
18
-
- **DPoP Integration**: Support for Demonstration of Proof-of-Possession tokens
19
-
- **Comprehensive Error Handling**: Typed errors for each OAuth operation
20
-
- **Async/Await**: Fully asynchronous implementation using Tokio
11
+
- **OAuth 2.0 authorization code flow**: Complete implementation with PKCE support for secure authentication
12
+
- **Pushed Authorization Requests (PAR)**: Enhanced security through server-side request storage
13
+
- **Token exchange**: Secure OAuth token issuance and refresh capabilities
14
+
- **AT Protocol session management**: Convert OAuth tokens to AT Protocol sessions with DID resolution
15
+
- **Resource validation**: OAuth protected resource and authorization server configuration validation
16
+
- **Structured error handling**: Comprehensive error types following AT Protocol conventions
17
+
18
+
## CLI Tools
19
+
20
+
This crate does not provide standalone CLI tools. It serves as a library for OAuth AIP implementations.
21
21
22
22
## Installation
23
23
+3
-19
crates/atproto-oauth-aip/src/lib.rs
+3
-19
crates/atproto-oauth-aip/src/lib.rs
···
1
-
//! # AT Protocol OAuth AIP (Identity Provider) Implementation
2
-
//!
3
-
//! This crate provides a comprehensive OAuth 2.0 workflow implementation for AT Protocol
4
-
//! Identity Providers (AIPs). It handles the complete OAuth flow including Pushed
5
-
//! Authorization Requests (PAR), token exchange, and session management according to
6
-
//! AT Protocol specifications.
7
-
//!
8
-
//! ## Key Features
9
-
//!
10
-
//! - **OAuth 2.0 Authorization Code Flow**: Complete implementation with PKCE support
11
-
//! - **Pushed Authorization Requests (PAR)**: Enhanced security through server-side request storage
12
-
//! - **Token Exchange**: Secure token issuance and refresh capabilities
13
-
//! - **Session Management**: AT Protocol session establishment and validation
14
-
//! - **Resource Validation**: OAuth protected resource and authorization server validation
1
+
//! OAuth AIP (Identity Provider) implementation for AT Protocol.
15
2
//!
16
-
//! ## Usage
17
-
//!
18
-
//! The primary entry point is the workflow module which provides functions for each
19
-
//! stage of the OAuth flow:
20
-
//!
3
+
//! Complete OAuth 2.0 authorization code flow with PAR, PKCE, token exchange,
4
+
//! and AT Protocol session management for identity providers.
21
5
//! ```rust,no_run
22
6
//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
23
7
//! use atproto_oauth_aip::workflow::{oauth_init, oauth_complete, session_exchange, OAuthClient};
+3
-5
crates/atproto-oauth-aip/src/resources.rs
+3
-5
crates/atproto-oauth-aip/src/resources.rs
···
1
+
//! OAuth resource discovery for AT Protocol identity providers.
2
+
1
3
use atproto_oauth::{
2
4
errors::OAuthClientError,
3
5
resources::{AuthorizationServer, OAuthProtectedResource},
4
6
};
5
7
6
-
/// Fetches OAuth protected resource metadata from an AIP server.
7
-
///
8
-
/// This function retrieves the OAuth protected resource configuration from
9
-
/// the well-known endpoint of an AT Protocol Identity Provider (AIP) server.
10
-
/// The metadata includes information about the protected resource endpoints
8
+
/// Fetch OAuth protected resource metadata from an AIP server.
11
9
/// and capabilities.
12
10
///
13
11
/// # Arguments
+3
-9
crates/atproto-oauth-aip/src/workflow.rs
+3
-9
crates/atproto-oauth-aip/src/workflow.rs
···
1
-
//! # OAuth 2.0 Workflow Implementation for AT Protocol Identity Providers
2
-
//!
3
-
//! This module provides a complete OAuth 2.0 authorization code flow implementation
4
-
//! specifically designed for AT Protocol Identity Providers (AIPs). It handles the
5
-
//! three main phases of OAuth authentication: initialization, completion, and session exchange.
6
-
//!
7
-
//! ## Workflow Overview
8
-
//!
9
-
//! The OAuth workflow consists of three main functions that handle different phases:
1
+
//! OAuth 2.0 workflow for AT Protocol identity providers.
10
2
//!
3
+
//! Complete authorization code flow implementation with PAR initialization,
4
+
//! code exchange, and AT Protocol session establishment.
11
5
//! 1. **Initialization (`oauth_init`)**: Creates a Pushed Authorization Request (PAR)
12
6
//! and returns the authorization URL for user consent
13
7
//! 2. **Completion (`oauth_complete`)**: Exchanges the authorization code for access tokens
+13
-11
crates/atproto-oauth-axum/README.md
+13
-11
crates/atproto-oauth-axum/README.md
···
1
1
# atproto-oauth-axum
2
2
3
-
Axum web handlers for AT Protocol OAuth 2.0 authorization server endpoints.
3
+
Axum web framework integration for AT Protocol OAuth.
4
4
5
5
## Overview
6
6
7
-
`atproto-oauth-axum` provides ready-to-use Axum web handlers that implement the complete AT Protocol OAuth 2.0 authorization server specification. This library handles OAuth client metadata discovery, JWKS endpoints, authorization callback processing, and includes a command-line OAuth login tool.
7
+
Production-ready OAuth handlers for authorization flows, callbacks, JWKS endpoints, and metadata with secure state management.
8
8
9
-
## Binaries
9
+
## Features
10
10
11
-
- **atproto-oauth-tool**: Complete OAuth login CLI tool for AT Protocol services
11
+
- **OAuth endpoint handlers**: Complete Axum handlers for authorization flows, callbacks, and metadata endpoints
12
+
- **JWKS endpoint**: JSON Web Key Set endpoint for public key distribution to authorization servers
13
+
- **Client metadata**: RFC 7591 compliant OAuth client metadata endpoint for dynamic registration
14
+
- **Callback processing**: OAuth authorization callback handler with state validation and token exchange
15
+
- **State management**: Secure OAuth state and request management with Axum extractors
16
+
- **Error handling**: Comprehensive error handling with proper HTTP status codes
12
17
13
-
## Features
18
+
## CLI Tools
14
19
15
-
- Complete OAuth server handlers for Axum web applications
16
-
- Client metadata endpoint with RFC 7591 compliance
17
-
- JWKS endpoint for JSON Web Key Set serving
18
-
- Authorization callback handler with token exchange
19
-
- Native Axum state management and request extractors
20
-
- AT Protocol compliance validation
20
+
The following command-line tool is available when built with the `clap` feature:
21
+
22
+
- **`atproto-oauth-tool`**: Complete OAuth login workflow tool for AT Protocol services with local callback server
21
23
22
24
## Usage
23
25
+2
-2
crates/atproto-oauth-axum/src/handle_complete.rs
+2
-2
crates/atproto-oauth-axum/src/handle_complete.rs
···
1
1
//! OAuth authorization callback handler.
2
2
//!
3
-
//! Handles the OAuth authorization callback by exchanging authorization codes for tokens,
4
-
//! validating OAuth state, and completing the OAuth flow with proper error handling.
3
+
//! Exchange authorization codes for tokens with state validation
4
+
//! and comprehensive error handling for OAuth completion.
5
5
6
6
use std::sync::Arc;
7
7
+3
-3
crates/atproto-oauth-axum/src/handle_jwks.rs
+3
-3
crates/atproto-oauth-axum/src/handle_jwks.rs
···
1
-
//! OAuth JSON Web Key Set (JWKS) endpoint handler.
1
+
//! JSON Web Key Set (JWKS) endpoint handler.
2
2
//!
3
-
//! Serves the JWKS endpoint for OAuth client public keys, enabling authorization servers
4
-
//! to verify JWT signatures from the OAuth client during authentication flows.
3
+
//! Serve OAuth client public keys for JWT signature verification
4
+
//! by authorization servers.
5
5
6
6
use atproto_oauth::jwk::{WrappedJsonWebKey, generate};
7
7
use axum::{Json, response::IntoResponse};
+2
-2
crates/atproto-oauth-axum/src/handler_metadata.rs
+2
-2
crates/atproto-oauth-axum/src/handler_metadata.rs
···
1
1
//! OAuth client metadata endpoint handler.
2
2
//!
3
-
//! Serves OAuth 2.0 client metadata according to RFC 7591, providing client configuration
4
-
//! information required for dynamic client registration and authorization server discovery.
3
+
//! RFC 7591 compliant client metadata for dynamic registration
4
+
//! and authorization server discovery.
5
5
6
6
use atproto_identity::key::to_public;
7
7
use axum::{Json, response::IntoResponse};
+3
-19
crates/atproto-oauth-axum/src/lib.rs
+3
-19
crates/atproto-oauth-axum/src/lib.rs
···
1
-
//! # AT Protocol OAuth Axum Integration Library
2
-
//!
3
-
//! Axum web framework integration for AT Protocol OAuth workflows with comprehensive
4
-
//! handler implementations for OAuth endpoints. Provides production-ready web handlers
5
-
//! for OAuth authorization, callback processing, and JWKS endpoint management.
6
-
//!
7
-
//! ## Key Features
8
-
//!
9
-
//! - **Axum Integration**: Native Axum web framework handlers for OAuth endpoints
10
-
//! - **OAuth Workflow Handlers**: Complete OAuth authorization and callback processing
11
-
//! - **JWKS Endpoint**: JSON Web Key Set endpoint for public key distribution
12
-
//! - **Metadata Endpoints**: OAuth authorization server metadata endpoint implementation
13
-
//! - **State Management**: Secure OAuth state and request management with storage abstraction
14
-
//! - **Error Handling**: Comprehensive error handling with proper HTTP status codes
1
+
//! Axum web framework integration for AT Protocol OAuth.
15
2
//!
16
-
//! ## Architecture
17
-
//!
18
-
//! The library provides Axum-compatible handlers and state management:
19
-
//!
20
-
//! - **`handle_init`**: OAuth authorization initiation handler
3
+
//! Production-ready OAuth handlers for authorization flows, callbacks,
4
+
//! JWKS endpoints, and metadata with secure state management.
21
5
//! - **`handle_complete`**: OAuth callback and completion handler
22
6
//! - **`handle_jwks`**: JWKS (JSON Web Key Set) endpoint handler
23
7
//! - **`handler_metadata`**: OAuth authorization server metadata handler
+3
-3
crates/atproto-oauth-axum/src/state.rs
+3
-3
crates/atproto-oauth-axum/src/state.rs
···
1
-
//! Axum state management for OAuth client configuration.
1
+
//! Axum state management for OAuth configuration.
2
2
//!
3
-
//! Provides request extractors and HTTP client wrappers for injecting OAuth client
4
-
//! configuration and HTTP clients into Axum request handlers.
3
+
//! Request extractors and HTTP client wrappers for OAuth
4
+
//! client configuration injection in handlers.
5
5
6
6
use atproto_identity::key::KeyData;
7
7
use axum::extract::{FromRef, FromRequestParts};
+13
-9
crates/atproto-oauth/README.md
+13
-9
crates/atproto-oauth/README.md
···
1
1
# atproto-oauth
2
2
3
-
OAuth 2.0 implementation for AT Protocol with DPoP support, PKCE, and JWT operations.
3
+
OAuth 2.0 implementation for AT Protocol.
4
4
5
5
## Overview
6
6
7
-
`atproto-oauth` provides comprehensive OAuth 2.0 functionality specifically designed for the AT Protocol ecosystem. This library implements DPoP (Demonstration of Proof-of-Possession), PKCE (Proof Key for Code Exchange), JWT operations, JWK management, and AT Protocol-specific OAuth validation.
7
+
Comprehensive OAuth support with DPoP, PKCE, JWT operations, and secure storage abstractions for AT Protocol authentication.
8
8
9
9
## Features
10
10
11
-
- **JWT operations**: Minting, verification, and validation with ES256/ES256K/ES384 support
12
-
- **JWK management**: Generation and conversion for P-256, P-384, and K-256 curves
13
-
- **PKCE implementation**: Secure OAuth flows with Proof Key for Code Exchange
14
-
- **DPoP support**: Demonstration of Proof-of-Possession with automatic retry middleware
15
-
- **OAuth discovery**: Resource discovery and AT Protocol validation
16
-
- **Request storage**: LRU cache-based OAuth request storage
17
-
- **Structured errors**: Comprehensive error handling with detailed error codes
11
+
- **JWT operations**: Token minting, verification, and validation with ES256/ES384/ES256K support
12
+
- **JWK management**: JSON Web Key generation and conversion for P-256, P-384, and K-256 curves
13
+
- **PKCE implementation**: RFC 7636 compliant Proof Key for Code Exchange for secure authorization flows
14
+
- **DPoP support**: RFC 9449 compliant Demonstration of Proof-of-Possession with automatic retry middleware
15
+
- **OAuth discovery**: Resource discovery and validation using RFC 8414 well-known endpoints
16
+
- **Storage abstractions**: Pluggable storage with LRU cache implementation for OAuth requests
17
+
- **Base64 encoding**: URL-safe base64 encoding/decoding utilities for JWT operations
18
+
19
+
## CLI Tools
20
+
21
+
This crate does not provide standalone CLI tools. OAuth workflow tools are available through the `atproto-oauth-axum` crate when built with the `clap` feature.
18
22
19
23
## Usage
20
24
+3
-9
crates/atproto-oauth/src/dpop.rs
+3
-9
crates/atproto-oauth/src/dpop.rs
···
1
-
//! DPoP (Demonstration of Proof-of-Possession) implementation for AT Protocol OAuth.
2
-
//!
3
-
//! This module provides functionality for creating and managing DPoP tokens as specified
4
-
//! in RFC 9449. DPoP is a security extension to OAuth 2.0 that allows clients to prove
5
-
//! possession of cryptographic keys by including a DPoP proof in HTTP requests.
1
+
//! DPoP (Demonstration of Proof-of-Possession) implementation.
6
2
//!
7
-
//! Key features:
8
-
//! - DPoP token generation for authorization and resource requests
9
-
//! - Automatic retry middleware for handling DPoP nonce challenges
10
-
//! - Support for ES256 signature algorithm with elliptic curve keys
3
+
//! RFC 9449 compliant DPoP token generation with automatic retry middleware
4
+
//! for nonce challenges and ES256 signature support.
11
5
12
6
use crate::errors::{JWKError, JWTError};
13
7
use anyhow::Result;
+3
-4
crates/atproto-oauth/src/encoding.rs
+3
-4
crates/atproto-oauth/src/encoding.rs
···
1
-
//! Base64 encoding and decoding utilities for AT Protocol OAuth.
1
+
//! Base64 encoding utilities for OAuth operations.
2
2
//!
3
-
//! Provides traits and implementations for converting JSON serializable types to and from
4
-
//! base64url-encoded format, commonly used in JWT headers and claims. Uses URL-safe base64
5
-
//! encoding without padding as specified by RFC 7515 for JSON Web Signature operations.
3
+
//! URL-safe base64 encoding/decoding for JWT headers and claims
4
+
//! following RFC 7515 specifications.
6
5
7
6
use anyhow::{Context, Result};
8
7
use base64::{Engine as _, engine::general_purpose};
+3
-5
crates/atproto-oauth/src/jwk.rs
+3
-5
crates/atproto-oauth/src/jwk.rs
···
1
-
//! JSON Web Key (JWK) generation and management for AT Protocol OAuth.
1
+
//! JSON Web Key (JWK) generation and management.
2
2
//!
3
-
//! Provides functionality for creating and managing JSON Web Keys with AT Protocol-specific
4
-
//! algorithm mappings. Supports bidirectional conversion between `atproto-identity` key data
5
-
//! and JWK format with proper algorithm identifiers for P-256 (ES256), P-384 (ES384), and
6
-
//! K-256 (ES256K) elliptic curves.
3
+
//! Convert between AT Protocol key data and JWK format with support
4
+
//! for P-256 (ES256), P-384 (ES384), and K-256 (ES256K) curves.
7
5
8
6
use anyhow::Result;
9
7
use atproto_identity::key::{KeyData, KeyType, to_public};
+3
-4
crates/atproto-oauth/src/jwt.rs
+3
-4
crates/atproto-oauth/src/jwt.rs
···
1
-
//! JSON Web Token (JWT) minting and verification for AT Protocol OAuth.
1
+
//! JSON Web Token (JWT) minting and verification.
2
2
//!
3
-
//! Provides functionality for creating and verifying JWT tokens with JOSE standard claims and
4
-
//! custom extensions for AT Protocol OAuth flows. Supports ES256, ES384, and ES256K elliptic curve
5
-
//! signature algorithms with comprehensive timestamp validation and structured error handling.
3
+
//! Create and verify JWTs with JOSE standard claims supporting
4
+
//! ES256, ES384, and ES256K signature algorithms.
6
5
7
6
use anyhow::Result;
8
7
use atproto_identity::key::{KeyData, KeyType, sign, to_public, validate};
+3
-3
crates/atproto-oauth/src/lib.rs
+3
-3
crates/atproto-oauth/src/lib.rs
···
1
-
//! OAuth 2.0 implementation for AT Protocol with DPoP support, PKCE, and JWT operations.
1
+
//! OAuth 2.0 implementation for AT Protocol.
2
2
//!
3
-
//! Provides binaries:
4
-
//! - `atproto-oauth-tool`: OAuth authentication workflow management (via atproto-oauth-axum crate)
3
+
//! Comprehensive OAuth support with DPoP, PKCE, JWT operations,
4
+
//! and secure storage abstractions for AT Protocol authentication.
5
5
6
6
#![forbid(unsafe_code)]
7
7
#![warn(missing_docs)]
+3
-9
crates/atproto-oauth/src/pkce.rs
+3
-9
crates/atproto-oauth/src/pkce.rs
···
1
-
//! PKCE (Proof Key for Code Exchange) implementation for OAuth 2.0.
2
-
//!
3
-
//! This module implements the PKCE security extension defined in RFC 7636, which protects
4
-
//! OAuth 2.0 authorization code flows from interception attacks. PKCE is particularly
5
-
//! important for public clients such as mobile applications and single-page applications
6
-
//! that cannot securely store client secrets.
7
-
//!
8
-
//! ## PKCE Flow
1
+
//! PKCE (Proof Key for Code Exchange) implementation.
9
2
//!
10
-
//! 1. **Generate**: Create a cryptographically random code verifier and its SHA256 challenge
3
+
//! RFC 7636 compliant PKCE for OAuth 2.0 authorization code flow
4
+
//! security with SHA256 challenge generation.
11
5
//! 2. **Authorize**: Send the code challenge with the authorization request
12
6
//! 3. **Exchange**: Send the original code verifier when exchanging the authorization code for tokens
13
7
//!
+3
-4
crates/atproto-oauth/src/resources.rs
+3
-4
crates/atproto-oauth/src/resources.rs
···
1
-
//! OAuth resource discovery and validation for AT Protocol Personal Data Servers.
1
+
//! OAuth resource discovery and validation.
2
2
//!
3
-
//! This module provides functionality to discover and validate OAuth 2.0 configuration
4
-
//! from AT Protocol Personal Data Servers (PDS) using RFC 8414 well-known endpoints
5
-
//! with AT Protocol specific requirements and validations.
3
+
//! Discover and validate OAuth 2.0 configuration from AT Protocol
4
+
//! PDS servers using RFC 8414 well-known endpoints.
6
5
7
6
use serde::Deserialize;
8
7
+3
-7
crates/atproto-oauth/src/storage.rs
+3
-7
crates/atproto-oauth/src/storage.rs
···
1
-
//! OAuth request storage abstraction for AT Protocol OAuth operations.
2
-
//!
3
-
//! This module provides the `OAuthRequestStorage` trait for implementing OAuth request CRUD operations
4
-
//! across different storage backends (database, file system, in-memory, etc.).
1
+
//! OAuth request storage abstraction.
5
2
//!
6
-
//! The trait enables flexible storage implementations while maintaining a consistent interface
7
-
//! for OAuth request management operations throughout the AT Protocol OAuth ecosystem, including
8
-
//! state tracking, expiration handling, and cleanup operations.
3
+
//! Storage trait for OAuth request CRUD operations supporting multiple
4
+
//! backends with state tracking and expiration handling.
9
5
10
6
use anyhow::Result;
11
7
+3
-7
crates/atproto-oauth/src/storage_lru.rs
+3
-7
crates/atproto-oauth/src/storage_lru.rs
···
1
-
//! LRU-based implementation of the `OAuthRequestStorage` trait.
2
-
//!
3
-
//! This module provides an in-memory implementation of OAuth request storage using an LRU (Least Recently Used)
4
-
//! cache. This is useful for scenarios where you want to cache OAuth requests with automatic
5
-
//! eviction of least recently used entries when the cache reaches its capacity limit.
1
+
//! LRU cache implementation for OAuth request storage.
6
2
//!
7
-
//! The implementation is thread-safe and can be used in concurrent environments where multiple
8
-
//! async tasks need to access the OAuth request storage simultaneously.
3
+
//! Thread-safe in-memory storage with automatic eviction of least recently used
4
+
//! OAuth requests when capacity is reached.
9
5
10
6
use std::num::NonZeroUsize;
11
7
use std::sync::{Arc, Mutex};
+3
-9
crates/atproto-oauth/src/workflow.rs
+3
-9
crates/atproto-oauth/src/workflow.rs
···
1
-
//! OAuth workflow implementation for AT Protocol authorization flows.
2
-
//!
3
-
//! This module provides a complete OAuth 2.0 authorization code flow implementation specifically
4
-
//! designed for AT Protocol, including Pushed Authorization Requests (PAR), DPoP security, PKCE
5
-
//! protection, and client assertion handling.
6
-
//!
7
-
//! ## OAuth Flow Components
1
+
//! OAuth workflow for AT Protocol authorization.
8
2
//!
9
-
//! - **`oauth_init()`**: Initiates OAuth flow with PAR request to authorization server
10
-
//! - **`oauth_complete()`**: Completes OAuth flow by exchanging authorization code for tokens
3
+
//! Complete OAuth 2.0 authorization code flow with PAR, DPoP, PKCE,
4
+
//! and client assertion support for AT Protocol authentication.
11
5
//! - **`OAuthClient`**: Client configuration with credentials and signing keys
12
6
//! - **`OAuthRequest`**: Tracking structure for ongoing authorization requests
13
7
//! - **`OAuthRequestState`**: Security parameters including state, nonce, and PKCE challenge
+11
-12
crates/atproto-record/README.md
+11
-12
crates/atproto-record/README.md
···
1
1
# atproto-record
2
2
3
-
Cryptographic signature operations for AT Protocol records with IPLD DAG-CBOR serialization and AT-URI parsing.
3
+
Cryptographic signature operations for AT Protocol records.
4
4
5
5
## Overview
6
6
7
-
`atproto-record` provides comprehensive signature operations for AT Protocol records, including cryptographic signing, verification, AT-URI parsing, and proper IPLD DAG-CBOR serialization. This library implements the AT Protocol signature format with proper `$sig` object handling for secure record attestation.
7
+
Sign and verify AT Protocol records using IPLD DAG-CBOR serialization with support for P-256, P-384, and K-256 cryptographic signatures. Includes AT-URI parsing for record identification.
8
8
9
9
## Features
10
10
11
-
- **Record signing**: Create cryptographic signatures on AT Protocol records
12
-
- **Signature verification**: Verify signatures against public keys and issuers
13
-
- **AT-URI parsing**: Parse and validate AT Protocol URIs into component parts
14
-
- **IPLD serialization**: Proper DAG-CBOR serialization for signature consistency
15
-
- **Multi-curve support**: Support for P-256, P-384, and K-256 elliptic curves
11
+
- **Record signing**: Create cryptographic signatures on AT Protocol records with proper $sig object handling
12
+
- **Signature verification**: Verify record signatures against public keys and issuer DIDs
13
+
- **AT-URI parsing**: Parse and validate AT Protocol URIs (at://authority/collection/record_key)
14
+
- **IPLD serialization**: DAG-CBOR serialization for signature consistency and integrity
15
+
- **Multi-curve support**: Support for P-256, P-384, and K-256 elliptic curve signatures
16
16
- **Structured errors**: Comprehensive error handling with detailed error types
17
-
- **CLI tools**: Command-line utilities for record operations (requires `clap` feature)
18
17
19
-
## Binaries
18
+
## CLI Tools
20
19
21
-
All CLI tools require the `clap` feature and use consistent command-line argument processing:
20
+
The following command-line tools are available when built with the `clap` feature:
22
21
23
-
- **atproto-record-sign**: Sign AT Protocol records with cryptographic signatures
24
-
- **atproto-record-verify**: Verify AT Protocol record signatures
22
+
- **`atproto-record-sign`**: Sign AT Protocol records with private keys and create signature objects
23
+
- **`atproto-record-verify`**: Verify AT Protocol record signatures against public keys and issuers
25
24
26
25
## Library Usage
27
26
+3
-9
crates/atproto-record/src/aturi.rs
+3
-9
crates/atproto-record/src/aturi.rs
···
1
-
//! # AT-URI Parsing
2
-
//!
3
-
//! Provides parsing and validation functionality for AT Protocol URIs (AT-URIs).
4
-
//! AT-URIs are used to identify records within AT Protocol repositories.
5
-
//!
6
-
//! ## Format
1
+
//! AT-URI parsing and validation.
7
2
//!
8
-
//! AT-URIs follow the format: `at://{authority}/{collection}/{record_key}`
9
-
//! where:
10
-
//! - `authority` is a DID (not a handle)
3
+
//! Parse AT Protocol URIs (at://authority/collection/record_key) for
4
+
//! identifying records within AT Protocol repositories.
11
5
//! - `collection` is an NSID identifying the record type
12
6
//! - `record_key` is the unique identifier for the specific record
13
7
+3
-4
crates/atproto-record/src/lib.rs
+3
-4
crates/atproto-record/src/lib.rs
···
1
-
//! Cryptographic signature operations for AT Protocol records with IPLD DAG-CBOR serialization.
1
+
//! Cryptographic signature operations for AT Protocol records.
2
2
//!
3
-
//! Provides binaries:
4
-
//! - `atproto-record-sign`: Sign AT Protocol records with private keys
5
-
//! - `atproto-record-verify`: Verify signatures on AT Protocol records
3
+
//! Sign and verify AT Protocol records using IPLD DAG-CBOR serialization
4
+
//! with support for P-256, P-384, and K-256 cryptographic signatures.
6
5
7
6
#![forbid(unsafe_code)]
8
7
#![warn(missing_docs)]
+2
-3
crates/atproto-record/src/signature.rs
+2
-3
crates/atproto-record/src/signature.rs
···
1
1
//! AT Protocol record signature operations.
2
2
//!
3
-
//! Provides cryptographic signing and verification capabilities for AT Protocol records using
4
-
//! elliptic curve digital signatures. Implements the AT Protocol signature format with proper
5
-
//! `$sig` object handling and IPLD DAG-CBOR serialization for secure record attestation.
3
+
//! Sign and verify AT Protocol records using elliptic curve signatures
4
+
//! with IPLD DAG-CBOR serialization and proper $sig object handling.
6
5
7
6
use atproto_identity::key::{KeyData, sign, validate};
8
7
use serde_json::json;
+12
-10
crates/atproto-xrpcs-helloworld/README.md
+12
-10
crates/atproto-xrpcs-helloworld/README.md
···
1
1
# atproto-xrpcs-helloworld
2
2
3
-
Example XRPC service implementation demonstrating AT Protocol service patterns.
3
+
Example XRPC service with DID:web identity and JWT authentication.
4
4
5
5
## Overview
6
6
7
-
`atproto-xrpcs-helloworld` provides a complete AT Protocol XRPC service that demonstrates DID web identity, service document generation, well-known endpoint handling, and JWT-based authentication using the `atproto-xrpcs` library.
7
+
Complete AT Protocol XRPC service demonstrating DID:web identity, service document generation, well-known endpoints, and JWT-based authentication patterns.
8
8
9
-
## Binaries
9
+
## Features
10
10
11
-
- **atproto-xrpcs-helloworld**: Complete XRPC service with DID web identity and authentication
11
+
- **Complete XRPC service**: Production-ready service implementation with authentication
12
+
- **DID:web identity**: Automatic service document generation with well-known endpoint support
13
+
- **JWT authorization**: Optional JWT-based authentication with DID document verification
14
+
- **Discovery endpoints**: Standard AT Protocol discovery endpoints for service metadata
15
+
- **Example patterns**: Reference implementation for building AT Protocol services
12
16
13
-
## Features
17
+
## CLI Tools
14
18
15
-
- Complete XRPC service implementation with authentication
16
-
- DID web identity with automatic service document generation
17
-
- Well-known endpoints for AT Protocol discovery
18
-
- Example authenticated and unauthenticated XRPC endpoint
19
-
- JWT authorization with DID document verification
19
+
The following service binary is available:
20
+
21
+
- **`atproto-xrpcs-helloworld`**: Complete XRPC service demonstrating AT Protocol patterns with DID:web identity and optional JWT authentication
20
22
21
23
## Usage
22
24
+1
-1
crates/atproto-xrpcs-helloworld/src/main.rs
+1
-1
crates/atproto-xrpcs-helloworld/src/main.rs
+11
-9
crates/atproto-xrpcs/README.md
+11
-9
crates/atproto-xrpcs/README.md
···
1
1
# atproto-xrpcs
2
2
3
-
XRPC service components library for AT Protocol with JWT authorization.
3
+
XRPC service framework for AT Protocol applications.
4
4
5
5
## Overview
6
6
7
-
`atproto-xrpcs` provides foundational components for building AT Protocol XRPC services. This library offers JWT-based authorization extractors that integrate with Axum web handlers, enabling secure XRPC endpoints with automatic DID document verification.
8
-
9
-
This is a library-only crate that provides reusable components for XRPC service development. For a complete example service implementation, see the `atproto-xrpcs-helloworld` crate.
7
+
Build AT Protocol services with JWT authorization, DID resolution, and cryptographic identity verification middleware.
10
8
11
9
## Features
12
10
13
-
- JWT authorization extractors for Axum web handlers
14
-
- Automatic DID document verification for caller identities
15
-
- Structured error handling with detailed error codes
16
-
- Native Axum integration for HTTP handlers
17
-
- Identity resolution support for AT Protocol
11
+
- **JWT authorization**: Comprehensive JWT token validation with DID-based issuer verification
12
+
- **DID resolution integration**: Automatic DID document resolution and key verification for authorization
13
+
- **Identity verification**: Cryptographic verification of JWT signatures using DID documents
14
+
- **Axum extractors**: Ready-to-use authorization extractors for Axum web handlers
15
+
- **Structured errors**: Specialized error types for authorization and XRPC operations
16
+
17
+
## CLI Tools
18
+
19
+
This crate does not provide standalone CLI tools. It serves as a foundational library for building XRPC services. See `atproto-xrpcs-helloworld` for a complete example service implementation.
18
20
19
21
## Usage
20
22
+3
-19
crates/atproto-xrpcs/src/lib.rs
+3
-19
crates/atproto-xrpcs/src/lib.rs
···
1
-
//! # AT Protocol XRPC Service Framework
2
-
//!
3
-
//! Service framework for building AT Protocol XRPC applications with built-in JWT authorization,
4
-
//! DID resolution, and identity verification. Provides the foundational components needed to
5
-
//! create production AT Protocol services and applications.
6
-
//!
7
-
//! ## Key Features
8
-
//!
9
-
//! - **JWT Authorization**: Comprehensive JWT token validation with DID-based issuer verification
10
-
//! - **XRPC Protocol Support**: Native implementation of AT Protocol's XRPC communication standard
11
-
//! - **DID Resolution Integration**: Automatic DID document resolution and key verification
12
-
//! - **Identity Verification**: Cryptographic verification of JWT signatures using DID documents
13
-
//! - **Authorization Middleware**: Reusable authorization components for Axum and other frameworks
14
-
//! - **Error Handling**: Structured error types for authorization and service operations
1
+
//! XRPC service framework for AT Protocol applications.
15
2
//!
16
-
//! ## Architecture
17
-
//!
18
-
//! The framework provides modular components for building XRPC services:
19
-
//!
20
-
//! - **`authorization`**: JWT validation and DID-based authorization middleware
3
+
//! Build AT Protocol services with JWT authorization, DID resolution,
4
+
//! and cryptographic identity verification middleware.
21
5
//! - **`errors`**: Specialized error types for authorization and XRPC operations
22
6
//!
23
7
//! ## Example Applications