la-souris/document-signer-sdk
Laravel/PHP SDK for document signing workflows—create, send, and track signature requests directly from your app. Wraps the Document Signer API with a clean client, typed DTOs, and framework-ready configuration for quick integration into Laravel projects.
Architecture fit
SignatureProvider interface (send(), downloadSignedDocument(), downloadAudit(), webhook handling) and lets the consuming Laravel app own orchestration, persistence, and routing. That is the right shape for a Laravel codebase — business logic stays in the app, vendor coupling stays in one adapter class.{[type:signer:name]} placeholders → PlaceholderParser → anchor-based replacement → BrowsershotPdfRenderer → PDF → provider. This is a clean, testable pipeline, but it means document templating is code/config owned by us, not a hosted template editor. Product and legal stakeholders will need to accept that trade-off.Document::$id normalization rule (downloadSignedDocument() always takes the caller's own id, providers map internally) is the single most valuable design decision in the release. It is what makes swapping or running two providers side by side realistic, and it is the constraint we must not allow adapters to violate.Integration feasibility
SignatureProvider, render and send. There is no stated Laravel service provider, config publishing, facade, or migration/table set — the release notes are silent on framework glue, so assume we wire it manually until proven otherwise.Browsershot: headless Chromium plus Node/Puppeteer on every environment that renders PDFs. That is a real infrastructure commitment (container image size, cold start, CI parity, local dev setup), not a composer line item.Technical risk
downloadAudit() semantics (DocuSign's Certificate of Completion and ValidSign's Evidence Summary are not equivalent legal artifacts across jurisdictions). We will end up with provider-specific code in the app regardless; budget for it.page decoration support suggests the author hit this already, which is a good sign but not a solved problem.SignedDocumentUnavailableException being explicitly retryable is good design, but the package ships no retry/backoff, queue, or polling helper. The retry loop is ours to build and get right.Key questions
SignatureProvider implementations actually ship in v1.0.0, and what is the support commitment for each as vendor APIs change?downloadAudit() behave for providers whose evidence report is not a PDF or is not available until retention expiry?Stack fit
Migration path
Compatibility
downloadAudit().Sequencing
send() and the download calls in queued jobs with explicit retry policy keyed on SignedDocumentUnavailableException, ProviderRateLimitException, and ProviderTransientException.Maintenance
Support
ProviderAuthenticationException in production usually means a rotated or expired credential. Alerting on that exception class specifically is cheap and high value.Scaling
Failure modes
send() is not transactionally ordered after successful render. Render first, verify the PDF, then send.Ramp-up
Document::$id to provider ids, retry policy per exception, and where rendered and signed PDFs are stored. That document is the difference between a clean abstraction and a leaky one six months out.How can I help you explore Laravel packages today?