# dora4/dorachat-authsdk architecture

> Architecture diagram of the GitHub repository dora4/dorachat-authsdk, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dora4/dorachat-authsdk
- Repository: https://github.com/dora4/dorachat-authsdk

## Overview

DoraChat Auth SDK is an Android library for wallet-based account authentication, session management, and authenticated API requests. The principal workflow starts in the sign-in screen: it checks wallet connectivity and password input, then delegates sign-in to AuthManager, which builds a protected request, calls the auth API, and updates token and user state. Later requests can attach access tokens and refresh them on 401 responses. The README also documents host-app initialization and optional payment integration. The graph follows sampled Kotlin and README evidence; profile state and event signaling are included, but their broader consumers are not established.

Main entry points: [`lib/src/main/java/com/dorachat/auth/AuthManager.kt`](https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/AuthManager.kt) (Auth manager), [`lib/src/main/java/com/dorachat/auth/AuthInterceptor.kt`](https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/AuthInterceptor.kt) (Auth interceptor), [`lib/src/main/java/com/dorachat/auth/AuthService.kt`](https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/AuthService.kt) (Auth API client), [`lib/src/main/java/com/dorachat/auth/SignInActivity.kt`](https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/SignInActivity.kt) (Sign-in screen)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["App Entry"]
  node_signin["Sign-in screen<br/>[SignInActivity.kt]"]
  node_sdk["SDK config<br/>[DoraChatSDK.kt]"]
end

subgraph group_authflow["Authentication"]
  node_authmanager["Auth manager<br/>[AuthManager.kt]"]
  node_requests["Request models<br/>[ReqSignIn.kt]"]
  node_securebuilder["Secure request builder"]
end

subgraph group_session["Session State"]
  node_tokenstore[("Encrypted tokens<br/>[TokenStore.kt]")]
  node_usermanager["User state<br/>[UserManager.kt]"]
  node_user["User model<br/>[DoraUser.kt]"]
  node_userinfo["User profile model<br/>[DoraUserInfo.kt]"]
  node_events["Auth events<br/>[SignInEvent.kt]"]
  node_expiredbus["Expired-session signal"]
end

subgraph group_network["API Security"]
  node_authservice["Auth API client<br/>[AuthService.kt]"]
  node_interceptor["Auth interceptor<br/>[AuthInterceptor.kt]"]
end

node_host(("Host app"))
node_wallet["Wallet integration"]
node_authserver(("Auth server"))
node_http["HTTP client"]

node_host -->|"initializes"| node_sdk
node_host -->|"configures"| node_interceptor
node_signin -->|"reads config"| node_sdk
node_signin -.->|"checks wallet"| node_wallet
node_signin -.->|"connects wallet"| node_wallet
node_signin -->|"submits credentials"| node_authmanager
node_authmanager -->|"creates request"| node_requests
node_authmanager -->|"encodes request"| node_securebuilder
node_authmanager -->|"calls sign-in"| node_authservice
node_authservice -->|"sends request"| node_authserver
node_authserver -->|"returns result"| node_authservice
node_authmanager -->|"saves tokens"| node_tokenstore
node_authmanager -->|"updates user"| node_usermanager
node_authmanager -->|"posts events"| node_events
node_authmanager -->|"calls sign-out"| node_authservice
node_authmanager -->|"checks token"| node_authservice
node_interceptor -->|"reads tokens"| node_tokenstore
node_interceptor -->|"intercepts requests"| node_http
node_interceptor -->|"builds refresh body"| node_securebuilder
node_interceptor -->|"requests refresh"| node_authserver
node_interceptor -->|"saves refreshed tokens"| node_tokenstore
node_interceptor -->|"signals expiration"| node_expiredbus
node_interceptor -->|"retries request"| node_http
node_authmanager -->|"reads config"| node_sdk
node_authmanager -->|"creates user"| node_user

