# Package Structure This document explains the organization and responsibilities of all packages in the Hash of Wisdom project. ## Directory Structure ``` / ├── cmd/ # Application entry points │ ├── server/ # Server application │ └── client/ # Client application ├── internal/ # Private application packages │ ├── application/ # Application layer (message handling) │ ├── config/ # Configuration management │ ├── lib/ # Shared utilities │ ├── metrics/ # Prometheus metrics │ ├── pow/ # Proof-of-Work implementation │ ├── protocol/ # Binary protocol codec │ ├── quotes/ # Quote service │ ├── server/ # TCP server implementation │ └── service/ # Business logic layer ├── test/ # Integration tests └── docs/ # Documentation ``` ## Package Responsibilities ### `cmd/server` **Entry point for the TCP server application** - Parses command-line flags and configuration - Initializes all components with dependency injection - Starts TCP server and metrics endpoints - Handles graceful shutdown signals ### `cmd/client` **Entry point for the client application** - Command-line interface for connecting to server - Handles proof-of-work solving on client side - Manages TCP connection lifecycle ### `internal/config` **Configuration management with cleanenv** - Defines configuration structures with YAML/env tags - Loads configuration from files and environment variables - Provides sensible defaults for all settings - Supports both development and production configurations ### `internal/lib/sl` **Shared logging utilities** - Structured logging helpers for consistent log formatting - Error attribute helpers for slog integration ### `internal/metrics` **Prometheus metrics collection** - Defines application-specific metrics (requests, errors, duration) - Provides simple counters and histograms for monitoring - Integrated at the infrastructure layer (TCP server) ### `internal/pow` **Proof-of-Work implementation** #### `internal/pow/challenge` - **Challenge Generation**: Creates HMAC-signed stateless challenges - **Verification**: Validates solutions against original challenges - **Security**: HMAC authentication prevents tampering - **Configuration**: Difficulty scaling, TTL management, secrets #### `internal/pow/solver` - **Solution Finding**: Brute-force nonce search with SHA-256 - **Optimization**: Efficient bit counting for difficulty verification - **Client-side**: Used by client to solve server challenges ### `internal/protocol` **Binary protocol codec** - **Message Types**: Challenge requests/responses, solution requests/responses, errors - **Encoding/Decoding**: JSON-based message serialization - **Streaming**: MessageDecoder for reading from TCP connections - **Validation**: Message structure and field validation - See [Protocol Specification](PROTOCOL.md) for detailed message flow and format ### `internal/quotes` **Quote service implementation** - **HTTP Client**: Fetches quotes from external APIs using resty - **Interface**: Clean abstraction for quote retrieval - **Error Handling**: Graceful degradation for network issues - **Timeout Management**: Configurable request timeouts ### `internal/server` **TCP server implementation** #### `internal/server/tcp.go` - **Connection Management**: Accept, handle, cleanup TCP connections - **Protocol Integration**: Uses protocol package for message handling - **Security**: Connection timeouts, slowloris protection - **Metrics**: Request tracking at infrastructure layer - **Lifecycle**: Graceful startup/shutdown with context #### `internal/server/config.go` - **Server Configuration**: Network settings, timeouts - **Functional Options**: Builder pattern for server customization ### `internal/application` **Application layer (message handling and coordination)** - **WisdomApplication**: Protocol message handler and coordinator - **Message Processing**: Handles challenge and solution requests from protocol layer - **Response Generation**: Creates appropriate protocol responses - **Service Coordination**: Orchestrates calls to business logic layer - **Error Handling**: Converts service errors to protocol error responses ### `internal/service` **Business logic layer (core domain services)** - **WisdomService**: Main business logic coordinator - **Challenge Workflow**: Manages challenge generation and validation - **Solution Workflow**: Handles solution verification and quote retrieval - **Clean Architecture**: Pure business logic, no I/O dependencies - **Testing**: Easily mockable interfaces for unit testing **Service Dependencies**: - `ChallengeGenerator` - Creates new challenges - `ChallengeVerifier` - Validates submitted solutions - `QuoteService` - Retrieves quotes after successful validation ### `test/integration` **End-to-end integration tests** - **Slowloris Protection**: Tests server resilience against slow attacks - **Connection Timeouts**: Validates timeout configurations - **Full Workflow**: Tests complete client-server interaction - **Real Components**: Uses actual TCP connections and protocol ## Dependency Flow ``` cmd/server ↓ internal/config → internal/server → internal/application → internal/service ↓ ↓ ↓ internal/protocol internal/protocol internal/pow internal/metrics internal/quotes ``` ## Architecture Benefits This package structure provides: - **Clear Separation**: Each package has a single, well-defined responsibility - **Testability**: Dependencies are injected, making testing straightforward - **Maintainability**: Changes are isolated to specific layers - **Scalability**: Clean interfaces allow for easy implementation swapping