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.
+
+ +
+ Documentation +
+
+ +## 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"