PHPackages                             jstewmc/calculate-timeout - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. jstewmc/calculate-timeout

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

jstewmc/calculate-timeout
=========================

Calculate a timeout

v1.0.0(9y ago)018MITPHPPHP ^7.0

Since Aug 13Pushed 9y ago1 watchersCompare

[ Source](https://github.com/jstewmc/calculate-timeout)[ Packagist](https://packagist.org/packages/jstewmc/calculate-timeout)[ RSS](/packages/jstewmc-calculate-timeout/feed)WikiDiscussions master Synced 4w ago

READMEChangelogDependencies (4)Versions (3)Used By (0)

calculate-timeout
=================

[](#calculate-timeout)

Calculate a timeout.

To defend against brute force attacks, some actions should be throttled.

Given a timeout [piecewise function](https://github.com/jstewmc/piecewise-fx) and a value, this library will calculate the number of seconds a client should wait before trying an action again.

For example, consider a login action whose timeout depends on the number of consecutive failed login attempts:

```
use Jstewmc\Fx\Constant;
use Jstewmc\Interval\Interval;
use Jstewmc\PiecewiseFx\{PiecewiseFx, SubFx};

// define our timeout piecewise function...
// for values between 10 (exclusive) and positive infinity (INF), we want the user
//     to wait for 30 seconds
//
$fx = new PiecewiseFx([
    new SubFx(
        new Interval('(10, INF)'),
        new Constant(30)
    )
]);

// create our calculate-timeout service
$service = new Calculate($fx);

// check the user's timeout...
// keep in mind, the actual return value is a DateInterval
//
$service(1);   // returns 0 seconds
$service(2);   // returns 0 seconds
$service(3);   // returns 0 seconds
$service(4);   // returns 0 seconds
$service(5);   // returns 0 seconds
$service(6);   // returns 0 seconds
$service(7);   // returns 0 seconds
$service(8);   // returns 0 seconds
$service(9);   // returns 0 seconds
$service(10);  // returns 0 seconds
$service(11);  // returns 30 seconds
$service(12);  // returns 30 seconds
$service(13);  // returns 30 seconds
```

The timeout will always be a `DateInterval` object with zero or a positive number of seconds.

That's it!

License
-------

[](#license)

[MIT](https://github.com/jstewmc/calculate-timeout/blob/master/LICENSE)

Author
------

[](#author)

[Jack Clayton](mailto:clayjs0@gmail.com)

Version
-------

[](#version)

### 1.0.0, August 13, 2016

[](#100-august-13-2016)

- Major release
- Update `composer.json`

### 0.1.0, August 13, 2016

[](#010-august-13-2016)

- Initial release

###  Health Score

26

—

LowBetter than 41% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

3607d ago

Major Versions

v0.1.0 → v1.0.02016-08-13

### Community

Maintainers

![](https://www.gravatar.com/avatar/50fecae0a7fd2119681bc133e496e7166b01a59f850a3c909e100bd427c6b28b?d=identicon)[Jstewmc](/maintainers/Jstewmc)

---

Top Contributors

[![jstewmc](https://avatars.githubusercontent.com/u/1192893?v=4)](https://github.com/jstewmc "jstewmc (4 commits)")

---

Tags

phptimeoutcalculatejstewmc

### Embed Badge

![Health badge](/badges/jstewmc-calculate-timeout/health.svg)

```
[![Health](https://phpackages.com/badges/jstewmc-calculate-timeout/health.svg)](https://phpackages.com/packages/jstewmc-calculate-timeout)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
