prooph/event-store-http-client
62.4
Adequate · 20 September 2026
4.9k
lines of production code
PHP
primary language
4
measurements over time
What this system is
This system is a PHP HTTP client library for the Event Store, designed to interact with the server's REST API. It provides concrete capabilities for managing event streams, handling various subscription types (persistent, catch-up, and volatile), and administering projections, queries, and users. The codebase has been refactored to align with the prooph/event-store v8 interfaces and utilizes PSR-18 standards for HTTP communication.
How it got here
2018 — EventStore v8 compatibility migration
11 changes.
The project migrated to align with prooph/event-store v8, replacing the internal HTTP client implementation with PSR-18 interfaces and refactoring connection setup via a factory pattern. This update involved removing legacy classes and dependencies while adding comprehensive managers for user management, projections, queries, and various subscription types.
2019 — Test coverage and example expansion
5 changes.
This period focused on expanding the test suite for the EventStore HTTP client, adding comprehensive coverage for core operations, persistent subscriptions, and user management. It also introduced helper utilities for integration testing and provided example scripts to demonstrate client usage for various subscription types.
Features
Add HTTP client implementation for persistent subscriptions
Introduces the \PersistentSubscriptionsManager\ and its factory in the \src/PersistentSubscriptions\ directory, enabling users to manage persistent subscriptions (describe, list, replay parked messages) over HTTP. The manager implements the \SyncPersistentSubscriptionsManager\ interface from the core \prooph/event-store\ library, translating API calls to HTTP requests via the existing \HttpClient\.
src/PersistentSubscriptions · high confidence
Add persistent, catch-up, and volatile subscription implementations
The \src/Internal\ directory now includes new classes to support EventStore subscription modes: \ConnectToPersistentSubscriptionOperation\ and \EventStorePersistentSubscription\ handle persistent subscriptions (ack/nak), \EventStoreCatchUpSubscription\ with \EventStoreAllCatchUpSubscription\ and \EventStoreStreamCatchUpSubscription\ implement catch-up subscriptions for the $all stream and specific streams, and \VolatileEventStoreAllSubscription\ and \VolatileEventStoreStreamSubscription\ provide volatile subscriptions. These changes also introduce \ResolvedEventParser\ for parsing HTTP responses and update \EventStoreHttpConnection\ to use the new subscription types and a schema-based connection setup.
src/Internal · high confidence
Added Projections and Query managers for Event Store HTTP client
New \ProjectionsManager\ and \QueryManager\ classes (with corresponding factories) have been added to the \src/Projections\ directory, implementing the \SyncProjectionsManager\ and \SyncQueryManager\ interfaces from \prooph/event-store\. The \ProjectionsManager\ exposes methods to enable, disable, abort, and create (one-time, transient, continuous) projections via the Event Store's HTTP API. The \QueryManager\ provides an \execute\ method that creates a transient projection, polls its status until completion with exponential backoff, and returns the resulting state, simplifying the execution of read-model queries.
src/Projections · high confidence
Added example scripts for EventStore HTTP client operations
The \examples\ directory now includes several PHP scripts demonstrating how to use the \EventStoreHttpClient\. These include \demo.php\ for basic stream reading, \demo-read.php\ for stream and event metadata operations, and dedicated examples for subscriptions: \demo-subscribe-to-stream.php\ and \demo-subscribe-to-all.php\ for volatile subscriptions, \demo-subscribe-to-stream-from.php\ and \demo-subscribe-to-all-from.php\ for catch-up subscriptions, and \demo-persistent-subscription.php\ for managing persistent subscriptions.
examples · high confidence
Introduce HTTP-based User Management API
Users can now manage event-store users (create, enable, disable, delete, and list) via the new \UsersManager\ class in the \src/UserManagement\ directory. This implementation communicates with the server over HTTP using the \HttpClient\, providing a concrete API for user administration that was previously absent from this component. A corresponding \UsersManagerFactory\ is also added to simplify instantiation by auto-discovering HTTP client and message factory dependencies.
src/UserManagement · high confidence
Removals
Removal of HTTP client operations for Event Store interactions
The \src/ClientOperations\ directory has been completely removed, deleting all HTTP-based client operations for the Event Store. This includes operations for appending to streams, reading stream events (forward and backward), reading individual events, and managing persistent subscriptions (create, update, delete, read, acknowledge, fail, replay parked). The base \Operation\ class and its \sendRequest\ helper, which handled HTTP client instantiation, request building, and authentication, are also gone. This effectively removes the HTTP client implementation for these core event store interactions from this location.
src/ClientOperations · high confidence
Removed internal system constants and JSON utility class
The \src/Common\ and \src/Util\ directories have been removed, deleting the \SystemEventTypes\, \SystemMetadata\, \SystemRoles\, \SystemStreams\, and \Json\ classes. This eliminates the library's internal definitions for Event Store system streams, metadata keys, and roles, as well as the custom JSON encoding/decoding wrapper, indicating a shift in how these core concepts and serialization tasks are handled in the updated codebase.
src/Common, src/Util · high confidence
Behavioural changes
Exception classes renamed and aligned with prooph/event-store v8
The exception classes in the \src/Exception\ directory have been renamed to match the new naming conventions in \prooph/event-store\ v8 (for example, \NotAuthenticatedException\ is now \PersistentSubscriptionCommandFailed\, and \ProjectionCommandFailedException\ is now \ProjectionCommandConflict\). These classes now extend the corresponding base exceptions from the \prooph/event-store\ package instead of the local \EventStoreConnectionException\ or \RuntimeException\. Additionally, several exception classes that were previously custom implementations (such as \AccessDeniedException\, \InvalidArgumentException\, \JsonException\, \OutOfRangeException\, \UnexpectedCommandException\, \UnexpectedValueException\, and \WrongExpectedVersionException\) have been removed, indicating that the library now relies on standard PHP exceptions or base exceptions for these cases. The copyright year in the affected files has also been updated to 2020.
src/Exception · high confidence
Refactor HTTP client to use PSR-18 interfaces and remove internal HTTP method constants
The HTTP client implementation in src/Http has been refactored to rely on PSR-18 interfaces (ClientInterface, RequestFactory) for making requests, replacing the previous internal approach. The HttpClient class now handles request construction, authentication header injection, and exception handling via callbacks. Additionally, the internal Method class containing HTTP verb constants (GET, POST, etc.) has been removed, as the client now uses the HttpMethod enum from the core event-store transport library.
src/Http · high confidence
Refactored connection setup and configuration parsing
The library has replaced its previous connection and data-model classes with a new factory-based approach. Users now create connections via the new \EventStoreConnectionFactory\ using \ConnectionSettings\, and configuration is parsed from strings using the new \ConnectionString\ class. The old \EndPoint\, \EventData\, \EventId\, and \EventStoreConnection\ interface have been removed in favor of this streamlined, factory-driven initialization.
src · high confidence
Update CI environment to PHP 7.4 and EventStore 5.0.8
The continuous integration configuration has been updated to run tests against PHP 7.4 instead of PHP 7.2 and 7.3, and to use EventStore version 5.0.8 instead of 4.1.1-hotfix1. Additionally, the test coverage tooling has switched from xdebug to pcov, and the coverage reporting tool has changed from coveralls to php-coveralls. These changes ensure the library is validated against newer runtime versions and the corresponding EventStore server release.
(repo-wide) · high confidence
Test coverage
Added test helper utilities for event store integration testing; Added tests for PersistentSubscriptionManager; Added tests for user management operations; Expanded test suite for Event Store HTTP client.
Dependencies
Update PHP and dependency versions for EventStore v8 compatibility
The project now requires PHP 7.4 or higher and upgrades several HTTP client libraries, including php-http/httplug to ^2.2, php-http/message to ^1.8.0, and php-http/discovery to ^1.9.1. The core dependency has shifted to prooph/event-store (dev-master), replacing the previous ramsey/uuid dependency. Development tooling has also been updated, notably upgrading PHPUnit to ^9.1 and adding Psalm for static analysis, while removing older dev dependencies like satooshi/php-coveralls.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 62 → 62 (-0.0)
- Rubric changed (rubric-2026.08.17 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 95 → 96 (+0.7)
- Architecture 100 → 98 (-1.7)
- Maturity 44 → 44 (+0.0)
- Readiness 61 → 61 (-0.0)
- Security 100 → 100 (+0.0)
Resolved (18)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — no supported dependency manifest was read
- Duplicated block (13 lines × 2) (src/Internal/EventStoreAllCatchUpSubscription.php)
- Duplicated block (13 lines × 2) (src/Internal/EventStoreHttpConnection.php)
- Duplicated block (13 lines × 2) (src/UserManagement/UsersManager.php)
- Duplicated block (15 lines × 2) (src/Internal/EventStoreHttpConnection.php)
- Duplicated block (15–16 lines × 3) (src/UserManagement/UsersManager.php)
- Duplicated block (16 lines × 2) (src/PersistentSubscriptions/PersistentSubscriptionsManager.php)
- Duplicated block (16 lines × 3) (src/Projections/ProjectionsManager.php)
- Duplicated block (16 lines × 3) (src/Projections/ProjectionsManager.php)
- Duplicated block (17 lines × 2) (src/Internal/ConnectToPersistentSubscriptionOperation.php)
- Duplicated block (18 lines × 2) (src/Projections/ProjectionsManager.php)
- Duplicated block (21 lines × 2) (src/Internal/EventStoreHttpConnection.php)
- Duplicated block (22 lines × 2) (src/Internal/EventStoreHttpConnection.php)
- Duplicated block (22 lines × 2) (src/Internal/VolatileEventStoreAllSubscription.php)
- No exposed public API
- Test reliability not included
- dormant codebase — no living knowledge left to concentrate
New (25)
- ClassTooLong: EventStoreHttpConnection (src/Internal/EventStoreHttpConnection.php)
- Dependency hygiene PARTLY measured — Composer dependencies read, no committed lock to grade for currency
- Documentation: no contributor guidance (README.md)
- Documentation: no licence statement (README.md)
- Duplicated block (13 lines × 2) (src/Internal/EventStoreAllCatchUpSubscription.php)
- Duplicated block (13 lines × 2) (src/UserManagement/UsersManager.php)
- Duplicated block (13 lines × 3) (src/PersistentSubscriptions/PersistentSubscriptionsManager.php)
- Duplicated block (13–14 lines × 2) (src/Internal/ConnectToPersistentSubscriptionOperation.php)
- Duplicated block (14–17 lines × 3) (src/UserManagement/UsersManager.php)
- Duplicated block (17 lines × 2) (src/Internal/EventStoreHttpConnection.php)
- Duplicated block (17 lines × 2) (src/PersistentSubscriptions/PersistentSubscriptionsManager.php)
- Duplicated block (17 lines × 3) (src/Projections/ProjectionsManager.php)
- Duplicated block (19 lines × 2) (src/Internal/EventStoreHttpConnection.php)
- Duplicated block (19 lines × 2) (src/Projections/ProjectionsManager.php)
- Duplicated block (19 lines × 3) (src/Projections/ProjectionsManager.php)
- Duplicated block (22 lines × 2) (src/Internal/ConnectToPersistentSubscriptionOperation.php)
- Duplicated block (22 lines × 3) (src/Internal/EventStoreHttpConnection.php)
- Duplicated block (25 lines × 2) (src/Internal/VolatileEventStoreAllSubscription.php)
- Duplicated block (29 lines × 2) (src/Internal/EventStoreHttpConnection.php)
- Duplicated block (31 lines × 2) (src/Internal/VolatileEventStoreAllSubscription.php)
- …and 5 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
prooph/event-store-http-client was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 20 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 3cc4883d3a0154dd2a0c591b3c2ab3744524c989 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-28e75b8e3254.