
Research
Supply Chain Attack on Axios Pulls Malicious Dependency from npm
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.
rate-per-time-unit
Advanced tools
A lightweight JavaScript library for calculating the rate per second, minute, or hour of any recurring event, using a sliding window approach.
A lightweight JavaScript package that allows you to calculate the rate of recurring events per second, per minute, or per hour using a sliding window.
npm install rate-per-time-unit
OR
yarn add rate-per-time-unit
import { RatePerSecond } from 'rate-per-time-unit';
const clickRate = new RatePerSecond({ slidingWindow: 3 }); // 3 seconds
clickRate.registerEvent(); // at Tue Aug 27 2024 14:07:01
clickRate.registerEvent(); // at Tue Aug 27 2024 14:07:01
clickRate.registerEvent(); // at Tue Aug 27 2024 14:07:02
clickRate.registerEvent(); // at Tue Aug 27 2024 14:07:02
clickRate.registerEvent(); // at Tue Aug 27 2024 14:07:02
clickRate.registerEvent(); // at Tue Aug 27 2024 14:07:02
clickRate.registerEvent(); // at Tue Aug 27 2024 14:07:03
clickRate.registerEvent(); // at Tue Aug 27 2024 14:07:03
clickRate.getRatePerSecond(); // at Tue Aug 27 2024 14:07:03 -> 2.67
clickRate.getRatePerSecond(); // at Tue Aug 27 2024 14:07:04 -> 2
clickRate.getRatePerSecond(); // at Tue Aug 27 2024 14:07:05 -> 0.67
clickRate.getRatePerSecond(); // at Tue Aug 27 2024 14:07:06 -> 0
clickRate.registerEvent(); // at Tue Aug 27 2024 14:07:06
clickRate.getRatePerSecond(); // at Tue Aug 27 2024 14:07:06 -> 0.67
import { RatePerMinute } from 'rate-per-time-unit';
const heartbeat = new RatePerMinute({ slidingWindow: 3 }); // 3 seconds
heartbeat.registerEvent(); // at Tue Aug 27 2024 14:07:01
heartbeat.registerEvent(); // at Tue Aug 27 2024 14:07:01
heartbeat.registerEvent(); // at Tue Aug 27 2024 14:07:02
heartbeat.registerEvent(); // at Tue Aug 27 2024 14:07:02
heartbeat.registerEvent(); // at Tue Aug 27 2024 14:07:02
heartbeat.registerEvent(); // at Tue Aug 27 2024 14:07:02
heartbeat.registerEvent(); // at Tue Aug 27 2024 14:07:03
heartbeat.registerEvent(); // at Tue Aug 27 2024 14:07:03
heartbeat.getRatePerMinute(); // at Tue Aug 27 2024 14:07:03 -> 160
heartbeat.getRatePerMinute(); // at Tue Aug 27 2024 14:07:04 -> 120
heartbeat.getRatePerMinute(); // at Tue Aug 27 2024 14:07:05 -> 40
heartbeat.getRatePerMinute(); // at Tue Aug 27 2024 14:07:06 -> 0
heartbeat.registerEvent(); // at Tue Aug 27 2024 14:07:06
heartbeat.getRatePerMinute(); // at Tue Aug 27 2024 14:07:06 -> 40
import { RatePerHour } from 'rate-per-time-unit';
const networkRequests = new RatePerHour({ slidingWindow: 3 }); // 3 minutes
networkRequests.registerEvent(); // at Tue Aug 27 2024 14:01:01
networkRequests.registerEvent(); // at Tue Aug 27 2024 14:01:01
networkRequests.registerEvent(); // at Tue Aug 27 2024 14:01:01
networkRequests.registerEvent(); // at Tue Aug 27 2024 14:02:01
networkRequests.registerEvent(); // at Tue Aug 27 2024 14:02:01
networkRequests.registerEvent(); // at Tue Aug 27 2024 14:02:01
networkRequests.registerEvent(); // at Tue Aug 27 2024 14:03:01
networkRequests.registerEvent(); // at Tue Aug 27 2024 14:03:01
networkRequests.getRatePerHour(); // at Tue Aug 27 2024 14:04:01 -> 160
networkRequests.getRatePerHour(); // at Tue Aug 27 2024 14:05:01 -> 120
networkRequests.getRatePerHour(); // at Tue Aug 27 2024 14:06:01 -> 40
networkRequests.getRatePerHour(); // at Tue Aug 27 2024 14:07:01 -> 0
networkRequests.registerEvent(); // at Tue Aug 27 2024 14:07:01
networkRequests.getRatePerHour(); // at Tue Aug 27 2024 14:07:01 -> 40
Type: Object
Type: Integer
The slidingWindow option configures the number of time units (seconds or minutes) that are considered in calculating the event rate. You can choose this value as below:
Higher Value: A higher slidingWindow will average the events over a longer period, which can smooth out spikes and give a more stable long-term rate.
Lower Value: A lower slidingWindow will be more sensitive to recent changes in the event rate, making it more responsive to short-term fluctuations.
Default: RatePerSecond: 5, RatePerMinute: 6, RatePerHour: 10
Min: RatePerSecond: 1 , RatePerMinute: 1 , RatePerHour: 1
Max: RatePerSecond: 20, RatePerMinute: 120, RatePerHour: 120
Note that RatePerSecond and RatePerMinute take seconds, wherease RatePerHour takes minutes in slidingWindow option.
MIT © Talha Awan
FAQs
A lightweight JavaScript library for calculating the rate per second, minute, or hour of any recurring event, using a sliding window approach.
We found that rate-per-time-unit demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.

Research
Malicious versions of the Telnyx Python SDK on PyPI delivered credential-stealing malware via a multi-stage supply chain attack.

Security News
TeamPCP is partnering with ransomware group Vect to turn open source supply chain attacks on tools like Trivy and LiteLLM into large-scale ransomware operations.