---
title: "@vonvon-kit/nextjs"
description: "Next.js middleware, App Router and Pages Router server helpers, plus React SDK re-exports."
locale: "en"
---

> Documentation Index
> Fetch the relevant documentation index at: https://vonvon.id/sdks/llms.txt
> Use this file to discover all available pages before exploring further.

# @vonvon-kit/nextjs

## Middleware

Registry status: UNPUBLISHED. Install this SDK only from the repository source checkout; do not use an external package registry.

`vonvonMiddleware()` verifies a Bearer or explicit application JWT on the Edge Runtime. For a same-origin Core session, it exchanges the opaque cookie through `/v1/sessions/token`, verifies the returned JWT, and injects auth state into downstream server request headers.

```ts
import { vonvonMiddleware } from '@vonvon-kit/nextjs'

export default vonvonMiddleware({
  jwtKey: JSON.parse(process.env.VONVON_JWKS_PUBLIC_KEY!),
  issuer: 'https://vonvon.id',
  // This same-origin path must be routed to Vonvon Core.
  sessionTokenExchange: { endpoint: '/v1/sessions/token' },
})

export const config = {
  matcher: ['/dashboard(.*)', '/api/protected(.*)'],
}
```

## App Router server helpers

```ts
import { auth, currentUser } from '@vonvon-kit/nextjs'

export default async function DashboardPage() {
  const { userId } = await auth()
  if (!userId) return null
  const user = await currentUser()
  return <p>Welcome {user?.email}</p>
}
```

## Pages Router

```ts
import { getAuth } from '@vonvon-kit/nextjs'

export const getServerSideProps = async (ctx) => {
  const { userId } = await getAuth(ctx.req)
  if (!userId) return { redirect: { destination: '/sign-in', permanent: false } }
  return { props: {} }
}
```

## Exported API

| Export | Kind | Purpose |
| --- | --- | --- |
| `vonvonMiddleware` | function | Edge Runtime middleware: verifies JWT, injects auth headers |
| `auth` | function | App Router: returns AuthObject with userId, orgId, orgRole |
| `getAuth` | function | Pages Router: returns AuthObject from IncomingMessage |
| `currentUser` | function | App Router: fetches full user object using server auth context |
| `vonvonClient` | function | Returns server-side VonvonApiClient bound to current request auth |
| `VONVON_AUTH_HEADER` | string constant | Header name for auth state between middleware and server components |
| `VonvonMiddlewareOptions` | type | Options for vonvonMiddleware: jwtKey, issuer, jwtCookieName, sessionTokenExchange, protectedRoutes, publicRoutes |
| `VonvonServerClientOptions` | type | Options for vonvonClient |
| `AuthObject` | type | Authenticated state: userId, orgId, orgRole, sessionId |
| `UnauthenticatedAuthObject` | type | Unauthenticated state with null fields |
| `AuthResult` | type | Union of AuthObject and UnauthenticatedAuthObject |
| `PaginationParams` | type | Cursor and limit params for Management API list calls |
| `PaginatedResponse<T>` | type | Paginated response envelope |

## Re-exports

- Re-exports all [@vonvon-kit/react](/sdks/react) client components and hooks via `export * from "@vonvon-kit/react"`.
- Re-exports from [@vonvon-kit/backend](/sdks/backend): `verifyToken`, `verifyWebhook`, `authenticateRequest`, `JwksCache`, `toVerifyKeySet`, `AppError`, `BACKEND_ERROR_CODES`, and all their associated types.
- Server helpers never expose signing secrets to client bundles.

Source: https://vonvon.id/sdks/nextjs/index.mdx
