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

Document Signer Symfony Laravel Package

la-souris/document-signer-symfony

Symfony bundle integrating the la-souris document signer, so you can digitally sign PDFs and verify signatures directly from your Symfony services. Configure certificates and signing profiles in bundle config, then sign or validate documents in a few lines of PHP.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • v1.0.0 is the first public release, so there is no prior assessment to reconcile and no deprecation surface — this is a greenfield adoption decision, not an upgrade decision.
  • The critical finding: despite being scoped as a "Laravel/PHP package," the release ships a Symfony bundle, not a Laravel package. There is no service provider, no config/document-signer.php publishable config, no Laravel route registration, no container bindings via Laravel's container, and no queue/event bridging to Laravel's dispatcher. The DocumentSignerWebhookReceived event is a Symfony event.
  • Net effect: in a Laravel codebase this is a third-party library plus a DIY adapter, not a drop-in integration. The bundle's value (driver manager, config tree, webhook controllers) is delivered through Symfony mechanisms a Laravel app does not run by default.
  • The underlying la-souris/document-signer-sdk (^1.0) plus per-provider driver packages is the genuinely portable layer; the bundle is Symfony-flavored glue on top.

Integration feasibility

  • Feasible but not turnkey. A Laravel integration requires building and owning: a service provider, config publishing/mapping from config/document-signer.php into the bundle's array shape, explicit route registration for the webhook endpoints (the bundle's "verified webhook routes" are Symfony routing), and an event bridge so DocumentSignerWebhookReceived reaches Laravel listeners/jobs.
  • Positively, the webhook signature verification is the highest-value piece and is provider-isolated (ValidSignSignatureVerifier, DocuSignSignatureVerifier), so it can be adopted without the framework glue around it. Same for OverridingSignatureProvider / RecipientRewriter and event-name translation, which appear to be plain classes.
  • Provider packages are optional installs (document-signer-validsign, document-signer-docusign), which is a clean separation — we can start with one provider and avoid a two-vendor commitment on day one.

Technical risk

  • PHP 8.5+ is the dominant risk. Requiring 8.5 as a floor on a v1.0.0 package is aggressive and will exclude most production Laravel fleets (commonly 8.2–8.4). Adopting this package likely forces an org-wide runtime upgrade, which is a platform initiative, not a library decision. This alone may be a blocker for the current fiscal year.
  • Laravel gap risk: our adapter is unowned upstream code that must be re-validated against every bundle minor release. Config-shape coupling is the fragile point.
  • Recipient override (RecipientRewriter, OverridingSignatureProvider) is a compliance hazard, not just a convenience feature. If it is env-gated incorrectly, production envelopes get redirected to the wrong signers — a legally material failure. Must be hard-fenced: config assertion at boot, separate secrets, and an alert if the override is active in a prod environment.
  • anchor_y_offset_pixels as the fix for DocuSign field placement signals that anchor-based field positioning is pixel-fragile and will drift with template/layout changes. Fine-tuning by pixel is an operational knob that can silently misplace signature fields; a mispositioned field can invalidate an executed document.
  • Young product surface: v1.0.0, single-vendor (LaSouris) package family, SDK pinned at ^1.0. Bus factor and long-term support posture are unknown.
  • Webhook endpoints are public by definition; security depends entirely on correct verifier configuration.

Key questions

  1. Is a first-party Laravel package (service provider, publishable config, queued jobs, native events) on the roadmap, and on what timeline? If not, do we accept owning an adapter indefinitely?
  2. Is PHP 8.5 a hard floor, or an artifact of the SDK's CI matrix? Can an 8.3-compatible constraint be supported? This determines whether adoption is even schedulable.
  3. What is the supported-version and BC policy post-1.0 — do minor releases break config shape? How are security issues handled and disclosed?
  4. Does signature verification include replay/timestamp protection and idempotency, or only HMAC/certificate validation? What happens to a duplicated or delayed webhook delivery?
  5. Are webhook handlers synchronous in the request cycle, or do they hand off to a message bus that we would have to provide in Laravel?
  6. Can recipient override be made structurally impossible outside non-prod (compile-time/env assertion), or is it purely configuration discipline?
  7. What is the license, and is there any commercial support or SLA?
  8. Is there a test double / fake provider for our own CI, so we can test our integration without hitting ValidSend/DocuSign sandboxes?

Integration Approach

Stack fit

  • Poor-to-moderate as shipped for a Laravel stack; good for a Symfony stack. For Laravel, treat the SDK + provider packages + verifier classes as the integration surface and treat the bundle as reference implementation/documentation.
  • Where we already have a Symfony service (webhook ingress, internal ops tooling), the bundle is directly usable and is the lowest-friction place to prove the package out.

Migration path

  • No migration: there is no prior version in this assessment and nothing in our estate depends on it. This is a net-new adoption with an explicit exit cost (our adapter).
  • Exit path is clean if we confine usage to the SDK's provider interfaces and do not let bundle-specific types leak into domain code. Codify that as a rule in the spike.

