-
Notifications
You must be signed in to change notification settings - Fork 527
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
docs: README.md for @unkey/ratelimit
- Loading branch information
1 parent
888cb1c
commit 6996e7d
Showing
2 changed files
with
92 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
<div align="center"> | ||
<h1 align="center">@unkey/ratelimit</h1> | ||
<h5>@unkey/ratelimit is a library for fast global ratelimiting in serverless functions.</h5> | ||
</div> | ||
|
||
<div align="center"> | ||
<a href="https://www.unkey.com/docs/libraries/ts/ratelimit">Documentation</a> | ||
</div> | ||
<br/> | ||
|
||
## Installation | ||
|
||
```bash | ||
npm install @unkey/ratelimit | ||
``` | ||
|
||
## Quickstart | ||
|
||
1. Configure your ratelimiter: | ||
|
||
```ts | ||
import { Ratelimit } from "@unkey/ratelimit"; | ||
|
||
const unkey = new Ratelimit({ | ||
rootKey: process.env.UNKEY_ROOT_KEY, | ||
namespace: "my-app", | ||
limit: 10, | ||
duration: "30s", | ||
async: true, | ||
}); | ||
``` | ||
|
||
2. Use it: | ||
|
||
```ts | ||
async function handler(request) { | ||
const identifier = request.getUserId(); // or IP or anything else you want | ||
|
||
const ratelimit = await unkey.limit(identifier); | ||
if (!ratelimit.success) { | ||
return new Response("try again later", { status: 429 }); | ||
} | ||
|
||
// handle the request here | ||
} | ||
``` | ||
|
||
## Making it Bullet Proof | ||
|
||
To ensure reliability, you can configure timeout and error handling: | ||
|
||
```ts | ||
import { Ratelimit } from "@unkey/ratelimit"; | ||
|
||
const fallback = (identifier: string) => ({ | ||
success: true, | ||
limit: 0, | ||
reset: 0, | ||
remaining: 0, | ||
}); | ||
|
||
const unkey = new Ratelimit({ | ||
// ... standard configuration | ||
timeout: { | ||
ms: 3000, // only wait 3s at most before returning the fallback | ||
fallback, | ||
}, | ||
onError: (err, identifier) => { | ||
console.error(`${identifier} - ${err.message}`); | ||
return fallback(identifier); | ||
}, | ||
}); | ||
``` | ||
|
||
## API Overview | ||
|
||
Create a new instance for ratelimiting by providing the necessary configuration. | ||
|
||
```ts | ||
new Ratelimit(config: RatelimitConfig) | ||
``` | ||
|
||
Check whether a specific identifier is currently allowed to do something or if they have currently exceeded their limit. | ||
|
||
```ts | ||
.limit(identifier: string, opts: LimitOptions): Promise<RatelimitResponse> | ||
``` | ||
|
||
### Documentation | ||
|
||
[Read the full documentation](https://www.unkey.com/docs/libraries/ts/ratelimit) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters