From cff6f74547f38fbb4a99dc8340fab6cbbbd50aa4 Mon Sep 17 00:00:00 2001
From: Teddy ASSIH <110066080+Ionfinisher@users.noreply.github.com>
Date: Thu, 3 Oct 2024 16:33:50 +0000
Subject: [PATCH] docs: README for @unkey/nextjs #2162 (#2166)
---
packages/nextjs/README.md | 93 ++++++++++++++++++++++++++++++++++++
packages/nextjs/package.json | 2 +-
2 files changed, 94 insertions(+), 1 deletion(-)
create mode 100644 packages/nextjs/README.md
diff --git a/packages/nextjs/README.md b/packages/nextjs/README.md
new file mode 100644
index 0000000000..e89e818ef6
--- /dev/null
+++ b/packages/nextjs/README.md
@@ -0,0 +1,93 @@
+
+
@unkey/nextjs
+ `@unkey/nextjs` the official SDK for Next.js. Just use it in your route handlers a direct and type-safe method to verify API keys.
+
+
+
+
+
+## Installation
+
+```bash
+npm install @unkey/nextjs
+```
+
+## Quickstart
+
+Protecting API routes is as simple as wrapping them with the ```withUnkey``` handler:
+
+```ts
+import { NextRequestWithUnkeyContext, withUnkey } from '@unkey/nextjs';
+
+export const POST = withUnkey(async (req) => {
+
+ // Process the request here
+ // You have access to the verification response using `req.unkey`
+ console.log(req.unkey);
+
+ return new Response('Your API key is valid!');
+});
+```
+
+That’s it! Since this is just handling key verification, there’s no need to specify a root key as an environment variable.
+
+If you want to customize how withUnkey processes incoming requests, you can do so as follows:
+
+## ```getKey```
+By default, withUnkey will look for a bearer token located in the ```authorization``` header. If you want to customize this, you can do so by passing a getter in the configuration object:
+
+```ts
+export const GET = withUnkey(async (req) => {
+ // ...
+}, {
+ getKey: (req) => new URL(req.url).searchParams.get("key"),
+});
+```
+
+## ```onError```
+
+You can specify custom error handling. By default errors will be logged to the console, and ```withUnkey``` will return a NextResponse with status 500.
+
+```ts
+export const GET = withUnkey(async (req) => {
+ // ...
+}, {
+ onError: async (req, res) => {
+ await analytics.trackEvent(`Error ${res.code}: ${res.message}`)
+ return new NextResponse("Unkey error", { status: 500 })
+ }
+});
+```
+
+## ```handleInvalidKey```
+
+Specify what to do if Unkey reports that your key is invalid.
+
+```ts
+export const GET = withUnkey(async (req) => {
+ // ...
+}, {
+ handleInvalidKey: (req, res) => {
+ return new Response("Unauthorized", { status: 401 })
+ }
+});
+```
+
+
+## Disable telemetry
+
+By default, Unkey collects anonymous telemetry data to help us understand how our SDKs are used.
+
+If you wish to disable this, you can do so by passing a boolean flag to the constructor:
+
+```ts
+export const GET = withUnkey(async (req) => {
+ // ...
+}, { disableTelemetry: true });
+```
+
+### Documentation
+
+[Read the full documentation](https://www.unkey.com/docs/libraries/ts/nextjs)
\ No newline at end of file
diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json
index 7fe7efd6b9..f7084adb69 100644
--- a/packages/nextjs/package.json
+++ b/packages/nextjs/package.json
@@ -13,7 +13,7 @@
"url": "https://github.com/unkeyed/unkey/issues"
},
"homepage": "https://github.com/unkeyed/unkey#readme",
- "files": ["./dist/**"],
+ "files": ["./dist/**", "README.md"],
"author": "Andreas Thomas ",
"scripts": {
"build": "tsup"