Compatibility

  • Hard gates: PHP 8.5+, la-souris/document-signer-sdk ^1.0, plus at least one provider package. Any one missing means no driver is available and the manager is inert — needs an explicit boot-time failure with a clear message rather than a runtime no-driver error.
  • Verify our framework version support independently; the bundle's Symfony version constraints tell us nothing about Laravel compatibility.

Sequencing

  1. Spike (1–2 weeks, non-prod): install SDK + one provider (recommend DocuSign or ValidSign based on which contract is further along, not both), call send/status APIs directly, and validate signature verification against captured real webhook payloads. No bundle.
  2. Prove the webhook path: stand up a Laravel controller that delegates to the provider's verifier, dispatch to a queued job, confirm replay/duplicate behaviour.
  3. Thin adapter decision: based on spike friction, decide build-our-own-glue vs. running the Symfony bundle alongside Laravel (heavy — only if a Symfony service is a natural host for webhook ingress).
  4. PHP 8.5 readiness gate: confirm feasibility and timeline before committing; sequence this in parallel with the spike so the spike isn't wasted if the answer is "not this year."
  5. Pilot one provider in non-prod with real envelopes, including an intentional recipient-override exercise to confirm the fence works.
  6. Production rollout gated on: signature verification proven, replay handling proven, override fence proven, alerting on webhook failure rate.

Operational Impact

Maintenance

  • Two-to-four packages from one vendor plus our own adapter. Our adapter is the maintenance liability: every bundle minor release requires re-checking config shape and route registration.
  • Anchor-offset tuning is recurring operational toil — expect a support load where field placement is corrected per template change, with legal-document consequences when it's missed.
  • Provider packages version independently from the bundle; keep them pinned and upgrade deliberately, not with the fleet.

Support

  • Single-vendor dependency with unknown support posture at v1.0.0. Escalation path is a GitHub issue unless commercial support exists — get that answer before production.
  • Internal support needs at least two engineers who understand both the document-signing domain (envelopes, recipients, anchors) and the verification path; a single owner is a bus-factor risk.

Scaling

  • Webhook ingress is the scaling surface: it must be decoupled from request/response into a queue. If the bundle processes handlers inline, we need our own queuing regardless of framework.
  • Provider API rate limits, not our infrastructure, will be the binding constraint on envelope throughput. Envelope volume is typically low relative to web traffic, so compute scaling is unlikely to be a concern; burst handling during signing campaigns is.
  • The PHP 8.5 floor is a fleet-wide scaling constraint in the org sense — it forces a uniform runtime upgrade across every app that touches signing.

Failure modes

  • Forged/replayed webhook accepted due to verifier misconfiguration or missing replay protection → fraudulent document status. Highest-severity failure; needs explicit negative tests, not just happy-path.
  • Recipient override active in production → envelopes routed to unintended signers. Legally material, hard to reverse once sent.
  • Anchor offset misapplied → signature/date fields positioned incorrectly, producing executed documents that may be challenged.
  • Silent verification failure → valid events dropped, envelopes appear stalled; only detectable if we alert on verification-failure rate and on envelope-age SLA breaches.
  • No driver configured (provider package missing or version skew) → runtime error on first send, ideally caught at boot.
  • Secret rotation without redeploy → verification fails cluster-wide until config reload; needs a rotation runbook and overlapping-secret support.
  • Provider sandbox/prod credential mix-up → real envelopes sent from test runs. Same fencing as recipient override.

Ramp-up

  • Moderate for a Laravel team, specifically because the Symfony idioms (bundle config tree, driver manager, Messenger-backed handlers) don't map onto Laravel patterns; expect a learning curve that is about the framework mismatch rather than the document-signing domain.
  • Domain ramp-up (envelopes, recipients, anchors, provider-specific quirks) is the larger cost and is not reducible by better documentation — budget for one engineer to become the SME.
  • Recommend a written internal integration note capturing the adapter contract, the override fence, the verification test vectors, and the upgrade checklist; this is the artifact that makes the package survivable at v1.0.0 maturity.
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.
frankkessler/guzzle-oauth2-middleware
delatbabel/site-config
delatbabel/applog
eusonlito/laravel-gettext
henzeb/housepedia-intelligence-laravel
aliqsm/laravel-authkit
itsjustvita/laravel-wp-migrator
uslanozan/laravel-cache-contract
adilazhari/laravel-trace
ulsyairil/ai-local-guardrails
dzwallet/laravel-sdk
glc36/maxloop-kernel
ikhbarnuridev/filament-mega-menu
mydnic/volet-chatbot
enadstack/laravel-localization
mydnic/volet-feature-board-filament-plugin
wmde/email-address
refinery29/test-util
dees040/laravel-api-responses
teamzac/geocoder