# bariskisir/jevsharp architecture

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

- Interactive diagram: https://gitdiagram.com/bariskisir/jevsharp
- Repository: https://github.com/bariskisir/jevsharp

## Overview

JevSharp is a .NET SDK for submitting a shared state and typed decision questions to Jev-compatible providers and returning typed answers. The main flow is caller → request → configured client → protocol encoding and HTTP evaluation → decoded response. Provider selection, authentication, retries, errors, failover, dependency-injection registration, and optional resilience are supporting capabilities. The map follows the README and source index; some internal transport and resilience details were not sampled, so their connections are limited or marked unverified.

Main entry points: [`src/JevSharp.Core/Clients/JevClient.cs`](https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Core/Clients/JevClient.cs) (Evaluation client), [`src/JevSharp.Abstractions/Requests/JevRequest.cs`](https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Abstractions/Requests/JevRequest.cs) (Evaluation request), [`src/JevSharp/DependencyInjection/JevClientFactory.cs`](https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp/DependencyInjection/JevClientFactory.cs) (Client factory), [`src/JevSharp/DependencyInjection/JevServiceCollectionExtensions.cs`](https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp/DependencyInjection/JevServiceCollectionExtensions.cs) (DI registration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_contract["Request and response"]
  node_request["Evaluation request<br/>[JevRequest.cs]"]
  node_questions["Typed questions<br/>[JevQuestion.cs]"]
  node_values["JSON values<br/>[JevValue.cs]"]
  node_response["Typed response<br/>[JevResponse.cs]"]
end

subgraph group_runtime["Client runtime"]
  node_client["Evaluation client<br/>[JevClient.cs]"]
end

subgraph group_providers["Providers and protocols"]
  node_codec["Protocol codec<br/>[ProtocolCodec.cs]"]
  node_protocols["Provider protocols<br/>[JevProtocols.cs]"]
  node_auth["Request authentication"]
end

subgraph group_composition["Configuration and composition"]
  node_options["Client options"]
  node_factory["Client factory"]
  node_registration["DI registration"]
end

subgraph group_reliability["Reliability"]
  node_failover["Failover client"]
  node_failure["HTTP failure classifier"]
  node_resilience["Optional HTTP resilience"]
end

node_caller(("SDK caller"))
node_provider{{"Jev-compatible providers"}}

node_caller -->|"creates"| node_request
node_request -->|"contains"| node_questions
node_request -->|"carries state"| node_values
node_caller -->|"evaluates"| node_client
node_client -->|"accepts"| node_request
node_client -->|"prepares protocol"| node_codec
node_codec -->|"encodes and decodes"| node_protocols
node_client -->|"sends HTTP request"| node_provider
node_provider -->|"returns HTTP response"| node_client
node_client -->|"applies authentication"| node_auth
node_client -->|"returns evaluation"| node_response
node_options -->|"selects protocol"| node_protocols
node_options -->|"configures authentication"| node_auth
node_caller -.->|"registers clients"| node_registration
node_registration -->|"registers factory"| node_factory
node_factory -->|"creates clients"| node_client
node_factory -->|"assembles failover"| node_failover
node_failover -->|"dispatches evaluation"| node_client
node_failover -->|"classifies API failures"| node_failure
node_client -->|"classifies HTTP errors"| node_failure
node_registration -.->|"configures optionally"| node_resilience

click node_request "https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Abstractions/Requests/JevRequest.cs"
click node_questions "https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Abstractions/Requests/JevQuestion.cs"
click node_values "https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Abstractions/Models/JevValue.cs"
click node_response "https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Abstractions/Responses/JevResponse.cs"
click node_client "https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Core/Clients/JevClient.cs"
click node_codec "https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Core/Protocols/ProtocolCodec.cs"
click node_protocols "https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Core/Protocols/JevProtocols.cs"
click node_auth "https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Core/Authentication/HeaderAuthentication.cs"
click node_options "https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Core/Configuration/JevClientOptions.cs"
click node_factory "https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp/DependencyInjection/JevClientFactory.cs"
click node_registration "https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp/DependencyInjection/JevServiceCollectionExtensions.cs"
click node_failover "https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Core/Clients/FailoverJevClient.cs"
click node_failure "https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Core/Transport/HttpFailureClassifier.cs"
click node_resilience "https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp/DependencyInjection/Resilience/JevHttpClientBuilderExtensions.cs"

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_request,node_questions,node_values,node_response toneBlue
class node_client toneAmber
class node_codec,node_protocols,node_auth toneMint
class node_options,node_factory,node_registration toneRose
class node_failover,node_failure,node_resilience,node_caller,node_provider toneIndigo
```

## Components

### Request and response

- [Evaluation request](https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Abstractions/Requests/JevRequest.cs): `src/JevSharp.Abstractions/Requests/JevRequest.cs`
- [Typed questions](https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Abstractions/Requests/JevQuestion.cs): `src/JevSharp.Abstractions/Requests/JevQuestion.cs`
- [JSON values](https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Abstractions/Models/JevValue.cs): `src/JevSharp.Abstractions/Models/JevValue.cs`
- [Typed response](https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Abstractions/Responses/JevResponse.cs): `src/JevSharp.Abstractions/Responses/JevResponse.cs`

### Client runtime

- [Evaluation client](https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Core/Clients/JevClient.cs): `src/JevSharp.Core/Clients/JevClient.cs`

### Providers and protocols

- [Protocol codec](https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Core/Protocols/ProtocolCodec.cs): `src/JevSharp.Core/Protocols/ProtocolCodec.cs`
- [Provider protocols](https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Core/Protocols/JevProtocols.cs): `src/JevSharp.Core/Protocols/JevProtocols.cs`
- [Request authentication](https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Core/Authentication/HeaderAuthentication.cs): `src/JevSharp.Core/Authentication/HeaderAuthentication.cs`

### Configuration and composition

- [Client options](https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Core/Configuration/JevClientOptions.cs): `src/JevSharp.Core/Configuration/JevClientOptions.cs`
- [Client factory](https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp/DependencyInjection/JevClientFactory.cs): `src/JevSharp/DependencyInjection/JevClientFactory.cs`
- [DI registration](https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp/DependencyInjection/JevServiceCollectionExtensions.cs): `src/JevSharp/DependencyInjection/JevServiceCollectionExtensions.cs`

### Reliability

- [Failover client](https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Core/Clients/FailoverJevClient.cs): `src/JevSharp.Core/Clients/FailoverJevClient.cs`
- [HTTP failure classifier](https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp.Core/Transport/HttpFailureClassifier.cs): `src/JevSharp.Core/Transport/HttpFailureClassifier.cs`
- [Optional HTTP resilience](https://github.com/bariskisir/jevsharp/blob/master/src/JevSharp/DependencyInjection/Resilience/JevHttpClientBuilderExtensions.cs): `src/JevSharp/DependencyInjection/Resilience/JevHttpClientBuilderExtensions.cs`

### Other components

- **SDK caller**
- **Jev-compatible providers**

## Connections

- SDK caller → Evaluation request: creates
- Evaluation request → Typed questions: contains (evidence: `src/JevSharp.Abstractions/Requests/JevRequest.cs`)
- Evaluation request → JSON values: carries state (evidence: `src/JevSharp.Abstractions/Requests/JevRequest.cs`)
- SDK caller → Evaluation client: evaluates
- Evaluation client → Evaluation request: accepts (evidence: `src/JevSharp.Core/Clients/JevClient.cs`)
- Evaluation client → Protocol codec: prepares protocol (evidence: `src/JevSharp.Core/Clients/JevClient.cs`)
- Protocol codec → Provider protocols: encodes and decodes (evidence: `src/JevSharp.Core/Protocols/ProtocolCodec.cs`)
- Evaluation client → Jev-compatible providers: sends HTTP request
- Jev-compatible providers → Evaluation client: returns HTTP response
- Evaluation client → Request authentication: applies authentication (evidence: `src/JevSharp.Core/Clients/JevClient.cs`)
- Evaluation client → Typed response: returns evaluation (evidence: `src/JevSharp.Core/Clients/JevClient.cs`)
- Client options → Provider protocols: selects protocol (evidence: `src/JevSharp.Core/Configuration/JevClientOptions.cs`)
- Client options → Request authentication: configures authentication (evidence: `src/JevSharp.Core/Configuration/JevClientOptions.cs`)
- SDK caller → DI registration: registers clients
- DI registration → Client factory: registers factory (evidence: `src/JevSharp/DependencyInjection/JevServiceCollectionExtensions.cs`)
- Client factory → Evaluation client: creates clients (evidence: `src/JevSharp/DependencyInjection/JevClientFactory.cs`)
- Client factory → Failover client: assembles failover (evidence: `src/JevSharp/DependencyInjection/JevClientFactory.cs`)
- Failover client → Evaluation client: dispatches evaluation (evidence: `src/JevSharp.Core/Clients/FailoverJevClient.cs`)
- Failover client → HTTP failure classifier: classifies API failures (evidence: `src/JevSharp.Core/Clients/FailoverJevClient.cs`)
- Evaluation client → HTTP failure classifier: classifies HTTP errors (evidence: `src/JevSharp.Core/Clients/JevClient.cs`)
- DI registration → Optional HTTP resilience: configures optionally
