lamoda/atol-client-bundle
Symfony bundle that integrates the ATOL Online client, providing service configuration for fiscal receipt registration with ATOL cash registers. Simplifies adding ATOL fiscalization to PHP/Symfony applications.
Baseline note: No prior assessment existed; this is the initial baseline, triggered by release 1.2.1. That release is dependency-only — atol-client raised to ^1.6.3 and Guzzle widened from an implicit single-track constraint to ^6.2 || ^7.3. There is no new application surface, no new endpoints, and no stated breaking change. Treat 1.2.1 as a compatibility release, not a feature release.
Architecture fit: This is a thin Laravel service-provider wrapper around atol-client, a domain-specific client for the UK CAA ATOL (Air Travel Organisers' Licensing) scheme. It fits teams whose product must validate or transact against ATOL-licensed data — flight-inclusive package bookings, ATOL certificate generation/lookup, licence holder verification. It is a poor fit for general HTTP integration work; the value is entirely in the domain binding. Expect the package to be configuration-driven (credentials + ATOL number via config/ and .env), auto-discovered, and to expose the underlying client through a facade or container binding. Confirm whether it ships a publishable config, a facade, and whether the underlying client is injected or statically resolved — that determines testability.
Integration feasibility: High for a standard Laravel app. Composer install, auto-discovery, vendor:publish for config, credential env vars, and a sandbox endpoint are the likely path. The real feasibility question is not the package but the supplier side: whether ATOL provides a non-production environment, credentials, and rate-limit documentation. Budget more time for onboarding with the scheme operator than for the code.
Technical risk:
^6.2 is a compatibility convenience, not a safety net. Any install that resolves to Guzzle 6 inherits unpatched CVEs and, more practically, blocks Laravel 9+ stacks that require Guzzle 7. Pin Guzzle 7 explicitly in the root composer.json.atol-client bump. ^1.6.3 permits future 1.x minors automatically. Without a changelog for the underlying client, response-shape drift is a silent risk.Key questions for the maintainer:
atol-client 1.6.x changes are now in scope, and are any response fields deprecated?Stack fit: Assumes a Laravel app on PHP 7.4–8.x with Composer 2. The ^7.3 Guzzle allowance is what makes this viable on Laravel 8/9/10, which ship Guzzle 7. If the app is on Laravel 6/7 and already pinned to Guzzle 6, 1.2.1 changes nothing for you — and that is itself a signal to plan the framework upgrade.
Migration path:
composer why guzzlehttp/guzzle and composer why atol-client. Widened constraints frequently collide with packages that pin a single Guzzle major.guzzlehttp/guzzle:^7.3 to force resolution away from the EOL major, then run the full suite.1.2.1 (exact or ~1.2.1) rather than floating, so an atol-client minor cannot arrive unreviewed..env committed to source.atol-client bump fails loudly.Compatibility: Verify PHP constraint, Laravel version constraint, and whether the package uses any deprecated framework APIs. Confirm Laravel package auto-discovery is present; if not, manual provider registration is required.
Sequencing: Dependency audit → pin and install → sandbox credentials and a smoke test against the real API → adapter layer and contract tests → queue/retry hardening → production credentials and cutover. Do not start with production credentials.
Maintenance: Low code churn but non-zero attention cost. Watch three streams: wrapper releases (rare), atol-client releases (the actual risk), and CAA/ATOL scheme changes (the risk you cannot automate away). Set a quarterly review and a Dependabot/Renovate rule that surfaces atol-client minors individually rather than batching them.
Support: Expect no vendor support contract. Escalation is the maintainer's issue tracker plus the scheme operator for credential and data questions. Internally, name one owner — this package fails the "anyone can pick it up" test because the domain knowledge is the hard part, not the code.
Scaling: Most of the scaling ceiling lives on the supplier side. Assume per-account rate limits, so instrument call volume before you need to. Put all outbound calls behind the queue with bounded concurrency; never call from a synchronous web request path on a user-facing page. Cache licence-holder lookups — that data changes slowly. Apply timeouts on every call and a circuit breaker so a supplier outage degrades one feature rather than saturating your workers.
Failure modes:
retry_after.atol-client minor — only contract tests catch this.Ramp-up: Budget roughly a week for an experienced Laravel engineer to be productive and two to three weeks to be confident, with the split weighted toward domain rather than code. Required reading: the ATOL scheme rules, the atol-client README and changelog, and the package's own test suite — the tests are the only reliable specification for what the wrapper actually does with configuration and errors. Pair the engineer with whoever owns booking compliance; the questions that matter ("what should happen when verification fails mid-booking?") are business questions the code cannot answer.
How can I help you explore Laravel packages today?