Prerequisites

Skip the tutorial

Don’t want to read the tutorial? Click this to get an example ready to test.

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/api package

bun install @unkey/api
3

Modify the server

Open up the file called index.ts and add the following code

index.ts
import { verifyKey } from "@unkey/api";

const server = Bun.serve({
  async fetch(req) {
    const key = req.headers.get("Authorization")?.replace("Bearer ", "");
    if (!key) {
      return new Response("Unauthorized", { status: 401 });
    }

    const { result, error } = await verifyKey(key);
    if (error) {
      // This may happen on network errors
      // We already retry the request 5 times, but if it still fails, we return an error
      console.error(error);
      return Response.json("Internal Server Error", { status: 500 });
    }

    if (!result.valid) {
      return new Response("Unauthorized", { status: 401 });
    }

    return Response.json(result);
  },
  port: 8000,
});
console.log(`Listening on ${server.url}`);
4

Running the server

bun run index.ts
5

Try it out

Go to https://app.unkey.com and create a new key. Then verify it with our new server:

curl http://localhost:8000 -H "Authorization: Bearer <KEY>"

It should return {"keyId":"key_id","valid":true,"meta":{},"enabled":true,"permissions":[],"code":"VALID"} and potentially more information about the key, depending on what you set up in the dashboard.

What is next?

Now that you’ve seen the power of Unkey, check out some resources below to continue your journey.