Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Php Dna Laravel Package

domainreseller/php-dna

PHP client for the Domain Reseller API supporting both REST and SOAP. Automatically detects whether you're using Reseller ID/API Key or legacy username/password credentials. Manage domains, contacts, and orders from any PHP 7.4+ app. Installs via Composer.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Updated for the V4.0.0 major release (SOAP → REST gateway migration, unified Reseller ID + API Key auth).

Architecture fit domainreseller/php-dna remains a thin vendor client for the DomainNameApi reseller API — not a Laravel package in the framework sense. V4.0.0 does not change that: no ServiceProvider, no facade, no publishable config is described. What does change is that the transport is now a single modern REST/JSON gateway with the legacy SOAP path retired end-to-end. That is an architectural improvement for us: JSON over HTTPS aligns naturally with Guzzle/PSR-18/PSR-7, which is what Laravel already ships and what our HTTP middleware (retry, logging, tracing) can wrap. The correct architecture is unchanged: an internal RegistrarContract with a single DomainNameApiAdapter implementation, a FakeRegistrar for tests, and an architecture test enforcing that only App\Registrar\* touches the vendor namespace.

One caveat worth resolving early: the release notes reference panel settings screens, language files, and per-language installation guides. That reads like a WHMCS module or a plugin-with-admin-UI artifact, not a headless PHP client. Confirm that the Composer package we depend on is the same codebase the changelog describes, or that the UI layer ships separately and does not drag admin routes/views into a Laravel app.

Integration feasibility Still low plumbing friction, and materially lower than before. The two prior environment prerequisites are gone:

  • No PHP SOAP extension. That removes a real deployment constraint — base Docker images, shared hosting, and hardened PHP-FPM builds frequently ship without ext-soap. One fewer "works locally, fails in staging" class of incident.
  • Auth is now a single model: Reseller ID + API Key, read from Panel → API Settings. Legacy username/password references are removed from settings, language files, and docs.

The semantic friction is unchanged and remains the bulk of the work: asynchronous registration/transfer lifecycles (pending → active/failed), TLD-specific mandatory fields (.tr documents, EU registrant eligibility), and money moving on every write. Estimate holds at 1–2 weeks to production-grade. Note that "your saved settings keep working" applies only to consumers already on Reseller ID + API Key — our own adapter config keys will change, so treat this as a breaking change on our side regardless.

Technical risk

  • Major version = breaking surface. V4.0.0 is an explicit major release with a transport swap. Expect changed constructor signatures, changed response shapes (SOAP array → REST/JSON), possibly changed exception/error semantics, and changed config keys. Assume a rewrite of the adapter's internals while keeping RegistrarContract stable — the contract is precisely what makes this release survivable.
  • Bus factor 1 is unchanged. Still a single author (@bakcay), still effectively unproven OSS. V4 raises the stakes: a solo maintainer has just landed a large, security- and money-sensitive rewrite. Fork on day one; Apache-2.0 still grants patent + fork rights, which de-risks this.
  • SOAP→REST is an unproven rewrite in the field. Error semantics, pagination on list endpoints, date/time formats, and field naming may all differ from v3. Any v3-era fixtures, mocks, or hard-won edge-case handling we hold are now invalid and must be re-derived against the live gateway.
  • New: telemetry. "Cleaner telemetry… error reporting and performance tracing" is a genuine new risk vector. A registrar client handles registrant PII, contact data, and high-value credentials. Verify whether telemetry is opt-in, what payload it sends, whether it includes request bodies, domain names, or credentials, and whether it can be disabled by config/env. This needs a privacy review before production, not after.
  • Error semantics may have improved — or not. REST makes it likely that failures surface as HTTP status codes plus a JSON error body rather than SOAP fault arrays. That is still not typed exceptions, and a 200 with an embedded failure code remains the classic silent-failure trap. Confirm before writing retry logic.
  • Idempotency is still not evidenced. A retried register after a timeout is still a double-charge and a duplicate-domain attempt. REST gateways commonly add Idempotency-Key support; if the gateway offers it and the client does not expose it, we must implement it at the HTTP layer (and if the gateway does not offer it, timeout-then-domain.info remains our only safe path).
  • Rate limiting becomes an HTTP concern. Expect 429 / Retry-After on the REST gateway. Our HTTP middleware needs explicit 429 handling with jittered backoff, distinct from generic 5xx retry.
  • Release metadata still warrants verification. The prior release was dated 2026-09-18; confirm v4.0.0 tags, CHANGELOG, and license file in the repo before pinning. Still no visible CI, test suite, or security policy attested in the notes.
  • Support horizon for v3 is unstated. If we do not migrate, does the SOAP path still work and still get security fixes? A one-maintainer project typically supports one line only. Treat v3 as end-of-life on a date we have to assume is soon.

