# troydavisson/phrets architecture

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

- Interactive diagram: https://gitdiagram.com/troydavisson/phrets
- Repository: https://github.com/troydavisson/phrets

## Overview

PHRETS is a PHP client for retrieving real-estate listings, metadata, and media from RETS servers. The principal workflow configures a session, logs in to establish server capabilities, then issues metadata, search, or object requests; parsers turn responses into PHP models and collections. The graph distinguishes request orchestration, protocol transport, parsing, and returned data. Several parser and metadata implementations are unsampled, so their internal call relationships are omitted unless documented or visible in the source index.

Main entry points: [`src/Session.php`](https://github.com/troydavisson/phrets/blob/master/src/Session.php) (RETS session), [`src/Strategies/StandardStrategy.php`](https://github.com/troydavisson/phrets/blob/master/src/Strategies/StandardStrategy.php) (Parser strategy), [`src/Parsers/Search/OneX.php`](https://github.com/troydavisson/phrets/blob/master/src/Parsers/Search/OneX.php) (Search parser), [`src/Configuration.php`](https://github.com/troydavisson/phrets/blob/master/src/Configuration.php) (Configuration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_session["Session and configuration"]
  node_config["Configuration<br/>[Configuration.php]"]
  node_session_api["RETS session<br/>[Session.php]"]
  node_capabilities["Server capabilities<br/>[Capabilities.php]"]
  node_strategy["Parser strategy"]
  node_strategy_contract["Strategy contract<br/>[Strategy.php]"]
  node_version["RETS version<br/>[RETSVersion.php]"]
end

subgraph group_transport["RETS transport"]
  node_http_client["HTTP client<br/>[Client.php]"]
  node_http_response["HTTP response<br/>[Response.php]"]
end

subgraph group_parsing["Response parsing"]
  node_search_request["Search request formatting<br/>[Search.php]"]
  node_object_request["Object ID formatting<br/>[GetObject.php]"]
  node_login_parsers["Login parsers"]
  node_search_parser["Search parser<br/>[OneX.php]"]
  node_recursive_search["Recursive search parser<br/>[RecursiveOneX.php]"]
  node_object_parsers["Object parsers"]
  node_metadata_parsers["Metadata parsers"]
  node_xml_parser["XML parser<br/>[XML.php]"]
end

subgraph group_models["Results and metadata"]
  node_search_results["Search results<br/>[Results.php]"]
  node_search_record["Search record<br/>[Record.php]"]
  node_object_model["Retrieved object<br/>[BaseObject.php]"]
  node_bulletin["Login bulletin<br/>[Bulletin.php]"]
  node_metadata_models["Metadata models"]
  node_rets_error["RETS error model<br/>[RETSError.php]"]
end

node_developer(("PHP application"))
node_rets_server(("RETS server"))

node_developer -->|"configures"| node_config
node_developer -->|"creates session"| node_session_api
node_config -->|"initializes"| node_session_api
node_config -->|"selects strategy"| node_strategy
node_config -->|"sets version"| node_version
node_session_api -->|"tracks endpoints"| node_capabilities
node_session_api -->|"creates client"| node_http_client
node_session_api -->|"sends RETS requests"| node_rets_server
node_rets_server -->|"returns responses"| node_http_response
node_http_response -->|"provides response"| node_search_parser
node_http_response -->|"provides response"| node_object_parsers
node_strategy -->|"dispatches login"| node_login_parsers
node_strategy -->|"registers parser"| node_search_parser
node_strategy -->|"registers parser"| node_recursive_search
node_strategy -->|"registers parsers"| node_object_parsers
node_strategy -->|"registers parsers"| node_metadata_parsers
node_strategy -->|"registers parser"| node_xml_parser
node_session_api -->|"formats query"| node_search_request
node_session_api -->|"dispatches search"| node_search_parser
node_session_api -->|"dispatches recursive"| node_recursive_search
node_session_api -->|"formats object IDs"| node_object_request
node_session_api -->|"requests metadata"| node_metadata_parsers
node_session_api -.->|"logs in"| node_login_parsers
node_search_parser -->|"parses XML"| node_xml_parser
node_search_parser -->|"builds results"| node_search_results
node_search_parser -->|"creates records"| node_search_record
node_recursive_search -->|"returns results"| node_search_results
node_object_parsers -->|"builds objects"| node_object_model
node_object_parsers -->|"sets errors"| node_rets_error
node_login_parsers -.->|"provides details"| node_bulletin
node_metadata_parsers -.->|"builds metadata"| node_metadata_models
node_search_results -->|"loads table metadata"| node_metadata_models

click node_config "https://github.com/troydavisson/phrets/blob/master/src/Configuration.php"
click node_session_api "https://github.com/troydavisson/phrets/blob/master/src/Session.php"
click node_capabilities "https://github.com/troydavisson/phrets/blob/master/src/Capabilities.php"
click node_strategy "https://github.com/troydavisson/phrets/blob/master/src/Strategies/StandardStrategy.php"
click node_strategy_contract "https://github.com/troydavisson/phrets/blob/master/src/Strategies/Strategy.php"
click node_version "https://github.com/troydavisson/phrets/blob/master/src/Versions/RETSVersion.php"
click node_http_client "https://github.com/troydavisson/phrets/blob/master/src/Http/Client.php"
click node_http_response "https://github.com/troydavisson/phrets/blob/master/src/Http/Response.php"
click node_search_request "https://github.com/troydavisson/phrets/blob/master/src/Interpreters/Search.php"
click node_object_request "https://github.com/troydavisson/phrets/blob/master/src/Interpreters/GetObject.php"
click node_login_parsers "https://github.com/troydavisson/phrets/tree/master/src/Parsers/Login"
click node_search_parser "https://github.com/troydavisson/phrets/blob/master/src/Parsers/Search/OneX.php"
click node_recursive_search "https://github.com/troydavisson/phrets/blob/master/src/Parsers/Search/RecursiveOneX.php"
click node_object_parsers "https://github.com/troydavisson/phrets/tree/master/src/Parsers/GetObject"
click node_metadata_parsers "https://github.com/troydavisson/phrets/tree/master/src/Parsers/GetMetadata"
click node_xml_parser "https://github.com/troydavisson/phrets/blob/master/src/Parsers/XML.php"
click node_search_results "https://github.com/troydavisson/phrets/blob/master/src/Models/Search/Results.php"
click node_search_record "https://github.com/troydavisson/phrets/blob/master/src/Models/Search/Record.php"
click node_object_model "https://github.com/troydavisson/phrets/blob/master/src/Models/BaseObject.php"
click node_bulletin "https://github.com/troydavisson/phrets/blob/master/src/Models/Bulletin.php"
click node_metadata_models "https://github.com/troydavisson/phrets/tree/master/src/Models/Metadata"
click node_rets_error "https://github.com/troydavisson/phrets/blob/master/src/Models/RETSError.php"

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_config,node_session_api,node_capabilities,node_strategy,node_strategy_contract,node_version toneBlue
class node_http_client,node_http_response toneAmber
class node_search_request,node_object_request,node_login_parsers,node_search_parser,node_recursive_search,node_object_parsers,node_metadata_parsers,node_xml_parser,node_rets_server toneMint
class node_search_results,node_search_record,node_object_model,node_bulletin,node_metadata_models,node_rets_error toneRose
class node_developer toneIndigo
```

## Components

### Session and configuration

- [Configuration](https://github.com/troydavisson/phrets/blob/master/src/Configuration.php): `src/Configuration.php`
- [RETS session](https://github.com/troydavisson/phrets/blob/master/src/Session.php): `src/Session.php`
- [Server capabilities](https://github.com/troydavisson/phrets/blob/master/src/Capabilities.php): `src/Capabilities.php`
- [Parser strategy](https://github.com/troydavisson/phrets/blob/master/src/Strategies/StandardStrategy.php): `src/Strategies/StandardStrategy.php`
- [Strategy contract](https://github.com/troydavisson/phrets/blob/master/src/Strategies/Strategy.php): `src/Strategies/Strategy.php`
- [RETS version](https://github.com/troydavisson/phrets/blob/master/src/Versions/RETSVersion.php): `src/Versions/RETSVersion.php`

### RETS transport

- [HTTP client](https://github.com/troydavisson/phrets/blob/master/src/Http/Client.php): `src/Http/Client.php`
- [HTTP response](https://github.com/troydavisson/phrets/blob/master/src/Http/Response.php): `src/Http/Response.php`

### Response parsing

- [Search request formatting](https://github.com/troydavisson/phrets/blob/master/src/Interpreters/Search.php): `src/Interpreters/Search.php`
- [Object ID formatting](https://github.com/troydavisson/phrets/blob/master/src/Interpreters/GetObject.php): `src/Interpreters/GetObject.php`
- [Login parsers](https://github.com/troydavisson/phrets/tree/master/src/Parsers/Login): `src/Parsers/Login`
- [Search parser](https://github.com/troydavisson/phrets/blob/master/src/Parsers/Search/OneX.php): `src/Parsers/Search/OneX.php`
- [Recursive search parser](https://github.com/troydavisson/phrets/blob/master/src/Parsers/Search/RecursiveOneX.php): `src/Parsers/Search/RecursiveOneX.php`
- [Object parsers](https://github.com/troydavisson/phrets/tree/master/src/Parsers/GetObject): `src/Parsers/GetObject`
- [Metadata parsers](https://github.com/troydavisson/phrets/tree/master/src/Parsers/GetMetadata): `src/Parsers/GetMetadata`
- [XML parser](https://github.com/troydavisson/phrets/blob/master/src/Parsers/XML.php): `src/Parsers/XML.php`

### Results and metadata

- [Search results](https://github.com/troydavisson/phrets/blob/master/src/Models/Search/Results.php): `src/Models/Search/Results.php`
- [Search record](https://github.com/troydavisson/phrets/blob/master/src/Models/Search/Record.php): `src/Models/Search/Record.php`
- [Retrieved object](https://github.com/troydavisson/phrets/blob/master/src/Models/BaseObject.php): `src/Models/BaseObject.php`
- [Login bulletin](https://github.com/troydavisson/phrets/blob/master/src/Models/Bulletin.php): `src/Models/Bulletin.php`
- [Metadata models](https://github.com/troydavisson/phrets/tree/master/src/Models/Metadata): `src/Models/Metadata`
- [RETS error model](https://github.com/troydavisson/phrets/blob/master/src/Models/RETSError.php): `src/Models/RETSError.php`

### Other components

- **PHP application**
- **RETS server**

## Connections

- PHP application → Configuration: configures
- PHP application → RETS session: creates session
- Configuration → RETS session: initializes (evidence: `src/Configuration.php`)
- Configuration → Parser strategy: selects strategy (evidence: `src/Configuration.php`)
- Configuration → RETS version: sets version (evidence: `src/Configuration.php`)
- RETS session → Server capabilities: tracks endpoints (evidence: `src/Session.php`)
- RETS session → HTTP client: creates client (evidence: `src/Session.php`)
- RETS session → RETS server: sends RETS requests
- RETS server → HTTP response: returns responses
- HTTP response → Search parser: provides response (evidence: `src/Parsers/Search/OneX.php`)
- HTTP response → Object parsers: provides response (evidence: `src/Parsers/GetObject/Multiple.php`)
- Parser strategy → Login parsers: dispatches login (evidence: `src/Strategies/StandardStrategy.php`)
- Parser strategy → Search parser: registers parser (evidence: `src/Strategies/StandardStrategy.php`)
- Parser strategy → Recursive search parser: registers parser (evidence: `src/Strategies/StandardStrategy.php`)
- Parser strategy → Object parsers: registers parsers (evidence: `src/Strategies/StandardStrategy.php`)
- Parser strategy → Metadata parsers: registers parsers (evidence: `src/Strategies/StandardStrategy.php`)
- Parser strategy → XML parser: registers parser (evidence: `src/Strategies/StandardStrategy.php`)
- RETS session → Search request formatting: formats query (evidence: `src/Session.php`)
- RETS session → Search parser: dispatches search (evidence: `src/Session.php`)
- RETS session → Recursive search parser: dispatches recursive (evidence: `src/Session.php`)
- RETS session → Object ID formatting: formats object IDs (evidence: `src/Interpreters/GetObject.php`)
- RETS session → Metadata parsers: requests metadata (evidence: `src/Parsers/GetMetadata/System.php`)
- RETS session → Login parsers: logs in
- Search parser → XML parser: parses XML (evidence: `src/Parsers/Search/OneX.php`)
- Search parser → Search results: builds results (evidence: `src/Parsers/Search/OneX.php`)
- Search parser → Search record: creates records (evidence: `src/Parsers/Search/OneX.php`)
- Recursive search parser → Search results: returns results (evidence: `src/Parsers/Search/RecursiveOneX.php`)
- Object parsers → Retrieved object: builds objects (evidence: `src/Parsers/GetObject/Single.php`)
- Object parsers → RETS error model: sets errors (evidence: `src/Parsers/GetObject/Single.php`)
- Login parsers → Login bulletin: provides details
- Metadata parsers → Metadata models: builds metadata
- Search results → Metadata models: loads table metadata (evidence: `src/Models/Search/Results.php`)
