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

Latch Bundle Laravel Package

fourcoders/latch-bundle

Fourcoders LatchBundle integrates Telefónica Latch into Symfony apps, adding account lock/unlock and second-factor protection. Configure API credentials, pair user accounts, and query Latch status through simple bundle services.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Headline finding: the package is mislabeled in our intake. fourcoders/latch-bundle is a Symfony 2 bundle, not a Laravel package, and it wraps Latch — Telefónica ElevenPaths' account-lock/approval service, which was discontinued. The bundle is a ~2014-era integration shim for a service that no longer answers. The technical risk is not "will it work with Laravel," it is "does the product it integrates with still exist."

Architecture fit

  • Zero fit with our stack. Symfony bundles rely on DependencyInjection\Extension, compiler passes, Resources/config/services.xml|yml, and annotation-driven listeners. Laravel has no bundle concept; the closest analogue (a Service Provider + config file + facade) shares none of the code.
  • The bundle's actual functional surface is thin: a DI-configured HTTP client around the Latch REST API (pair, status, lock/unlock), plus probably an annotation or listener for route-level enforcement. That is roughly 100–200 LoC to reproduce idiomatically in Laravel with Guzzle/Http and a middleware.
  • Consequently there is nothing here worth porting. Any decision should be made about Latch the service, not about this package.

Integration feasibility

  • Composer-level install into a Laravel app is not viable: Symfony 2.x components (symfony/framework-bundle, symfony/dependency-injection ^2.1–2.8) conflict with the Symfony 5/6/7 components Laravel 10/11 already pulls (http-foundation, console, process, mailer). Expect a hard dependency-resolution failure, not a runtime bug to patch around.
  • The underlying elevenpaths/latch-sdk-php is likewise abandoned. Even a from-scratch client would target a decommissioned https://latch.elevenpaths.com endpoint, so the integration would fail at the network layer regardless of code hygiene.
  • Practical feasibility of reusing any code: near zero. Feasibility of reusing the idea: high — "require an out-of-band approval before a privileged action" is a well-serviced requirement.

Technical risk

  • Service lifecycle (critical): Latch was shut down; API calls return errors/timeouts. A feature built on it is dead on arrival.
  • Licence (blocking): NOASSERTION with no LICENSE file means, under default copyright, all rights reserved. We cannot copy, modify, or redistribute the bundle until the fourcoders authors grant terms — and there is no maintainer activity since 2015-01-15.
  • Runtime (high): PHP 5.3/5.4 idioms (PSR-0 autoloading, array() short-form absence, no scalar type hints) will not survive PHP 8.1+ static analysis and may emit deprecations/fatals.
  • Supply chain (high): 10 stars, 0 dependents, no CI badge, no test suite referenced, single-commit-era history. No one else on earth is exercising this code path, so we would be the sole operator of an unmaintained fork against a dead API.

Key questions for the requester

  1. What is the actual user story — step-up auth on sensitive actions, account lockout, or device pairing? Each has a live, maintained alternative (TOTP/pragmarx/google2fa, WebAuthn/web-auth/webauthn-lib, Laravel Fortify's 2FA, Passport/Sanctum for device trust).
  2. Do we hold an existing commercial relationship with Telefónica that keeps a Latch-compatible endpoint alive for us? If yes, get the endpoint and contract in writing before any engineering time.
  3. Who owns the licence clarification with fourcoders, and is a fork acceptable if the licence resolves to something permissive?
  4. Is "out-of-band approval via mobile push" a hard requirement, or is email/TOTP acceptable? This single answer determines whether we need a vendor at all.

Integration Approach

Stack fit

Bundle concept Laravel equivalent Portability
LatchBundle + DI Extension LatchServiceProvider + config/latch.php Rewrite (trivial)
Service definitions / constructor injection Container bindings, singleton() Rewrite (trivial)
Annotation/route listener enforcement HTTP middleware or Form Request rule Rewrite (moderate)
Bundled config tree validation config/latch.php + config()->integer() Rewrite (trivial)
Latch SDK HTTP calls Http::withToken()->timeout() Replace with new client

Net: nothing transfers. The package supplies a design sketch and a wire-format hint, not an asset.

Migration path

  1. Do not install the bundle. Do not vendor it, do not fork it inside the monorepo, do not add it to composer.json on a branch "just to spike." Licence ambiguity plus dead endpoint means the spike has no information value.
  2. Validate the requirement, not the package. One-day spike: instrument the target flows and confirm what percentage of users hit the privileged action we'd gate.
  3. Prototype with a live provider behind an interface. Define App\Contracts\StepUpVerifier with challenge(User): ChallengeId and verify(ChallengeId): bool. Bind a TOTP/WebAuthn implementation first. If a Latch-compatible contract surfaces, a second binding slots in without touching call sites.
  4. Enforce in middleware, not in controllers. EnsureStepUpVerified on the privileged route group, reading a short-lived session/claim flag, with an explicit fail_open/fail_closed config switch.

Compatibility

  • Target PHP 8.2/8.3 and Laravel 11 (or whatever our current LTS baseline is). The bundle assumes PHP 5.x and Symfony 2 LTS; there is no overlapping supported matrix.
  • PSR-0 autoloading vs PSR-4: any salvage of source files requires renaming and namespace edits, which is a derivative work — again blocked on licence.
  • Guzzle 3/5-era usage in the original vs Guzzle 7 today: retry/backoff and middleware semantics differ materially.

Sequencing

  • Week 0: requirement review + provider decision (the only gate that matters).
  • Week 1: interface + Laravel-native binding + middleware + feature flag off by default.
  • Week 2: rollout to internal/staff cohort, telemetry on challenge latency and drop-off.
  • Explicit parallel track: licence inquiry to fourcoders with a 10-business-day timeout, defaulting to "no reuse" — but no roadmap dependency on the outcome, since the endpoint is gone.

Operational Impact

Maintenance

  • The package is a permanent liability if adopted: unmaintained since 2015, no upstream, no issue triage, no security response. Every PHP or Laravel upgrade becomes our problem alone. Owning a ~150 LoC internal module is cheaper than owning a fork of an abandoned one — the fork drags in the licensing question and a dependency graph we don't want.

Support

  • No community to escalate to (10 stars, 0 dependents means effectively no production users to compare notes with). Internal Tier-1/Tier-2 runbooks would have to be written entirely by us, and on-call would have no external escalation path for an authentication-adjacent failure — the worst category to be alone on.
  • Legal/security review will block on NOASSERTION. Budget for that conversation; it does not resolve quickly with an inactive maintainer.

Scaling

  • Latch's model is a synchronous remote check per authentication event. At our login volume that is an added network round-trip on the hottest path, plus a hard dependency on a third party's availability for our own sign-in.
  • Mitigations if any remote-approval provider is used: cache verdicts for a short TTL, keep the check off the primary login path (gate only privileged actions), set aggressive timeouts (≤1s), wrap in a circuit breaker, and prefer the provider's webhook/callback model over polling.
  • The Laravel-side wrapper itself scales fine; the provider call is the bottleneck and the availability risk.

Failure modes

  • Dead endpoint — the default state here. Calls time out; users blocked or silently bypassed depending on the flag. Silent bypass is the dangerous one: a try/catch around a dead client turns step-up auth into a no-op that looks green in dashboards.
  • Fail-open vs fail-closed ambiguity — must be an explicit, reviewed config decision, logged, and alarmed. Never a default inherited from an SDK's exception handling.
  • Lock-state desync — user locked at the provider but our session says verified (or vice versa). Needs a reconciliation job and a support-tool override.
  • PHP runtime fatals — legacy syntax under PHP 8 causing 500s on the auth path; caught only by CI if we add one.
  • Licence discovery mid-build — code written against a fork becomes undistributable; a real risk if anyone "just prototypes" with it.

Ramp-up

  • Engineer unfamiliar with the bundle: ~2 hours to read and conclude it's a Symfony 2 shim — the cost is not learning curve, it's the risk of someone spending a sprint trying to make it install.
  • Ramp-up for the recommended path (provider-agnostic step-up interface + middleware) is ~1 day for a mid-level engineer already comfortable with Laravel middleware and HTTP client fakes.
  • Recommended guidance to the team: do not adopt. Treat this package as a historical reference for what a Latch integration looked like, close the ticket against the live alternatives, and revisit only if a signed Telefónica contract for a Latch-compatible endpoint is produced.
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.
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
noith/settings
kda/laravel-package