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

Expiring Url Bundle Laravel Package

ticketpark/expiring-url-bundle

A Symfony bundle for generating expiring URLs, letting you create time-limited, signed links to protect routes and actions. Configure expiration windows and validate signatures before granting access.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Build vs. buy for time-limited link generation. This package addresses a single, well-understood primitive: minting a URL that becomes invalid after a TTL. That makes it a component decision, not a platform decision — a small, reversible choice that should be settled in days, not a quarterly roadmap item.
  • Feature scoping for link-based flows. If you're planning password reset, magic-link login, email verification, invite links, time-boxed file/report downloads, invoice or payment links, private share links, or trial/preview access, this is the underlying mechanism. Use it to frame the requirement ("signed, expiring, revocable, auditable") rather than accepting whatever the package happens to implement.
  • Security review load as an input to the roadmap. Any expiry mechanism is authentication-adjacent: if the signature is forgeable or the TTL is not enforced server-side, it is an auth bypass. Adopting a third-party implementation of this primitive buys you a permanent security-review obligation on a package you don't control.
  • Framework-fit / migration decisions. Note the mismatch: the prompt frames this as a Laravel package, but ticketpark/expiring-url-bundle is a Symfony bundle. It will not drop into a Laravel app without a bridge. For a Laravel codebase the decision is largely made for you — URL::temporarySignedRoute() / URL::signedRoute() already ship signed, expiring URLs in-framework, maintained by the core team. This package is only on the table for a Symfony shop.
  • Vendor-risk register. Zero stars, zero dependents, no visible community validation. Treat it as a reference implementation to read, not a dependency to ship. Reading ~200 lines of its signing logic to inform an in-house implementation is a legitimate, low-cost use of it.

When to Consider This Package

Consider it only when all of the following hold:

  • The stack is Symfony (not Laravel — there, use native signed URLs).
  • The need is genuinely narrow: stateless, time-boxed links where "expired" means "the clock passed the timestamp," and you do not need revocation-before-expiry, single-use semantics, per-user audit trails, or access analytics.
  • You will vendor or fork it, read the signing code, and confirm: HMAC over the full path + query, constant-time comparison, secret sourced from config/secret manager (not hardcoded), expiry timestamp included inside the signed payload (not appended after signing), and server-side rejection on every route that consumes the token.
  • A security owner signs off on taking a dependency with no downstream users and, on this evidence, no external security review.

Look elsewhere — or build it — when:

  • Any revocation requirement exists (logout-everywhere, "invalidate this invite"). Timestamp-only expiry can't do it; you need a server-side token store or a version/kid the server checks.
  • You need single-use links. Email clients, Slack, and corporate link scanners routinely prefetch URLs. A GET-consuming token will be burned before the user clicks it. This is the most common production bug in this feature class and the package will not solve it for you.
  • You need link analytics, per-recipient rate limiting, or abuse detection.
  • The team is on Laravel, or wants a maintained library: prefer framework-native signed URLs, symfony/security primitives, or a managed provider (S3/CloudFront signed URLs for media) over a near-zero-adoption bundle.
  • Compliance (SOC 2 / ISO evidence, SBOM, CVE response SLA) applies to your dependencies. A single-maintainer package with no dependents is hard to defend in an audit.

How to Pitch It (Stakeholders)

For executives (30 seconds): We evaluated a small open-source component that generates links which stop working after a set time — the machinery behind password resets and expiring share links. It's technically sound in concept but effectively unadopted (no stars, no downstream users) and, importantly, built for a different framework than ours. Recommendation: do not adopt. On Laravel we already have this built in and maintained by the framework; the correct move is to standardise on native signed URLs and spend the saved effort on policy (TTL defaults, revocation, audit logging) — the part that actually carries risk and actually differentiates the product.

For engineering: The capability is real and needed; this is not the delivery vehicle. Use framework-native signed routes with the expiry inside the signed payload, secrets from the secret manager with rotation support, and a server-side token record for anything requiring revocation or single use. Handle link-prefetch explicitly — don't consume tokens on GET; require a POST/confirm step or a short "click to continue" interstitial. Add per-token telemetry so we can answer "was this link opened, by whom, and how often" in an incident. If we do borrow from this package, it's as a ~200-line reference to review, not a Composer line to ship.

For the requesting team: If the ask was "can we get expiring links next sprint?" — yes, and faster than a dependency review, because the framework already provides it. What will take time is agreeing the policy: TTL per flow, what revocation means, and how we evidence access.

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.
unabomber/timezone
delatbabel/contacts
astritzeqiri/g-recaptcha
kevinongko/laravel-genode
developeruz/laravel-analytics
robbiep/afterthedeadline
frankkessler/incontact-laravel-oauth2-rest
jlxh/laravel-userlog
davidmgilo/timetables
qylinfly/role-permission
reflect-digital/conduit
takashato/laravel-vietqr
aitor24/laralang
kraenzle-ritter/entity-relations
dindigital/din-image
pomirleanu/image-colors
sawmainek/laravel-api-generator
delatbabel/jsonresponses
mouhamedfd/permissions-generator
eduplus/qr