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 Validsign Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

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.

  • 404-to-retryable mapping. 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.
  • ID passthrough. Caller-provided IDs are used verbatim against the ValidSign API, so any normalisation or prefixing in the host application will break the lookup silently at download time, not at creation time. This is a late-failing contract.
  • Webhook trust. The notes describe EventType mapping but say nothing about signature/HMAC verification, replay protection, or idempotency. That is the single most important thing to confirm before production.
  • Maturity. v1.0.0 with no production track record, no documented Laravel version matrix, and no stated release cadence for the upstream SDK.
  • Compliance. An e-signature provider's value is partly evidentiary. Whether the Evidence Summary Report is admissible as audit evidence depends on the signature level (SES/AES/QES under eIDAS) actually used, which this package does not express.

Key questions.

  1. What Laravel versions are supported, and is package discovery / config publishing wired up?
  2. Are webhooks verified cryptographically, and is there an idempotency key on event handling?
  3. What is the intended retry contract for SignedDocumentUnavailableException — does the SDK supply backoff, or is that entirely ours?
  4. Are Document::$id values opaque, and are there collision constraints per tenant?
  5. Which eIDAS signature levels does this provider path support, and does the audit PDF capture the full evidence chain?
  6. Are downloads streamed (memory-safe for large PDFs) or returned as in-memory strings?
  7. Does the package support multi-tenant / multiple ValidSign credentials in one application?

Integration Approach

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.

  1. Environment readiness: PHP 8.3, sandbox tenant, credentials in secret store.
  2. Contract spike against sandbox: create envelope, anchor replacement, signed download, audit download.
  3. Webhook endpoint: receive, verify, dedupe, map EventType, persist.
  4. Retry policy for SignedDocumentUnavailableException with bounded attempts and alerting.
  5. Observability: structured logs at provider boundary, correlation IDs across SDK calls.
  6. Feature-flag rollout to an internal pilot envelope, then to a low-risk document class, then broadly.

Operational Impact

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.

  • Permanent 404 misclassified as retryable, producing an infinite download loop.
  • Lost or duplicated webhooks leaving envelopes stuck in a non-terminal state indefinitely.
  • Anchor replacement producing a document with unreplaced placeholders (silent, ships to signer).
  • Credential or certificate expiry, surfacing as auth failures across all flows at once.
  • Envelope expiry before all signers act — a business failure, not an error, and often invisible.
  • Audit report unavailable while the envelope is still open, mirroring the signed-document case.
  • Partial PDF write to storage on connection drop, yielding corrupt evidence files if not checksummed.

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.

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.
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource