la-souris/document-signer-validsign
ValidSign driver for the la-souris document-signer package, letting Laravel applications send documents for e-signature through ValidSign's API. Configure credentials, submit signing requests, and check signing status.
Architecture fit. This package is a provider adapter: it implements the la-souris/document-signer-sdk SignatureProvider contract with ValidSign-specific classes (ValidSignProvider, ValidSignConfig, ValidSignClient). That is the right shape — application code should depend on the SDK's contract and remain provider-agnostic, so a later move to another e-signature vendor is a binding swap rather than a rewrite. The anchor-based placeholder replacer and the webhook EventType mapping suggest the package is deliberately scoped to the two hardest parts of any signature integration (document templating and callback state translation) and leaves orchestration to the SDK. Low conceptual surface area, which is a strong signal for a v1.0.0.
Integration feasibility. Composer-installable, PHP 8.3+, SDK ^1.0. A sandbox spike covering the full envelope lifecycle (create → anchor replacement → sign → callback → download signed PDF → download audit PDF) is achievable in a short timebox. Feasibility is high for teams already on the SDK; moderate for greenfield because the SDK's own contract semantics must be learned first.
Technical risk.
downloadSignedDocument() passes the caller's Document::$id through untouched and converts a 404 into SignedDocumentUnavailableException. This is pragmatic for "envelope not finalized yet," but it also converts a genuinely invalid or deleted document ID into an indefinitely retryable state. The package pushes retry-budget ownership to the caller; that must be an explicit, bounded policy (attempt cap plus dead-letter), not a naive loop.EventType mapping but say nothing about signature/HMAC verification, replay protection, or idempotency. That is the single most important thing to confirm before production.Key questions.
SignedDocumentUnavailableException — does the SDK supply backoff, or is that entirely ours?Document::$id values opaque, and are there collision constraints per tenant?Stack fit. Best fit is a Laravel application already using document-signer-sdk (provider swap only) or one starting fresh with ValidSign as the chosen vendor. Poorer fit where the host app has an existing, working direct ValidSign integration — the abstraction buys portability but costs a migration.
Migration path. Bind ValidSignProvider in a service provider, publish and populate config from secrets management (never .env committed files for API credentials). Migrate by new envelope, not in place: in-flight envelopes created against a prior provider or a direct integration will not carry over coherently, because document IDs, status enums, and event vocabularies differ. Plan a cutover date after which new envelopes use the package, and let legacy envelopes drain to completion on the old path.
Compatibility. Verify PHP 8.3 is available across all deployment targets (CI, staging, prod images) before anything else — this is the most likely hard blocker. Confirm the SDK's HTTP client constraints do not conflict with the application's existing Guzzle version, and confirm no dependency pins a conflicting illuminate/* range. Anchor-based replacement implies PDF manipulation expectations on the ValidSign side; confirm the templates we author in-house satisfy their anchor syntax rather than assuming Word-style placeholders work.
Sequencing.
EventType, persist.SignedDocumentUnavailableException with bounded attempts and alerting.Maintenance. The package's own code surface is small, so maintenance is largely dependency tracking: upstream SDK minor versions, ValidSign API changes, and PHP runtime upgrades. Assign clear ownership of the Composer constraint bumps; a thin adapter that drifts two SDK minors behind is a routine source of outages.
Support. Two-vendor triage is the main operational cost. When a signature fails, the team must decide whether the fault lies in the host app, the SDK, the adapter, or ValidSign. Without a documented boundary and a runbook keyed to the exception types this package surfaces, every incident becomes a three-way conversation.
Scaling. Throughput is bound by ValidSign's API rate limits and webhook delivery, not by application CPU. Two design consequences: webhook processing must be queued and idempotent (ValidSign will retry and may deliver out of order), and PDF downloads should stream directly into object storage rather than being buffered in memory or the database. Envelope creation should be rate-limited client-side to avoid 429 storms during batch sends.
Failure modes to instrument.
Ramp-up. A competent Laravel developer can integrate this in days; the learning curve is domain, not code. Budget time for signature-workflow concepts (envelopes, roles, signing order, anchors), for the SDK's exception semantics, and for compliance literacy around evidence retention and audit trails. The downloadAudit() feature in particular is a compliance affordance — the team should understand what the Evidence Summary Report does and does not prove before relying on it in a dispute.
How can I help you explore Laravel packages today?