click node_signin "https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/SignInActivity.kt"
click node_sdk "https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/DoraChatSDK.kt"
click node_authmanager "https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/AuthManager.kt"
click node_requests "https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/ReqSignIn.kt"
click node_securebuilder "https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/SecureRequestBuilder.kt"
click node_authservice "https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/AuthService.kt"
click node_interceptor "https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/AuthInterceptor.kt"
click node_tokenstore "https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/TokenStore.kt"
click node_usermanager "https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/UserManager.kt"
click node_user "https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/DoraUser.kt"
click node_userinfo "https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/DoraUserInfo.kt"
click node_events "https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/SignInEvent.kt"
click node_expiredbus "https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/SignInExpiredBus.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_signin,node_sdk,node_http toneBlue
class node_authmanager,node_requests,node_securebuilder toneAmber
class node_tokenstore,node_usermanager,node_user,node_userinfo,node_events,node_expiredbus,node_authserver toneMint
class node_authservice,node_interceptor toneRose
class node_host,node_wallet toneIndigo
```

## Components

### App Entry

- [Sign-in screen](https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/SignInActivity.kt): `lib/src/main/java/com/dorachat/auth/SignInActivity.kt`
- [SDK config](https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/DoraChatSDK.kt): `lib/src/main/java/com/dorachat/auth/DoraChatSDK.kt`

### Authentication

- [Auth manager](https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/AuthManager.kt): `lib/src/main/java/com/dorachat/auth/AuthManager.kt`
- [Request models](https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/ReqSignIn.kt): `lib/src/main/java/com/dorachat/auth/ReqSignIn.kt`
- [Secure request builder](https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/SecureRequestBuilder.kt): `lib/src/main/java/com/dorachat/auth/SecureRequestBuilder.kt`

### Session State

- [Encrypted tokens](https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/TokenStore.kt): `lib/src/main/java/com/dorachat/auth/TokenStore.kt`
- [User state](https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/UserManager.kt): `lib/src/main/java/com/dorachat/auth/UserManager.kt`
- [User model](https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/DoraUser.kt): `lib/src/main/java/com/dorachat/auth/DoraUser.kt`
- [User profile model](https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/DoraUserInfo.kt): `lib/src/main/java/com/dorachat/auth/DoraUserInfo.kt`
- [Auth events](https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/SignInEvent.kt): `lib/src/main/java/com/dorachat/auth/SignInEvent.kt`
- [Expired-session signal](https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/SignInExpiredBus.kt): `lib/src/main/java/com/dorachat/auth/SignInExpiredBus.kt`

### API Security

- [Auth API client](https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/AuthService.kt): `lib/src/main/java/com/dorachat/auth/AuthService.kt`
- [Auth interceptor](https://github.com/dora4/dorachat-authsdk/blob/main/lib/src/main/java/com/dorachat/auth/AuthInterceptor.kt): `lib/src/main/java/com/dorachat/auth/AuthInterceptor.kt`

### Other components

- **Host app**
- **Wallet integration**
- **Auth server**
- **HTTP client**

## Connections

- Host app → SDK config: initializes
- Host app → Auth interceptor: configures
- Sign-in screen → SDK config: reads config
- Sign-in screen → Wallet integration: checks wallet
- Sign-in screen → Wallet integration: connects wallet
- Sign-in screen → Auth manager: submits credentials
- Auth manager → Request models: creates request
- Auth manager → Secure request builder: encodes request
- Auth manager → Auth API client: calls sign-in
- Auth API client → Auth server: sends request
- Auth server → Auth API client: returns result
- Auth manager → Encrypted tokens: saves tokens
- Auth manager → User state: updates user
- Auth manager → Auth events: posts events
- Auth manager → Auth API client: calls sign-out
- Auth manager → Auth API client: checks token
- Auth interceptor → Encrypted tokens: reads tokens
- Auth interceptor → HTTP client: intercepts requests
- Auth interceptor → Secure request builder: builds refresh body
- Auth interceptor → Auth server: requests refresh
- Auth interceptor → Encrypted tokens: saves refreshed tokens
- Auth interceptor → Expired-session signal: signals expiration
- Auth interceptor → HTTP client: retries request
- Auth manager → SDK config: reads config
- Auth manager → User model: creates user
