Releases: nestjs/throttler
v5.0.0
Major Changes
-
2f4f2a7: # FEATURES
- allow for multiple Throttler Contexts
- allow for conditionally skipping based on
ThrottleGuard#shouldSkip
method - allow for easily overriding throttler message based on guard method
- extra context passed to throw method for better customization of message
ThrottlerStorage
no longer needs astorage
property`getTracker
can now be async
BREAKING CHANGES
- ttl is now in milliseconds, not seconds, but there are time helper exposed to
ease the migration to that - the module options is now either an array or an object with a
throttlers
array property @Throttle()
now takes in an object instead of two parameters, to allow for
setting multiple throttle contexts at once in a more readable manner@ThrottleSkip()
now takes in an object with string boolean to say which
throttler should be skippedttl
andlimit
are no longer optional in the module's options. If an option
object is passed, it must define the defaults for that throttler
HOW TO MIGRATE
For most people, wrapping your options in an array will be enough.
If you are using a custom storage, you should wrap you
ttl
andlimit
in an
array and assign it to thethrottlers
property of the options object.Any
@ThrottleSkip()
should now take in an object withstring: boolean
props.
The strings are the names of the throttlers. If you do not have a name, pass the
string'default'
, as this is what will be used under the hood otherwise.Any
@Throttle()
decorators should also now take in an object with string keys,
relating to the names of the throttler contexts (again,'default'
if no name)
and values of objects that havelimit
andttl
keys.IMPORTANT: The
ttl
is now in miliseconds. If you want to keep your ttl
in seconds for readability, usetheseconds
helper from this package. It just
multiplies the ttl by 1000 to make it in milliseconds.
v4.2.1
v4.2.0
v4.1.0
v4.0.0
Major Changes
-
4803dda: Rewrite the storage service to better handle large numbers of operations
Why
The initial behavior was that
getRecord()
returned an list of sorted TTL
timestamps, then if it didn't reach the limit, it will calladdRecord()
.
This change was made based on the use of the Redis storage community package
where it was found how to prevent this issue. It was found out that
express-rate-limit
is incrementing a single number and returning the information in a single
roundtrip, which is significantly faster than how NestJS throttler works by
calledgetRecord()
, thenaddRecord
.Breaking Changes
- removed
getRecord
addRecord(key: string, ttl: number): Promise<number[]>;
changes toincrement(key: string, ttl: number): Promise<ThrottlerStorageRecord>;
How to Migrate
If you are just using the throttler library, you're already covered. No
changes necessary to your code, version 4.0.0 will work as is.If you are providing a custom storage, you will need to remove your current
service'sgetRecord
method and renameaddRecord
toincremenet
while
adhering to the new interface and returning anThrottlerStorageRecord
object - removed
v3.1.0
Minor Changes
-
da3c950: Add
skipIf
option to throttler module optionsWith the new option, you can pass a factory to
skipIf
and determine if the throttler guard should be used in the first palce or not. This acts just like applying@SkipThrottle()
to every route, but can be customized to work off of theprocess.env
orExecutionContext
object to provide better support for dev and QA environments.
v3.0.0
v2.0.1
Patch Changes
- cf50808: fix memory leak for timeoutIds array. Before this, the timeoutIds array would not be trimmed and would grow until out of memory. Now ids are properly removed on timeout.
Features
- adding in a comment about version (b13bf53)
BREAKING CHANGES
- v2 and above is now being developed specificially for
nest v8 and could have some unforseen side effects with Nest v7. use with
v7 at your own risk.