Ratelimiting
Bun
Ratelimiting endpoints with Bun’s http server
Prerequisites
- Created your Unkey account
- Created an Unkey root key with
ratelimit.*.create_namespace
andratelimit.*.limit
permissions.
Creating a bun server protected by Unkey
1
Create a new Bun project
First we need a bun project, so create a new directory and init bun.
mkdir unkey-with-bun
cd unkey-with-bun
bun init -y
2
Install
Now install the @unkey/ratelimit
package
bun install @unkey/ratelimit
3
Add Root Key to env
Add your root key to your .env
file
UNKEY_ROOT_KEY="YOUR_KEY"
4
Modify the server
Open up the file called index.ts
and add the following code
index.ts
import { Ratelimit } from "@unkey/ratelimit";
/**
This can be a seperate util for easy configurable ratelimiting across
multiple routes.
namespace = The route identifier you would like to ratelimit
limit = The amount of requests
duration = amount of time to limit against for example "30s"
**/
const limiter = new Ratelimit({
namespace: "bun-example",
limit: 2,
duration: "30s",
rootKey: process.env.UNKEY_ROOT_KEY
})
const server = Bun.serve({
async fetch(req) {
const identifier = req.getUserId() // or ip or anything else you want
const ratelimit = await limiter.limit(identifier)
if (!ratelimit.success){
return Response("try again later", { status: 429 })
}
return return new Response("Success", { status: 200 });
},
port: 8000,
});
console.log(`Listening on ${server.url}`);
5
Running the server
bun run index.ts
6
Try it out
curl http://localhost:8000
You will need to curl a few times to see the ratelimiting error. Once you do, you, you will need to wait to perform the action again.
What is next?
Now that you’ve seen the power of Unkey, check out some resources below to continue your journey.