Key questions

  1. Is the Composer package the headless client, or does it now bundle a panel/UI with routes, views, and language files? Can the UI be omitted?
  2. What exactly changed in the public API surface between v3.x and v4.0.0 — constructor, config keys, method signatures, return types, exceptions? Is there an UPGRADING guide?
  3. Do failures now surface as typed exceptions, or as HTTP status + JSON error codes, or as 200-with-error-body?
  4. Does the REST gateway or the client support idempotency keys on register/renew/transfer?
  5. Is telemetry on by default? What is sent, where to, who can see it, and how is it disabled? Any PII, domain names, or credentials in the payload?
  6. What are the rate limits on the REST gateway, and does the client surface 429/Retry-After or swallow it?
  7. Is OTE (test mode) genuinely parity-complete with production on REST, and how do we point the client at it — env var, base URL, constructor flag?
  8. Are order-status polling helpers provided for async operations, or is status polling still ours to build?
  9. PHP version floor and HTTP client constraints — does v4 depend on a Guzzle major that conflicts with our Laravel dependency graph?
  10. Does it still return raw response payloads so we can audit and reconcile, or is the response now normalized/truncated?
  11. Will v3.x receive security fixes, and for how long?
  12. Are there tests or recorded REST fixtures we can reuse for a fake?

Integration Approach

Stack fit Laravel 10–12 on PHP 8.1+, with one prerequisite removed (ext-soap no longer needed — good news for slim base images and CI parity). Containment strategy is unchanged and now more clearly justified:

  • config/registrar.php with reseller_id and api_key from env/secret manager (never committed). New key names — migrate secrets, do not alias the old username/password vars.
  • App\Registrar\DomainNameApiAdapter implements RegistrarContract.
  • RegistrarServiceProvider binding the adapter as a singleton, with configured HTTP client options (timeouts, 429-aware retry, connection reuse).
  • App\Registrar\FakeRegistrar for tests, backed by freshly recorded REST fixtures — v3 SOAP fixtures are worthless.
  • PHPStan/Pest architecture rule: only App\Registrar\* may reference the vendor namespace.
  • Explicitly disable or configure telemetry at the client construction site, per the privacy review.

All writes go through queued jobs with a per-registrar concurrency cap (start at 5). Persist domains and domain_orders as a mirror, not the system of record — DNA owns state; we own reconciliation and reporting.

Migration path Two migrations are now in play, and they must be sequenced: v3→v4 of the client, then incumbent→DNA (if applicable). Do not run both at once.

  1. v3 → v4 client upgrade (isolated): bump in a branch, re-point at OTE, re-record fixtures, diff every response shape against v3, rewrite the adapter internals. Ship behind the unchanged RegistrarContract — if the contract holds, this is a contained change.
  2. New registrations for a single low-risk TLD cohort behind a feature flag.
  3. Renewals stay on the incumbent until a full cycle passes cleanly.
  4. Transfers-in last — 5–7 days, one-year extension cost, highest-touch support case.

Compatibility Pin an exact version (4.0.x or a commit hash) and commit composer.lock. Fork into our org on day one — the transport rewrite is exactly the scenario the fork protects against. If v4's Guzzle/PSR-18 constraints conflict with the app, isolation is now easier than before: a small internal provisioning service or a dedicated queue worker with its own dependency tree, with no SOAP extension to install in that image.

Sequencing

  1. Spike (3–5 days): OTE credentials, exercise every lifecycle call on REST, capture request/response fixtures, document error codes, map v3→v4 response deltas, and read the telemetry code.
  2. Privacy + dependency review: telemetry payload, credential handling, logging at debug level, license/tag verification.
  3. Contract + adapter + fake: ship with tests against REST fixtures before any production traffic.
  4. Queue + state machine: exponential backoff with 429/Retry-After awareness, jittered; append-only order event log.
  5. Reconciliation job: nightly domain list + expiry pull, diff against local mirror, alert on drift.
  6. Cutover by TLD cohort behind feature flags, with documented rollback to the pinned v3 fork — keep the v3 fork buildable until one clean quarter has passed.

Operational Impact

Maintenance Budget a named owner and ~3–5 hours/month for the first two quarters (up from ~2–4), reflecting the fresh-rewrite risk: dependency review, nightly OTE smoke test in CI, and a contract test that catches REST API drift before customers do. The library is still small and readable; the burden remains our adapter and the domain-industry edge cases. The v4 rewrite is the single largest maintenance event in this dependency's history — treat the first 90 days as a watch period.

Support Unchanged and still the weakest dimension: no commercial support, no SLA, no documented security contact. Escalation is GitHub issues to one author plus DomainNameApi reseller support. The runbook now needs new entries:

  • Credential rotation for Reseller ID + API Key (both values, coordinated with the panel).
  • "Registered but we didn't get a response" — check existence via domain.info, never blind-retry.
  • "v4 upgrade broke a call that worked in v3" — response-shape diff checklist.
  • "Telemetry is leaking/blocked by egress policy" — disable path and verification.
  • Existing entries stand: renewal failure for one TLD in a batch, ICANN registrant-verification suspension.

Scaling Registrar APIs are low-QPS; load scales with domain count, not traffic. 10k domains is ~10k renewals/year — trivial throughput. The differences in V4 are transport-level and favourable: HTTP connection reuse and HTTP/2 are available where SOAP was a heavyweight per-call cost, so batch operations get cheaper. New scaling concerns:

  • REST rate limits — bulk operations now hit explicit 429 ceilings; batch jobs must be token-bucket shaped, not fire-and-forget.
  • Renewal cliffs — unchanged and still the biggest self-inflicted risk: stagger expiry dates and renewal execution so thousands never land on one day.

Failure modes

  • Timeout on register/renew → unknown state, money at risk. On timeout, call domain.info before any retry. Never blind-retry writes. Unchanged, still the top risk.
  • Major-version drift → v4 silently diverging from v3 assumptions in our adapter; contained by pinning, the contract, and REST contract tests in CI.
  • Telemetry egress → new. Outbound calls to a vendor telemetry endpoint from inside our network: privacy exposure, egress-policy failures, and firewall-induced latency. Verify and disable by default.
  • Credential model change → stale username/password in config after upgrade yields auth failures that look like outages. Alert on auth-error rate specifically, not just job failure count.
  • Partial batch success → per-item result handling and partial-refund logic remain mandatory.
  • Silent error codes → adapter must translate every non-success response into a typed exception and emit a metric; re-verify this mapping now that the transport changed.
  • Stale local state after upstream expiry or manual intervention → nightly reconciliation is the control.
  • Upstream breaking change → pinned version + nightly OTE contract test limits blast radius to one deploy cycle.
  • Compliance drift → WHOIS privacy, transfer locks, 60-day post-transfer lock, grace/redemption windows, registrant verification emails — all still ours.

Ramp-up A mid-level PHP developer is productive with the client in half a day; REST/JSON is more familiar to most Laravel developers than SOAP was, so this is slightly faster than before. Budget 1–2 weeks to production readiness including adapter, queue semantics, reconciliation, and the OTE test suite — plus ~2–3 extra days specifically for the v3→v4 delta and the privacy review. The genuine learning curve remains domain-industry mechanics: EPP status codes, transfer locks, redemption fees, TLD-specific eligibility.

TPM verdict Update the dependency, do not re-litigate the decision. V4.0.0 is a net-positive change — retiring SOAP removes a real deployment constraint and a whole class of support tickets, the unified credential model simplifies secret handling, and a JSON/REST transport fits Laravel's HTTP stack better than SOAP ever did. But it is a major release from a single-maintainer project, so it must be treated as a controlled migration, not a composer update: fork, pin, re-record fixtures against OTE, review telemetry before it touches production, and keep the v3 fork buildable as the rollback. The prior verdict holds — viable as a tactical adapter inside a DomainNameApi reseller relationship, not a platform to standardize on. Above roughly 5k domains or any revenue-critical dependency, plan to own the fork permanently, or write a few hundred lines of internal client directly against the now-simpler REST API and skip the dependency entirely. That last option got meaningfully cheaper with this release.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
gmostafa/php-graphql-client
xeviant/paystack
snowsoft/faker
meditationsteps/blogetc
animalyoung/laravel-influxdb
onix-solutions/sms-telera
lonely-lights/prosetta
oxygen/data
oxygen/core
jengo/base
xiloryx/log-collector
a21ns1g4ts/filament-stripe
la-php/laravel-admin
artisan-build/community-prompts
vleroy/smart
ayles-software/laravel-australian-public-holidays
cboxdk/laravel-id-spatie
cboxdk/laravel-id-billing
cboxdk/laravel-id-billing-bridge
simple-as-fuck/php-performance-log