A library for ATProtocol identities.

release: 0.12.0

Signed-off-by: Nick Gerakines <nick.gerakines@gmail.com>

Changed files
+52 -32
crates
atproto-client
atproto-identity
atproto-jetstream
atproto-oauth
atproto-oauth-aip
atproto-oauth-axum
atproto-record
atproto-xrpcs
atproto-xrpcs-helloworld
+20
CHANGELOG.md
··· 7 8 ## [Unreleased] 9 10 ## [0.11.3] - 2025-09-03 11 ### Added 12 - OAuth scope types, parsing, and utilities for the `atproto-oauth` crate
··· 7 8 ## [Unreleased] 9 10 + ## [0.12.0] - 2025-09-17 11 + ### Added 12 + - Unified `Auth` enum for authentication methods in `atproto-client` supporting None, DPoP, and AppPassword authentication 13 + - `com.atproto.server.deleteSession` support in `atproto-client` with AppPassword authentication requirement 14 + - `com.atproto.identity.resolveHandle` support in `atproto-client` for handle resolution 15 + - OAuth client credentials token flow in `atproto-oauth-aip` for service-to-service authentication 16 + - `session_exchange_with_options` function with optional `access_token_type` and `subject` parameters 17 + - Documentation for all Auth enum variants and authentication methods 18 + 19 + ### Changed 20 + - Updated all XRPC client methods to use the unified `Auth` enum pattern instead of optional DPoP parameters 21 + - Made `refresh_token` field optional in `TokenResponse` structure as not all token responses include refresh tokens 22 + - Refactored `session_exchange` to use `session_exchange_with_options` internally with backward compatibility 23 + - Enhanced error handling with new `InvalidAuthMethod` error variant in client errors 24 + 25 + ### Fixed 26 + - Removed unused imports and cleaned up code after Auth enum refactoring 27 + - Fixed doctest failures from outdated function signatures 28 + - Resolved compilation errors from type mismatches in error handling 29 + 30 ## [0.11.3] - 2025-09-03 31 ### Added 32 - OAuth scope types, parsing, and utilities for the `atproto-oauth` crate
+9 -9
Cargo.lock
··· 107 108 [[package]] 109 name = "atproto-client" 110 - version = "0.11.3" 111 dependencies = [ 112 "anyhow", 113 "atproto-identity", ··· 130 131 [[package]] 132 name = "atproto-identity" 133 - version = "0.11.3" 134 dependencies = [ 135 "anyhow", 136 "async-trait", ··· 157 158 [[package]] 159 name = "atproto-jetstream" 160 - version = "0.11.3" 161 dependencies = [ 162 "anyhow", 163 "async-trait", ··· 179 180 [[package]] 181 name = "atproto-oauth" 182 - version = "0.11.3" 183 dependencies = [ 184 "anyhow", 185 "async-trait", ··· 211 212 [[package]] 213 name = "atproto-oauth-aip" 214 - version = "0.11.3" 215 dependencies = [ 216 "anyhow", 217 "atproto-identity", ··· 226 227 [[package]] 228 name = "atproto-oauth-axum" 229 - version = "0.11.3" 230 dependencies = [ 231 "anyhow", 232 "async-trait", ··· 255 256 [[package]] 257 name = "atproto-record" 258 - version = "0.11.3" 259 dependencies = [ 260 "anyhow", 261 "atproto-identity", ··· 271 272 [[package]] 273 name = "atproto-xrpcs" 274 - version = "0.11.3" 275 dependencies = [ 276 "anyhow", 277 "async-trait", ··· 297 298 [[package]] 299 name = "atproto-xrpcs-helloworld" 300 - version = "0.11.3" 301 dependencies = [ 302 "anyhow", 303 "async-trait",
··· 107 108 [[package]] 109 name = "atproto-client" 110 + version = "0.12.0" 111 dependencies = [ 112 "anyhow", 113 "atproto-identity", ··· 130 131 [[package]] 132 name = "atproto-identity" 133 + version = "0.12.0" 134 dependencies = [ 135 "anyhow", 136 "async-trait", ··· 157 158 [[package]] 159 name = "atproto-jetstream" 160 + version = "0.12.0" 161 dependencies = [ 162 "anyhow", 163 "async-trait", ··· 179 180 [[package]] 181 name = "atproto-oauth" 182 + version = "0.12.0" 183 dependencies = [ 184 "anyhow", 185 "async-trait", ··· 211 212 [[package]] 213 name = "atproto-oauth-aip" 214 + version = "0.12.0" 215 dependencies = [ 216 "anyhow", 217 "atproto-identity", ··· 226 227 [[package]] 228 name = "atproto-oauth-axum" 229 + version = "0.12.0" 230 dependencies = [ 231 "anyhow", 232 "async-trait", ··· 255 256 [[package]] 257 name = "atproto-record" 258 + version = "0.12.0" 259 dependencies = [ 260 "anyhow", 261 "atproto-identity", ··· 271 272 [[package]] 273 name = "atproto-xrpcs" 274 + version = "0.12.0" 275 dependencies = [ 276 "anyhow", 277 "async-trait", ··· 297 298 [[package]] 299 name = "atproto-xrpcs-helloworld" 300 + version = "0.12.0" 301 dependencies = [ 302 "anyhow", 303 "async-trait",
+8 -8
Cargo.toml
··· 22 categories = ["command-line-utilities", "web-programming"] 23 24 [workspace.dependencies] 25 - atproto-client = { version = "0.11.3", path = "crates/atproto-client" } 26 - atproto-identity = { version = "0.11.3", path = "crates/atproto-identity" } 27 - atproto-oauth = { version = "0.11.3", path = "crates/atproto-oauth" } 28 - atproto-oauth-axum = { version = "0.11.3", path = "crates/atproto-oauth-axum" } 29 - atproto-oauth-aip = { version = "0.11.3", path = "crates/atproto-oauth-aip" } 30 - atproto-record = { version = "0.11.3", path = "crates/atproto-record" } 31 - atproto-xrpcs = { version = "0.11.3", path = "crates/atproto-xrpcs" } 32 - atproto-jetstream = { version = "0.11.3", path = "crates/atproto-jetstream" } 33 34 anyhow = "1.0" 35 async-trait = "0.1.88"
··· 22 categories = ["command-line-utilities", "web-programming"] 23 24 [workspace.dependencies] 25 + atproto-client = { version = "0.12.0", path = "crates/atproto-client" } 26 + atproto-identity = { version = "0.12.0", path = "crates/atproto-identity" } 27 + atproto-oauth = { version = "0.12.0", path = "crates/atproto-oauth" } 28 + atproto-oauth-axum = { version = "0.12.0", path = "crates/atproto-oauth-axum" } 29 + atproto-oauth-aip = { version = "0.12.0", path = "crates/atproto-oauth-aip" } 30 + atproto-record = { version = "0.12.0", path = "crates/atproto-record" } 31 + atproto-xrpcs = { version = "0.12.0", path = "crates/atproto-xrpcs" } 32 + atproto-jetstream = { version = "0.12.0", path = "crates/atproto-jetstream" } 33 34 anyhow = "1.0" 35 async-trait = "0.1.88"
+1 -1
Dockerfile
··· 66 LABEL org.opencontainers.image.description="AT Protocol identity management tools" 67 LABEL org.opencontainers.image.authors="Nick Gerakines <nick.gerakines@gmail.com>" 68 LABEL org.opencontainers.image.source="https://tangled.sh/@smokesignal.events/atproto-identity-rs" 69 - LABEL org.opencontainers.image.version="0.11.3" 70 LABEL org.opencontainers.image.licenses="MIT" 71 72 # Document available binaries
··· 66 LABEL org.opencontainers.image.description="AT Protocol identity management tools" 67 LABEL org.opencontainers.image.authors="Nick Gerakines <nick.gerakines@gmail.com>" 68 LABEL org.opencontainers.image.source="https://tangled.sh/@smokesignal.events/atproto-identity-rs" 69 + LABEL org.opencontainers.image.version="0.12.0" 70 LABEL org.opencontainers.image.licenses="MIT" 71 72 # Document available binaries
+5 -5
README.md
··· 35 36 ```toml 37 [dependencies] 38 - atproto-identity = "0.11.3" 39 - atproto-record = "0.11.3" 40 - atproto-oauth = "0.11.3" 41 - atproto-oauth-aip = "0.11.3" 42 - atproto-client = "0.11.3" 43 # Add others as needed 44 ``` 45
··· 35 36 ```toml 37 [dependencies] 38 + atproto-identity = "0.12.0" 39 + atproto-record = "0.12.0" 40 + atproto-oauth = "0.12.0" 41 + atproto-oauth-aip = "0.12.0" 42 + atproto-client = "0.12.0" 43 # Add others as needed 44 ``` 45
+1 -1
crates/atproto-client/Cargo.toml
··· 1 [package] 2 name = "atproto-client" 3 - version = "0.11.3" 4 description = "HTTP client for AT Protocol services with OAuth and identity integration" 5 readme = "README.md" 6 homepage = "https://tangled.sh/@smokesignal.events/atproto-identity-rs"
··· 1 [package] 2 name = "atproto-client" 3 + version = "0.12.0" 4 description = "HTTP client for AT Protocol services with OAuth and identity integration" 5 readme = "README.md" 6 homepage = "https://tangled.sh/@smokesignal.events/atproto-identity-rs"
+1 -1
crates/atproto-identity/Cargo.toml
··· 1 [package] 2 name = "atproto-identity" 3 - version = "0.11.3" 4 description = "AT Protocol identity management - DID resolution, handle resolution, and cryptographic operations" 5 readme = "README.md" 6 homepage = "https://tangled.sh/@smokesignal.events/atproto-identity-rs"
··· 1 [package] 2 name = "atproto-identity" 3 + version = "0.12.0" 4 description = "AT Protocol identity management - DID resolution, handle resolution, and cryptographic operations" 5 readme = "README.md" 6 homepage = "https://tangled.sh/@smokesignal.events/atproto-identity-rs"
+1 -1
crates/atproto-jetstream/Cargo.toml
··· 1 [package] 2 name = "atproto-jetstream" 3 - version = "0.11.3" 4 description = "AT Protocol Jetstream event consumer library with WebSocket streaming and compression support" 5 readme = "README.md" 6 homepage = "https://tangled.sh/@smokesignal.events/atproto-identity-rs"
··· 1 [package] 2 name = "atproto-jetstream" 3 + version = "0.12.0" 4 description = "AT Protocol Jetstream event consumer library with WebSocket streaming and compression support" 5 readme = "README.md" 6 homepage = "https://tangled.sh/@smokesignal.events/atproto-identity-rs"
+1 -1
crates/atproto-oauth-aip/Cargo.toml
··· 1 [package] 2 name = "atproto-oauth-aip" 3 - version = "0.11.3" 4 description = "ATProtocol AIP OAuth tools" 5 readme = "README.md" 6 homepage = "https://tangled.sh/@smokesignal.events/atproto-identity-rs"
··· 1 [package] 2 name = "atproto-oauth-aip" 3 + version = "0.12.0" 4 description = "ATProtocol AIP OAuth tools" 5 readme = "README.md" 6 homepage = "https://tangled.sh/@smokesignal.events/atproto-identity-rs"
+1 -1
crates/atproto-oauth-axum/Cargo.toml
··· 1 [package] 2 name = "atproto-oauth-axum" 3 - version = "0.11.3" 4 description = "Axum web framework integration for AT Protocol OAuth workflows" 5 readme = "README.md" 6 homepage = "https://tangled.sh/@smokesignal.events/atproto-identity-rs"
··· 1 [package] 2 name = "atproto-oauth-axum" 3 + version = "0.12.0" 4 description = "Axum web framework integration for AT Protocol OAuth workflows" 5 readme = "README.md" 6 homepage = "https://tangled.sh/@smokesignal.events/atproto-identity-rs"
+1 -1
crates/atproto-oauth/Cargo.toml
··· 1 [package] 2 name = "atproto-oauth" 3 - version = "0.11.3" 4 description = "OAuth workflow implementation for AT Protocol - PKCE, DPoP, and secure authentication flows" 5 readme = "README.md" 6 homepage = "https://tangled.sh/@smokesignal.events/atproto-identity-rs"
··· 1 [package] 2 name = "atproto-oauth" 3 + version = "0.12.0" 4 description = "OAuth workflow implementation for AT Protocol - PKCE, DPoP, and secure authentication flows" 5 readme = "README.md" 6 homepage = "https://tangled.sh/@smokesignal.events/atproto-identity-rs"
+1 -1
crates/atproto-record/Cargo.toml
··· 1 [package] 2 name = "atproto-record" 3 - version = "0.11.3" 4 description = "AT Protocol record signature operations - cryptographic signing and verification for AT Protocol records" 5 readme = "README.md" 6 homepage = "https://tangled.sh/@smokesignal.events/atproto-identity-rs"
··· 1 [package] 2 name = "atproto-record" 3 + version = "0.12.0" 4 description = "AT Protocol record signature operations - cryptographic signing and verification for AT Protocol records" 5 readme = "README.md" 6 homepage = "https://tangled.sh/@smokesignal.events/atproto-identity-rs"
+1 -1
crates/atproto-xrpcs-helloworld/Cargo.toml
··· 1 [package] 2 name = "atproto-xrpcs-helloworld" 3 - version = "0.11.3" 4 description = "Complete example implementation of an AT Protocol XRPC service with DID web functionality and JWT authentication" 5 edition.workspace = true 6 rust-version.workspace = true
··· 1 [package] 2 name = "atproto-xrpcs-helloworld" 3 + version = "0.12.0" 4 description = "Complete example implementation of an AT Protocol XRPC service with DID web functionality and JWT authentication" 5 edition.workspace = true 6 rust-version.workspace = true
+1 -1
crates/atproto-xrpcs/Cargo.toml
··· 1 [package] 2 name = "atproto-xrpcs" 3 - version = "0.11.3" 4 description = "Core building blocks for implementing AT Protocol XRPC services with JWT authorization" 5 edition.workspace = true 6 rust-version.workspace = true
··· 1 [package] 2 name = "atproto-xrpcs" 3 + version = "0.12.0" 4 description = "Core building blocks for implementing AT Protocol XRPC services with JWT authorization" 5 edition.workspace = true 6 rust-version.workspace = true