[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-vercel-auth":3,"mdc--id5z1o-key":37,"related-repo-vercel-auth":4339,"related-org-vercel-auth":4442},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"auth","integrate authentication in Next.js apps","Authentication integration guidance — Clerk (native Vercel Marketplace), Descope, and Auth0 setup for Next.js applications. Covers middleware auth patterns, sign-in\u002Fsign-up flows, and Marketplace provisioning. Use when implementing user authentication.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"vercel","Vercel","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fvercel.png",[12,16,17,20,23],{"name":13,"slug":14,"type":15},"Security","security","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Next.js","next-js",{"name":21,"slug":22,"type":15},"Auth0","auth0",{"name":24,"slug":25,"type":15},"Authentication","authentication",226,"https:\u002F\u002Fgithub.com\u002Fvercel\u002Fvercel-plugin","2026-04-06T18:56:17.050565",null,36,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"Comprehensive Vercel ecosystem plugin — relational knowledge graph, skills for every major product, specialized agents, and Vercel conventions. Turns any AI agent into a Vercel expert.","https:\u002F\u002Fgithub.com\u002Fvercel\u002Fvercel-plugin\u002Ftree\u002FHEAD\u002Fskills\u002Fauth","---\nname: auth\ndescription: Authentication integration guidance — Clerk (native Vercel Marketplace), Descope, and Auth0 setup for Next.js applications. Covers middleware auth patterns, sign-in\u002Fsign-up flows, and Marketplace provisioning. Use when implementing user authentication.\nmetadata:\n  priority: 6\n  docs:\n    - \"https:\u002F\u002Fauthjs.dev\u002Fgetting-started\"\n    - \"https:\u002F\u002Fnextjs.org\u002Fdocs\u002Fapp\u002Fbuilding-your-application\u002Fauthentication\"\n  sitemap: \"https:\u002F\u002Fauthjs.dev\u002Fsitemap.xml\"\n  pathPatterns:\n    - 'middleware.ts'\n    - 'middleware.js'\n    - 'src\u002Fmiddleware.ts'\n    - 'src\u002Fmiddleware.js'\n    - 'clerk.config.*'\n    - 'app\u002Fsign-in\u002F**'\n    - 'app\u002Fsign-up\u002F**'\n    - 'src\u002Fapp\u002Fsign-in\u002F**'\n    - 'src\u002Fapp\u002Fsign-up\u002F**'\n    - 'app\u002F(auth)\u002F**'\n    - 'src\u002Fapp\u002F(auth)\u002F**'\n    - 'auth.config.*'\n    - 'auth.ts'\n    - 'auth.js'\n  bashPatterns:\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@clerk\u002Fnextjs\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@clerk\u002Fnextjs\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@clerk\u002Fnextjs\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@clerk\u002Fnextjs\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@descope\u002Fnextjs-sdk\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@descope\u002Fnextjs-sdk\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@descope\u002Fnextjs-sdk\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@descope\u002Fnextjs-sdk\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@auth0\u002Fnextjs-auth0\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@auth0\u002Fnextjs-auth0\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@auth0\u002Fnextjs-auth0\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@auth0\u002Fnextjs-auth0\\b'\nvalidate:\n  -\n    pattern: 'VERCEL_CLIENT_(ID|SECRET)|vercel\\.com\u002Foauth\u002F(authorize|access_token|token)'\n    message: 'Hand-rolled Vercel OAuth detected. Use the Sign in with Vercel OIDC provider instead of manual token exchange.'\n    severity: recommended\n    skipIfFileContains: 'signInWithVercel|@vercel\u002Fauth'\nretrieval:\n  aliases:\n    - authentication\n    - login system\n    - sign in\n    - auth flow\n  intents:\n    - add auth\n    - protect routes\n    - manage sessions\n    - implement login\n    - secure api endpoints\n  entities:\n    - NextAuth\n    - Auth.js\n    - JWT\n    - OAuth\n    - session\n    - middleware\n    - getServerSession\n  examples:\n    - add login to my app\n    - protect this route with auth\n    - set up NextAuth\nchainTo:\n  -\n    pattern: 'export\\s+(default\\s+)?function\\s+middleware'\n    targetSkill: routing-middleware\n    message: 'Auth logic in middleware.ts — loading Routing Middleware guidance for proxy.ts migration in Next.js 16.'\n  -\n    pattern: 'from\\s+[''\\\"](jsonwebtoken)[''\"]|require\\s*\\(\\s*[''\\\"](jsonwebtoken)[''\"]|jwt\\.sign\\s*\\('\n    targetSkill: auth\n    message: 'Manual JWT handling with jsonwebtoken detected — use Clerk or Auth.js for managed auth with built-in JWT session handling, CSRF protection, and token rotation.'\n  -\n    pattern: 'from\\s+[''\\\"](next-auth)[''\"]|NextAuthOptions|authOptions\\s*:'\n    targetSkill: auth\n    message: 'Legacy next-auth (v4) pattern detected — loading auth guidance for Auth.js v5 migration with the new universal auth() helper.'\n  -\n    pattern: \"from\\\\s+['\\\"]@clerk\u002Fnextjs['\\\"]\"\n    targetSkill: auth\n    message: 'Clerk import detected — loading Auth guidance for Clerk v7 patterns, middleware setup, organization handling, and Vercel Marketplace integration.'\n    skipIfFileContains: 'clerkMiddleware|ClerkProvider'\n  -\n    pattern: \"bcrypt|argon2\"\n    targetSkill: auth\n    message: 'Manual password hashing detected (bcrypt\u002Fargon2) — use Clerk or Auth0 for managed authentication with built-in password hashing, rate limiting, and breach detection.'\n    skipIfFileContains: \"@clerk|@auth0\"\n---\n\n# Authentication Integrations\n\nYou are an expert in authentication for Vercel-deployed applications — covering Clerk (native Vercel Marketplace integration), Descope, and Auth0.\n\n## Clerk (Recommended — Native Marketplace Integration)\n\nClerk is a native Vercel Marketplace integration with auto-provisioned environment variables and unified billing. Current SDK: `@clerk\u002Fnextjs` v7 (Core 3, March 2026).\n\n### Install via Marketplace\n\n```bash\n# Install Clerk from Vercel Marketplace (auto-provisions env vars)\nvercel integration add clerk\n```\n\nAuto-provisioned environment variables:\n- `CLERK_SECRET_KEY` — server-side API key\n- `NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY` — client-side publishable key\n\n### SDK Setup\n\n```bash\n# Install the Clerk Next.js SDK\nnpm install @clerk\u002Fnextjs\n```\n\n### Middleware Configuration\n\n```ts\n\u002F\u002F middleware.ts\nimport { clerkMiddleware } from \"@clerk\u002Fnextjs\u002Fserver\";\n\nexport default clerkMiddleware();\n\nexport const config = {\n  matcher: [\n    \u002F\u002F Skip Next.js internals and static files\n    \"\u002F((?!_next|[^?]*\\\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)\",\n    \u002F\u002F Always run for API routes\n    \"\u002F(api|trpc)(.*)\",\n  ],\n};\n```\n\n### Protect Routes\n\n```ts\n\u002F\u002F middleware.ts — protect specific routes\nimport { clerkMiddleware, createRouteMatcher } from \"@clerk\u002Fnextjs\u002Fserver\";\n\nconst isProtectedRoute = createRouteMatcher([\"\u002Fdashboard(.*)\", \"\u002Fapi(.*)\"]);\n\nexport default clerkMiddleware(async (auth, req) => {\n  if (isProtectedRoute(req)) {\n    await auth.protect();\n  }\n});\n```\n\n### Frontend API Proxy (Core 3)\n\nProxy Clerk's Frontend API through your own domain to avoid third-party requests:\n\n```ts\n\u002F\u002F middleware.ts\nexport default clerkMiddleware({\n  frontendApiProxy: { enabled: true },\n});\n```\n\n### Provider Setup\n\n```tsx\n\u002F\u002F app\u002Flayout.tsx\nimport { ClerkProvider } from \"@clerk\u002Fnextjs\";\n\nexport default function RootLayout({\n  children,\n}: {\n  children: React.ReactNode;\n}) {\n  return (\n    \u003CClerkProvider>\n      \u003Chtml lang=\"en\">\n        \u003Cbody>{children}\u003C\u002Fbody>\n      \u003C\u002Fhtml>\n    \u003C\u002FClerkProvider>\n  );\n}\n```\n\n### Sign-In and Sign-Up Pages\n\n```tsx\n\u002F\u002F app\u002Fsign-in\u002F[[...sign-in]]\u002Fpage.tsx\nimport { SignIn } from \"@clerk\u002Fnextjs\";\n\nexport default function Page() {\n  return \u003CSignIn \u002F>;\n}\n```\n\n```tsx\n\u002F\u002F app\u002Fsign-up\u002F[[...sign-up]]\u002Fpage.tsx\nimport { SignUp } from \"@clerk\u002Fnextjs\";\n\nexport default function Page() {\n  return \u003CSignUp \u002F>;\n}\n```\n\nAdd routing env vars to `.env.local`:\n\n```env\nNEXT_PUBLIC_CLERK_SIGN_IN_URL=\u002Fsign-in\nNEXT_PUBLIC_CLERK_SIGN_UP_URL=\u002Fsign-up\n```\n\n### Access User Data\n\n```tsx\n\u002F\u002F Server component\nimport { currentUser } from \"@clerk\u002Fnextjs\u002Fserver\";\n\nexport default async function Page() {\n  const user = await currentUser();\n  return \u003Cp>Hello, {user?.firstName}\u003C\u002Fp>;\n}\n```\n\n```tsx\n\u002F\u002F Client component\n\"use client\";\nimport { useUser } from \"@clerk\u002Fnextjs\";\n\nexport default function UserGreeting() {\n  const { user, isLoaded } = useUser();\n  if (!isLoaded) return null;\n  return \u003Cp>Hello, {user?.firstName}\u003C\u002Fp>;\n}\n```\n\n### API Route Protection\n\n```ts\n\u002F\u002F app\u002Fapi\u002Fprotected\u002Froute.ts\nimport { auth } from \"@clerk\u002Fnextjs\u002Fserver\";\n\nexport async function GET() {\n  const { userId } = await auth();\n  if (!userId) {\n    return Response.json({ error: \"Unauthorized\" }, { status: 401 });\n  }\n  return Response.json({ userId });\n}\n```\n\n## Descope\n\nDescope is available on the Vercel Marketplace with native integration support.\n\n### Install via Marketplace\n\n```bash\nvercel integration add descope\n```\n\n### SDK Setup\n\n```bash\nnpm install @descope\u002Fnextjs-sdk\n```\n\n### Provider and Middleware\n\n```tsx\n\u002F\u002F app\u002Flayout.tsx\nimport { AuthProvider } from \"@descope\u002Fnextjs-sdk\";\n\nexport default function RootLayout({\n  children,\n}: {\n  children: React.ReactNode;\n}) {\n  return (\n    \u003CAuthProvider projectId={process.env.NEXT_PUBLIC_DESCOPE_PROJECT_ID!}>\n      \u003Chtml lang=\"en\">\n        \u003Cbody>{children}\u003C\u002Fbody>\n      \u003C\u002Fhtml>\n    \u003C\u002FAuthProvider>\n  );\n}\n```\n\n```ts\n\u002F\u002F middleware.ts\nimport { authMiddleware } from \"@descope\u002Fnextjs-sdk\u002Fserver\";\n\nexport default authMiddleware({\n  projectId: process.env.DESCOPE_PROJECT_ID!,\n  publicRoutes: [\"\u002F\", \"\u002Fsign-in\"],\n});\n```\n\n### Sign-In Flow\n\n```tsx\n\"use client\";\nimport { Descope } from \"@descope\u002Fnextjs-sdk\";\n\nexport default function SignInPage() {\n  return \u003CDescope flowId=\"sign-up-or-in\" \u002F>;\n}\n```\n\n## Auth0\n\nAuth0 provides a mature authentication platform with extensive identity provider support.\n\n### SDK Setup\n\n```bash\nnpm install @auth0\u002Fnextjs-auth0\n```\n\n### Configuration\n\n```ts\n\u002F\u002F lib\u002Fauth0.ts\nimport { Auth0Client } from \"@auth0\u002Fnextjs-auth0\u002Fserver\";\n\nexport const auth0 = new Auth0Client();\n```\n\nRequired environment variables:\n\n```env\nAUTH0_SECRET=\u003Crandom-secret>\nAUTH0_BASE_URL=http:\u002F\u002Flocalhost:3000\nAUTH0_ISSUER_BASE_URL=https:\u002F\u002Fyour-tenant.auth0.com\nAUTH0_CLIENT_ID=\u003Cclient-id>\nAUTH0_CLIENT_SECRET=\u003Cclient-secret>\n```\n\n### Middleware\n\n```ts\n\u002F\u002F middleware.ts\nimport { auth0 } from \"@\u002Flib\u002Fauth0\";\nimport { NextRequest, NextResponse } from \"next\u002Fserver\";\n\nexport async function middleware(request: NextRequest) {\n  return await auth0.middleware(request);\n}\n\nexport const config = {\n  matcher: [\n    \"\u002F((?!_next\u002Fstatic|_next\u002Fimage|favicon.ico|sitemap.xml|robots.txt).*)\",\n  ],\n};\n```\n\n### Access Session Data\n\n```tsx\n\u002F\u002F Server component\nimport { auth0 } from \"@\u002Flib\u002Fauth0\";\n\nexport default async function Page() {\n  const session = await auth0.getSession();\n  return session ? (\n    \u003Cp>Hello, {session.user.name}\u003C\u002Fp>\n  ) : (\n    \u003Ca href=\"\u002Fauth\u002Flogin\">Log in\u003C\u002Fa>\n  );\n}\n```\n\n## Decision Matrix\n\n| Need | Recommended | Why |\n|------|------------|-----|\n| Fastest setup on Vercel | Clerk | Native Marketplace, auto-provisioned env vars |\n| Passwordless \u002F social login flows | Descope | Visual flow builder, Marketplace native |\n| Enterprise SSO \u002F SAML \u002F multi-tenant | Auth0 | Deep enterprise identity support |\n| Pre-built UI components | Clerk | Drop-in `\u003CSignIn \u002F>`, `\u003CUserButton \u002F>` |\n| Vercel unified billing | Clerk or Descope | Both are native Marketplace integrations |\n\n## Clerk Core 3 Breaking Changes (March 2026)\n\nClerk provides an upgrade CLI that scans your codebase and applies codemods: `npx @clerk\u002Fupgrade`. Requires **Node.js 20.9.0+**.\n\n- **`auth()` is async** — always use `const { userId } = await auth()`, not synchronous\n- **`auth.protect()` moved** — use `await auth.protect()` directly, not from the return value of `auth()`\n- **`clerkClient()` is async** — use `await clerkClient()` in middleware handlers\n- **`authMiddleware()` removed** — migrate to `clerkMiddleware()`\n- **`@clerk\u002Ftypes` deprecated** — import types from SDK subpath exports: `import type { UserResource } from '@clerk\u002Freact\u002Ftypes'` (works from any SDK package)\n- **`ClerkProvider` no longer forces dynamic rendering** — pass the `dynamic` prop if needed\n- **Cache components** — when using Next.js cache components, place `\u003CClerkProvider>` inside `\u003Cbody>`, not wrapping `\u003Chtml>`\n- **Satellite domains** — new `satelliteAutoSync` option skips handshake redirects when no session cookies exist\n- **Smaller bundles** — React is now shared across framework SDKs (~50KB gzipped savings)\n- **Better offline handling** — `getToken()` now correctly distinguishes signed-out from offline states\n\n## Cross-References\n\n- **Marketplace install and env var provisioning** → `⤳ skill: marketplace`\n- **Middleware routing patterns** → `⤳ skill: routing-middleware`\n- **Environment variable management** → `⤳ skill: env-vars`\n\n## Official Documentation\n\n- [Clerk + Vercel Marketplace](https:\u002F\u002Fclerk.com\u002Fdocs\u002Fdeployments\u002Fvercel)\n- [Clerk Next.js Quickstart](https:\u002F\u002Fclerk.com\u002Fdocs\u002Fquickstarts\u002Fnextjs)\n- [Descope Next.js SDK](https:\u002F\u002Fdocs.descope.com\u002Fgetting-started\u002Fnextjs)\n- [Auth0 Next.js SDK](https:\u002F\u002Fauth0.com\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fnextjs)\n",{"data":38,"body":121},{"name":4,"description":6,"metadata":39,"validate":73,"retrieval":79,"chainTo":102},{"priority":40,"docs":41,"sitemap":44,"pathPatterns":45,"bashPatterns":60},6,[42,43],"https:\u002F\u002Fauthjs.dev\u002Fgetting-started","https:\u002F\u002Fnextjs.org\u002Fdocs\u002Fapp\u002Fbuilding-your-application\u002Fauthentication","https:\u002F\u002Fauthjs.dev\u002Fsitemap.xml",[46,47,48,49,50,51,52,53,54,55,56,57,58,59],"middleware.ts","middleware.js","src\u002Fmiddleware.ts","src\u002Fmiddleware.js","clerk.config.*","app\u002Fsign-in\u002F**","app\u002Fsign-up\u002F**","src\u002Fapp\u002Fsign-in\u002F**","src\u002Fapp\u002Fsign-up\u002F**","app\u002F(auth)\u002F**","src\u002Fapp\u002F(auth)\u002F**","auth.config.*","auth.ts","auth.js",[61,62,63,64,65,66,67,68,69,70,71,72],"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@clerk\u002Fnextjs\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@clerk\u002Fnextjs\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@clerk\u002Fnextjs\\b","\\byarn\\s+add\\s+[^\\n]*@clerk\u002Fnextjs\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@descope\u002Fnextjs-sdk\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@descope\u002Fnextjs-sdk\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@descope\u002Fnextjs-sdk\\b","\\byarn\\s+add\\s+[^\\n]*@descope\u002Fnextjs-sdk\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@auth0\u002Fnextjs-auth0\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@auth0\u002Fnextjs-auth0\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@auth0\u002Fnextjs-auth0\\b","\\byarn\\s+add\\s+[^\\n]*@auth0\u002Fnextjs-auth0\\b",[74],{"pattern":75,"message":76,"severity":77,"skipIfFileContains":78},"VERCEL_CLIENT_(ID|SECRET)|vercel\\.com\u002Foauth\u002F(authorize|access_token|token)","Hand-rolled Vercel OAuth detected. Use the Sign in with Vercel OIDC provider instead of manual token exchange.","recommended","signInWithVercel|@vercel\u002Fauth",{"aliases":80,"intents":84,"entities":90,"examples":98},[25,81,82,83],"login system","sign in","auth flow",[85,86,87,88,89],"add auth","protect routes","manage sessions","implement login","secure api endpoints",[91,92,93,94,95,96,97],"NextAuth","Auth.js","JWT","OAuth","session","middleware","getServerSession",[99,100,101],"add login to my app","protect this route with auth","set up NextAuth",[103,107,110,113,117],{"pattern":104,"targetSkill":105,"message":106},"export\\s+(default\\s+)?function\\s+middleware","routing-middleware","Auth logic in middleware.ts — loading Routing Middleware guidance for proxy.ts migration in Next.js 16.",{"pattern":108,"targetSkill":4,"message":109},"from\\s+['\\\"](jsonwebtoken)['\"]|require\\s*\\(\\s*['\\\"](jsonwebtoken)['\"]|jwt\\.sign\\s*\\(","Manual JWT handling with jsonwebtoken detected — use Clerk or Auth.js for managed auth with built-in JWT session handling, CSRF protection, and token rotation.",{"pattern":111,"targetSkill":4,"message":112},"from\\s+['\\\"](next-auth)['\"]|NextAuthOptions|authOptions\\s*:","Legacy next-auth (v4) pattern detected — loading auth guidance for Auth.js v5 migration with the new universal auth() helper.",{"pattern":114,"targetSkill":4,"message":115,"skipIfFileContains":116},"from\\s+['\"]@clerk\u002Fnextjs['\"]","Clerk import detected — loading Auth guidance for Clerk v7 patterns, middleware setup, organization handling, and Vercel Marketplace integration.","clerkMiddleware|ClerkProvider",{"pattern":118,"targetSkill":4,"message":119,"skipIfFileContains":120},"bcrypt|argon2","Manual password hashing detected (bcrypt\u002Fargon2) — use Clerk or Auth0 for managed authentication with built-in password hashing, rate limiting, and breach detection.","@clerk|@auth0",{"type":122,"children":123},"root",[124,133,139,146,160,167,215,220,247,253,286,292,548,554,846,852,857,945,951,1267,1273,1392,1508,1520,1545,1551,1745,1993,1999,2301,2307,2312,2317,2344,2349,2372,2378,2697,2892,2898,3047,3051,3056,3061,3084,3090,3190,3195,3242,3247,3533,3539,3837,3843,3977,3983,4003,4228,4234,4283,4289,4333],{"type":125,"tag":126,"props":127,"children":129},"element","h1",{"id":128},"authentication-integrations",[130],{"type":131,"value":132},"text","Authentication Integrations",{"type":125,"tag":134,"props":135,"children":136},"p",{},[137],{"type":131,"value":138},"You are an expert in authentication for Vercel-deployed applications — covering Clerk (native Vercel Marketplace integration), Descope, and Auth0.",{"type":125,"tag":140,"props":141,"children":143},"h2",{"id":142},"clerk-recommended-native-marketplace-integration",[144],{"type":131,"value":145},"Clerk (Recommended — Native Marketplace Integration)",{"type":125,"tag":134,"props":147,"children":148},{},[149,151,158],{"type":131,"value":150},"Clerk is a native Vercel Marketplace integration with auto-provisioned environment variables and unified billing. Current SDK: ",{"type":125,"tag":152,"props":153,"children":155},"code",{"className":154},[],[156],{"type":131,"value":157},"@clerk\u002Fnextjs",{"type":131,"value":159}," v7 (Core 3, March 2026).",{"type":125,"tag":161,"props":162,"children":164},"h3",{"id":163},"install-via-marketplace",[165],{"type":131,"value":166},"Install via Marketplace",{"type":125,"tag":168,"props":169,"children":174},"pre",{"className":170,"code":171,"language":172,"meta":173,"style":173},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Install Clerk from Vercel Marketplace (auto-provisions env vars)\nvercel integration add clerk\n","bash","",[175],{"type":125,"tag":152,"props":176,"children":177},{"__ignoreMap":173},[178,190],{"type":125,"tag":179,"props":180,"children":183},"span",{"class":181,"line":182},"line",1,[184],{"type":125,"tag":179,"props":185,"children":187},{"style":186},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[188],{"type":131,"value":189},"# Install Clerk from Vercel Marketplace (auto-provisions env vars)\n",{"type":125,"tag":179,"props":191,"children":193},{"class":181,"line":192},2,[194,199,205,210],{"type":125,"tag":179,"props":195,"children":197},{"style":196},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[198],{"type":131,"value":8},{"type":125,"tag":179,"props":200,"children":202},{"style":201},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[203],{"type":131,"value":204}," integration",{"type":125,"tag":179,"props":206,"children":207},{"style":201},[208],{"type":131,"value":209}," add",{"type":125,"tag":179,"props":211,"children":212},{"style":201},[213],{"type":131,"value":214}," clerk\n",{"type":125,"tag":134,"props":216,"children":217},{},[218],{"type":131,"value":219},"Auto-provisioned environment variables:",{"type":125,"tag":221,"props":222,"children":223},"ul",{},[224,236],{"type":125,"tag":225,"props":226,"children":227},"li",{},[228,234],{"type":125,"tag":152,"props":229,"children":231},{"className":230},[],[232],{"type":131,"value":233},"CLERK_SECRET_KEY",{"type":131,"value":235}," — server-side API key",{"type":125,"tag":225,"props":237,"children":238},{},[239,245],{"type":125,"tag":152,"props":240,"children":242},{"className":241},[],[243],{"type":131,"value":244},"NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY",{"type":131,"value":246}," — client-side publishable key",{"type":125,"tag":161,"props":248,"children":250},{"id":249},"sdk-setup",[251],{"type":131,"value":252},"SDK Setup",{"type":125,"tag":168,"props":254,"children":256},{"className":170,"code":255,"language":172,"meta":173,"style":173},"# Install the Clerk Next.js SDK\nnpm install @clerk\u002Fnextjs\n",[257],{"type":125,"tag":152,"props":258,"children":259},{"__ignoreMap":173},[260,268],{"type":125,"tag":179,"props":261,"children":262},{"class":181,"line":182},[263],{"type":125,"tag":179,"props":264,"children":265},{"style":186},[266],{"type":131,"value":267},"# Install the Clerk Next.js SDK\n",{"type":125,"tag":179,"props":269,"children":270},{"class":181,"line":192},[271,276,281],{"type":125,"tag":179,"props":272,"children":273},{"style":196},[274],{"type":131,"value":275},"npm",{"type":125,"tag":179,"props":277,"children":278},{"style":201},[279],{"type":131,"value":280}," install",{"type":125,"tag":179,"props":282,"children":283},{"style":201},[284],{"type":131,"value":285}," @clerk\u002Fnextjs\n",{"type":125,"tag":161,"props":287,"children":289},{"id":288},"middleware-configuration",[290],{"type":131,"value":291},"Middleware Configuration",{"type":125,"tag":168,"props":293,"children":297},{"className":294,"code":295,"language":296,"meta":173,"style":173},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F middleware.ts\nimport { clerkMiddleware } from \"@clerk\u002Fnextjs\u002Fserver\";\n\nexport default clerkMiddleware();\n\nexport const config = {\n  matcher: [\n    \u002F\u002F Skip Next.js internals and static files\n    \"\u002F((?!_next|[^?]*\\\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)\",\n    \u002F\u002F Always run for API routes\n    \"\u002F(api|trpc)(.*)\",\n  ],\n};\n","ts",[298],{"type":125,"tag":152,"props":299,"children":300},{"__ignoreMap":173},[301,309,360,370,398,406,434,454,463,496,505,526,539],{"type":125,"tag":179,"props":302,"children":303},{"class":181,"line":182},[304],{"type":125,"tag":179,"props":305,"children":306},{"style":186},[307],{"type":131,"value":308},"\u002F\u002F middleware.ts\n",{"type":125,"tag":179,"props":310,"children":311},{"class":181,"line":192},[312,318,324,330,335,340,345,350,355],{"type":125,"tag":179,"props":313,"children":315},{"style":314},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[316],{"type":131,"value":317},"import",{"type":125,"tag":179,"props":319,"children":321},{"style":320},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[322],{"type":131,"value":323}," {",{"type":125,"tag":179,"props":325,"children":327},{"style":326},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[328],{"type":131,"value":329}," clerkMiddleware",{"type":125,"tag":179,"props":331,"children":332},{"style":320},[333],{"type":131,"value":334}," }",{"type":125,"tag":179,"props":336,"children":337},{"style":314},[338],{"type":131,"value":339}," from",{"type":125,"tag":179,"props":341,"children":342},{"style":320},[343],{"type":131,"value":344}," \"",{"type":125,"tag":179,"props":346,"children":347},{"style":201},[348],{"type":131,"value":349},"@clerk\u002Fnextjs\u002Fserver",{"type":125,"tag":179,"props":351,"children":352},{"style":320},[353],{"type":131,"value":354},"\"",{"type":125,"tag":179,"props":356,"children":357},{"style":320},[358],{"type":131,"value":359},";\n",{"type":125,"tag":179,"props":361,"children":363},{"class":181,"line":362},3,[364],{"type":125,"tag":179,"props":365,"children":367},{"emptyLinePlaceholder":366},true,[368],{"type":131,"value":369},"\n",{"type":125,"tag":179,"props":371,"children":373},{"class":181,"line":372},4,[374,379,384,389,394],{"type":125,"tag":179,"props":375,"children":376},{"style":314},[377],{"type":131,"value":378},"export",{"type":125,"tag":179,"props":380,"children":381},{"style":314},[382],{"type":131,"value":383}," default",{"type":125,"tag":179,"props":385,"children":387},{"style":386},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[388],{"type":131,"value":329},{"type":125,"tag":179,"props":390,"children":391},{"style":326},[392],{"type":131,"value":393},"()",{"type":125,"tag":179,"props":395,"children":396},{"style":320},[397],{"type":131,"value":359},{"type":125,"tag":179,"props":399,"children":401},{"class":181,"line":400},5,[402],{"type":125,"tag":179,"props":403,"children":404},{"emptyLinePlaceholder":366},[405],{"type":131,"value":369},{"type":125,"tag":179,"props":407,"children":408},{"class":181,"line":40},[409,413,419,424,429],{"type":125,"tag":179,"props":410,"children":411},{"style":314},[412],{"type":131,"value":378},{"type":125,"tag":179,"props":414,"children":416},{"style":415},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[417],{"type":131,"value":418}," const",{"type":125,"tag":179,"props":420,"children":421},{"style":326},[422],{"type":131,"value":423}," config ",{"type":125,"tag":179,"props":425,"children":426},{"style":320},[427],{"type":131,"value":428},"=",{"type":125,"tag":179,"props":430,"children":431},{"style":320},[432],{"type":131,"value":433}," {\n",{"type":125,"tag":179,"props":435,"children":437},{"class":181,"line":436},7,[438,444,449],{"type":125,"tag":179,"props":439,"children":441},{"style":440},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[442],{"type":131,"value":443},"  matcher",{"type":125,"tag":179,"props":445,"children":446},{"style":320},[447],{"type":131,"value":448},":",{"type":125,"tag":179,"props":450,"children":451},{"style":326},[452],{"type":131,"value":453}," [\n",{"type":125,"tag":179,"props":455,"children":457},{"class":181,"line":456},8,[458],{"type":125,"tag":179,"props":459,"children":460},{"style":186},[461],{"type":131,"value":462},"    \u002F\u002F Skip Next.js internals and static files\n",{"type":125,"tag":179,"props":464,"children":466},{"class":181,"line":465},9,[467,472,477,482,487,491],{"type":125,"tag":179,"props":468,"children":469},{"style":320},[470],{"type":131,"value":471},"    \"",{"type":125,"tag":179,"props":473,"children":474},{"style":201},[475],{"type":131,"value":476},"\u002F((?!_next|[^?]*",{"type":125,"tag":179,"props":478,"children":479},{"style":326},[480],{"type":131,"value":481},"\\\\",{"type":125,"tag":179,"props":483,"children":484},{"style":201},[485],{"type":131,"value":486},".(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)",{"type":125,"tag":179,"props":488,"children":489},{"style":320},[490],{"type":131,"value":354},{"type":125,"tag":179,"props":492,"children":493},{"style":320},[494],{"type":131,"value":495},",\n",{"type":125,"tag":179,"props":497,"children":499},{"class":181,"line":498},10,[500],{"type":125,"tag":179,"props":501,"children":502},{"style":186},[503],{"type":131,"value":504},"    \u002F\u002F Always run for API routes\n",{"type":125,"tag":179,"props":506,"children":508},{"class":181,"line":507},11,[509,513,518,522],{"type":125,"tag":179,"props":510,"children":511},{"style":320},[512],{"type":131,"value":471},{"type":125,"tag":179,"props":514,"children":515},{"style":201},[516],{"type":131,"value":517},"\u002F(api|trpc)(.*)",{"type":125,"tag":179,"props":519,"children":520},{"style":320},[521],{"type":131,"value":354},{"type":125,"tag":179,"props":523,"children":524},{"style":320},[525],{"type":131,"value":495},{"type":125,"tag":179,"props":527,"children":529},{"class":181,"line":528},12,[530,535],{"type":125,"tag":179,"props":531,"children":532},{"style":326},[533],{"type":131,"value":534},"  ]",{"type":125,"tag":179,"props":536,"children":537},{"style":320},[538],{"type":131,"value":495},{"type":125,"tag":179,"props":540,"children":542},{"class":181,"line":541},13,[543],{"type":125,"tag":179,"props":544,"children":545},{"style":320},[546],{"type":131,"value":547},"};\n",{"type":125,"tag":161,"props":549,"children":551},{"id":550},"protect-routes",[552],{"type":131,"value":553},"Protect Routes",{"type":125,"tag":168,"props":555,"children":557},{"className":294,"code":556,"language":296,"meta":173,"style":173},"\u002F\u002F middleware.ts — protect specific routes\nimport { clerkMiddleware, createRouteMatcher } from \"@clerk\u002Fnextjs\u002Fserver\";\n\nconst isProtectedRoute = createRouteMatcher([\"\u002Fdashboard(.*)\", \"\u002Fapi(.*)\"]);\n\nexport default clerkMiddleware(async (auth, req) => {\n  if (isProtectedRoute(req)) {\n    await auth.protect();\n  }\n});\n",[558],{"type":125,"tag":152,"props":559,"children":560},{"__ignoreMap":173},[561,569,618,625,690,697,755,791,822,830],{"type":125,"tag":179,"props":562,"children":563},{"class":181,"line":182},[564],{"type":125,"tag":179,"props":565,"children":566},{"style":186},[567],{"type":131,"value":568},"\u002F\u002F middleware.ts — protect specific routes\n",{"type":125,"tag":179,"props":570,"children":571},{"class":181,"line":192},[572,576,580,584,589,594,598,602,606,610,614],{"type":125,"tag":179,"props":573,"children":574},{"style":314},[575],{"type":131,"value":317},{"type":125,"tag":179,"props":577,"children":578},{"style":320},[579],{"type":131,"value":323},{"type":125,"tag":179,"props":581,"children":582},{"style":326},[583],{"type":131,"value":329},{"type":125,"tag":179,"props":585,"children":586},{"style":320},[587],{"type":131,"value":588},",",{"type":125,"tag":179,"props":590,"children":591},{"style":326},[592],{"type":131,"value":593}," createRouteMatcher",{"type":125,"tag":179,"props":595,"children":596},{"style":320},[597],{"type":131,"value":334},{"type":125,"tag":179,"props":599,"children":600},{"style":314},[601],{"type":131,"value":339},{"type":125,"tag":179,"props":603,"children":604},{"style":320},[605],{"type":131,"value":344},{"type":125,"tag":179,"props":607,"children":608},{"style":201},[609],{"type":131,"value":349},{"type":125,"tag":179,"props":611,"children":612},{"style":320},[613],{"type":131,"value":354},{"type":125,"tag":179,"props":615,"children":616},{"style":320},[617],{"type":131,"value":359},{"type":125,"tag":179,"props":619,"children":620},{"class":181,"line":362},[621],{"type":125,"tag":179,"props":622,"children":623},{"emptyLinePlaceholder":366},[624],{"type":131,"value":369},{"type":125,"tag":179,"props":626,"children":627},{"class":181,"line":372},[628,633,638,642,646,651,655,660,664,668,672,677,681,686],{"type":125,"tag":179,"props":629,"children":630},{"style":415},[631],{"type":131,"value":632},"const",{"type":125,"tag":179,"props":634,"children":635},{"style":326},[636],{"type":131,"value":637}," isProtectedRoute ",{"type":125,"tag":179,"props":639,"children":640},{"style":320},[641],{"type":131,"value":428},{"type":125,"tag":179,"props":643,"children":644},{"style":386},[645],{"type":131,"value":593},{"type":125,"tag":179,"props":647,"children":648},{"style":326},[649],{"type":131,"value":650},"([",{"type":125,"tag":179,"props":652,"children":653},{"style":320},[654],{"type":131,"value":354},{"type":125,"tag":179,"props":656,"children":657},{"style":201},[658],{"type":131,"value":659},"\u002Fdashboard(.*)",{"type":125,"tag":179,"props":661,"children":662},{"style":320},[663],{"type":131,"value":354},{"type":125,"tag":179,"props":665,"children":666},{"style":320},[667],{"type":131,"value":588},{"type":125,"tag":179,"props":669,"children":670},{"style":320},[671],{"type":131,"value":344},{"type":125,"tag":179,"props":673,"children":674},{"style":201},[675],{"type":131,"value":676},"\u002Fapi(.*)",{"type":125,"tag":179,"props":678,"children":679},{"style":320},[680],{"type":131,"value":354},{"type":125,"tag":179,"props":682,"children":683},{"style":326},[684],{"type":131,"value":685},"])",{"type":125,"tag":179,"props":687,"children":688},{"style":320},[689],{"type":131,"value":359},{"type":125,"tag":179,"props":691,"children":692},{"class":181,"line":400},[693],{"type":125,"tag":179,"props":694,"children":695},{"emptyLinePlaceholder":366},[696],{"type":131,"value":369},{"type":125,"tag":179,"props":698,"children":699},{"class":181,"line":40},[700,704,708,712,717,722,727,732,736,741,746,751],{"type":125,"tag":179,"props":701,"children":702},{"style":314},[703],{"type":131,"value":378},{"type":125,"tag":179,"props":705,"children":706},{"style":314},[707],{"type":131,"value":383},{"type":125,"tag":179,"props":709,"children":710},{"style":386},[711],{"type":131,"value":329},{"type":125,"tag":179,"props":713,"children":714},{"style":326},[715],{"type":131,"value":716},"(",{"type":125,"tag":179,"props":718,"children":719},{"style":415},[720],{"type":131,"value":721},"async",{"type":125,"tag":179,"props":723,"children":724},{"style":320},[725],{"type":131,"value":726}," (",{"type":125,"tag":179,"props":728,"children":730},{"style":729},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[731],{"type":131,"value":4},{"type":125,"tag":179,"props":733,"children":734},{"style":320},[735],{"type":131,"value":588},{"type":125,"tag":179,"props":737,"children":738},{"style":729},[739],{"type":131,"value":740}," req",{"type":125,"tag":179,"props":742,"children":743},{"style":320},[744],{"type":131,"value":745},")",{"type":125,"tag":179,"props":747,"children":748},{"style":415},[749],{"type":131,"value":750}," =>",{"type":125,"tag":179,"props":752,"children":753},{"style":320},[754],{"type":131,"value":433},{"type":125,"tag":179,"props":756,"children":757},{"class":181,"line":436},[758,763,767,772,776,781,786],{"type":125,"tag":179,"props":759,"children":760},{"style":314},[761],{"type":131,"value":762},"  if",{"type":125,"tag":179,"props":764,"children":765},{"style":440},[766],{"type":131,"value":726},{"type":125,"tag":179,"props":768,"children":769},{"style":386},[770],{"type":131,"value":771},"isProtectedRoute",{"type":125,"tag":179,"props":773,"children":774},{"style":440},[775],{"type":131,"value":716},{"type":125,"tag":179,"props":777,"children":778},{"style":326},[779],{"type":131,"value":780},"req",{"type":125,"tag":179,"props":782,"children":783},{"style":440},[784],{"type":131,"value":785},")) ",{"type":125,"tag":179,"props":787,"children":788},{"style":320},[789],{"type":131,"value":790},"{\n",{"type":125,"tag":179,"props":792,"children":793},{"class":181,"line":456},[794,799,804,809,814,818],{"type":125,"tag":179,"props":795,"children":796},{"style":314},[797],{"type":131,"value":798},"    await",{"type":125,"tag":179,"props":800,"children":801},{"style":326},[802],{"type":131,"value":803}," auth",{"type":125,"tag":179,"props":805,"children":806},{"style":320},[807],{"type":131,"value":808},".",{"type":125,"tag":179,"props":810,"children":811},{"style":386},[812],{"type":131,"value":813},"protect",{"type":125,"tag":179,"props":815,"children":816},{"style":440},[817],{"type":131,"value":393},{"type":125,"tag":179,"props":819,"children":820},{"style":320},[821],{"type":131,"value":359},{"type":125,"tag":179,"props":823,"children":824},{"class":181,"line":465},[825],{"type":125,"tag":179,"props":826,"children":827},{"style":320},[828],{"type":131,"value":829},"  }\n",{"type":125,"tag":179,"props":831,"children":832},{"class":181,"line":498},[833,838,842],{"type":125,"tag":179,"props":834,"children":835},{"style":320},[836],{"type":131,"value":837},"}",{"type":125,"tag":179,"props":839,"children":840},{"style":326},[841],{"type":131,"value":745},{"type":125,"tag":179,"props":843,"children":844},{"style":320},[845],{"type":131,"value":359},{"type":125,"tag":161,"props":847,"children":849},{"id":848},"frontend-api-proxy-core-3",[850],{"type":131,"value":851},"Frontend API Proxy (Core 3)",{"type":125,"tag":134,"props":853,"children":854},{},[855],{"type":131,"value":856},"Proxy Clerk's Frontend API through your own domain to avoid third-party requests:",{"type":125,"tag":168,"props":858,"children":860},{"className":294,"code":859,"language":296,"meta":173,"style":173},"\u002F\u002F middleware.ts\nexport default clerkMiddleware({\n  frontendApiProxy: { enabled: true },\n});\n",[861],{"type":125,"tag":152,"props":862,"children":863},{"__ignoreMap":173},[864,871,894,930],{"type":125,"tag":179,"props":865,"children":866},{"class":181,"line":182},[867],{"type":125,"tag":179,"props":868,"children":869},{"style":186},[870],{"type":131,"value":308},{"type":125,"tag":179,"props":872,"children":873},{"class":181,"line":192},[874,878,882,886,890],{"type":125,"tag":179,"props":875,"children":876},{"style":314},[877],{"type":131,"value":378},{"type":125,"tag":179,"props":879,"children":880},{"style":314},[881],{"type":131,"value":383},{"type":125,"tag":179,"props":883,"children":884},{"style":386},[885],{"type":131,"value":329},{"type":125,"tag":179,"props":887,"children":888},{"style":326},[889],{"type":131,"value":716},{"type":125,"tag":179,"props":891,"children":892},{"style":320},[893],{"type":131,"value":790},{"type":125,"tag":179,"props":895,"children":896},{"class":181,"line":362},[897,902,906,910,915,919,925],{"type":125,"tag":179,"props":898,"children":899},{"style":440},[900],{"type":131,"value":901},"  frontendApiProxy",{"type":125,"tag":179,"props":903,"children":904},{"style":320},[905],{"type":131,"value":448},{"type":125,"tag":179,"props":907,"children":908},{"style":320},[909],{"type":131,"value":323},{"type":125,"tag":179,"props":911,"children":912},{"style":440},[913],{"type":131,"value":914}," enabled",{"type":125,"tag":179,"props":916,"children":917},{"style":320},[918],{"type":131,"value":448},{"type":125,"tag":179,"props":920,"children":922},{"style":921},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[923],{"type":131,"value":924}," true",{"type":125,"tag":179,"props":926,"children":927},{"style":320},[928],{"type":131,"value":929}," },\n",{"type":125,"tag":179,"props":931,"children":932},{"class":181,"line":372},[933,937,941],{"type":125,"tag":179,"props":934,"children":935},{"style":320},[936],{"type":131,"value":837},{"type":125,"tag":179,"props":938,"children":939},{"style":326},[940],{"type":131,"value":745},{"type":125,"tag":179,"props":942,"children":943},{"style":320},[944],{"type":131,"value":359},{"type":125,"tag":161,"props":946,"children":948},{"id":947},"provider-setup",[949],{"type":131,"value":950},"Provider Setup",{"type":125,"tag":168,"props":952,"children":956},{"className":953,"code":954,"language":955,"meta":173,"style":173},"language-tsx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F app\u002Flayout.tsx\nimport { ClerkProvider } from \"@clerk\u002Fnextjs\";\n\nexport default function RootLayout({\n  children,\n}: {\n  children: React.ReactNode;\n}) {\n  return (\n    \u003CClerkProvider>\n      \u003Chtml lang=\"en\">\n        \u003Cbody>{children}\u003C\u002Fbody>\n      \u003C\u002Fhtml>\n    \u003C\u002FClerkProvider>\n  );\n}\n","tsx",[957],{"type":125,"tag":152,"props":958,"children":959},{"__ignoreMap":173},[960,968,1008,1015,1041,1053,1065,1094,1106,1119,1137,1176,1212,1228,1245,1258],{"type":125,"tag":179,"props":961,"children":962},{"class":181,"line":182},[963],{"type":125,"tag":179,"props":964,"children":965},{"style":186},[966],{"type":131,"value":967},"\u002F\u002F app\u002Flayout.tsx\n",{"type":125,"tag":179,"props":969,"children":970},{"class":181,"line":192},[971,975,979,984,988,992,996,1000,1004],{"type":125,"tag":179,"props":972,"children":973},{"style":314},[974],{"type":131,"value":317},{"type":125,"tag":179,"props":976,"children":977},{"style":320},[978],{"type":131,"value":323},{"type":125,"tag":179,"props":980,"children":981},{"style":326},[982],{"type":131,"value":983}," ClerkProvider",{"type":125,"tag":179,"props":985,"children":986},{"style":320},[987],{"type":131,"value":334},{"type":125,"tag":179,"props":989,"children":990},{"style":314},[991],{"type":131,"value":339},{"type":125,"tag":179,"props":993,"children":994},{"style":320},[995],{"type":131,"value":344},{"type":125,"tag":179,"props":997,"children":998},{"style":201},[999],{"type":131,"value":157},{"type":125,"tag":179,"props":1001,"children":1002},{"style":320},[1003],{"type":131,"value":354},{"type":125,"tag":179,"props":1005,"children":1006},{"style":320},[1007],{"type":131,"value":359},{"type":125,"tag":179,"props":1009,"children":1010},{"class":181,"line":362},[1011],{"type":125,"tag":179,"props":1012,"children":1013},{"emptyLinePlaceholder":366},[1014],{"type":131,"value":369},{"type":125,"tag":179,"props":1016,"children":1017},{"class":181,"line":372},[1018,1022,1026,1031,1036],{"type":125,"tag":179,"props":1019,"children":1020},{"style":314},[1021],{"type":131,"value":378},{"type":125,"tag":179,"props":1023,"children":1024},{"style":314},[1025],{"type":131,"value":383},{"type":125,"tag":179,"props":1027,"children":1028},{"style":415},[1029],{"type":131,"value":1030}," function",{"type":125,"tag":179,"props":1032,"children":1033},{"style":386},[1034],{"type":131,"value":1035}," RootLayout",{"type":125,"tag":179,"props":1037,"children":1038},{"style":320},[1039],{"type":131,"value":1040},"({\n",{"type":125,"tag":179,"props":1042,"children":1043},{"class":181,"line":400},[1044,1049],{"type":125,"tag":179,"props":1045,"children":1046},{"style":729},[1047],{"type":131,"value":1048},"  children",{"type":125,"tag":179,"props":1050,"children":1051},{"style":320},[1052],{"type":131,"value":495},{"type":125,"tag":179,"props":1054,"children":1055},{"class":181,"line":40},[1056,1061],{"type":125,"tag":179,"props":1057,"children":1058},{"style":320},[1059],{"type":131,"value":1060},"}:",{"type":125,"tag":179,"props":1062,"children":1063},{"style":320},[1064],{"type":131,"value":433},{"type":125,"tag":179,"props":1066,"children":1067},{"class":181,"line":436},[1068,1072,1076,1081,1085,1090],{"type":125,"tag":179,"props":1069,"children":1070},{"style":440},[1071],{"type":131,"value":1048},{"type":125,"tag":179,"props":1073,"children":1074},{"style":320},[1075],{"type":131,"value":448},{"type":125,"tag":179,"props":1077,"children":1078},{"style":196},[1079],{"type":131,"value":1080}," React",{"type":125,"tag":179,"props":1082,"children":1083},{"style":320},[1084],{"type":131,"value":808},{"type":125,"tag":179,"props":1086,"children":1087},{"style":196},[1088],{"type":131,"value":1089},"ReactNode",{"type":125,"tag":179,"props":1091,"children":1092},{"style":320},[1093],{"type":131,"value":359},{"type":125,"tag":179,"props":1095,"children":1096},{"class":181,"line":456},[1097,1102],{"type":125,"tag":179,"props":1098,"children":1099},{"style":320},[1100],{"type":131,"value":1101},"})",{"type":125,"tag":179,"props":1103,"children":1104},{"style":320},[1105],{"type":131,"value":433},{"type":125,"tag":179,"props":1107,"children":1108},{"class":181,"line":465},[1109,1114],{"type":125,"tag":179,"props":1110,"children":1111},{"style":314},[1112],{"type":131,"value":1113},"  return",{"type":125,"tag":179,"props":1115,"children":1116},{"style":440},[1117],{"type":131,"value":1118}," (\n",{"type":125,"tag":179,"props":1120,"children":1121},{"class":181,"line":498},[1122,1127,1132],{"type":125,"tag":179,"props":1123,"children":1124},{"style":320},[1125],{"type":131,"value":1126},"    \u003C",{"type":125,"tag":179,"props":1128,"children":1129},{"style":196},[1130],{"type":131,"value":1131},"ClerkProvider",{"type":125,"tag":179,"props":1133,"children":1134},{"style":320},[1135],{"type":131,"value":1136},">\n",{"type":125,"tag":179,"props":1138,"children":1139},{"class":181,"line":507},[1140,1145,1150,1155,1159,1163,1168,1172],{"type":125,"tag":179,"props":1141,"children":1142},{"style":320},[1143],{"type":131,"value":1144},"      \u003C",{"type":125,"tag":179,"props":1146,"children":1147},{"style":440},[1148],{"type":131,"value":1149},"html",{"type":125,"tag":179,"props":1151,"children":1152},{"style":415},[1153],{"type":131,"value":1154}," lang",{"type":125,"tag":179,"props":1156,"children":1157},{"style":320},[1158],{"type":131,"value":428},{"type":125,"tag":179,"props":1160,"children":1161},{"style":320},[1162],{"type":131,"value":354},{"type":125,"tag":179,"props":1164,"children":1165},{"style":201},[1166],{"type":131,"value":1167},"en",{"type":125,"tag":179,"props":1169,"children":1170},{"style":320},[1171],{"type":131,"value":354},{"type":125,"tag":179,"props":1173,"children":1174},{"style":320},[1175],{"type":131,"value":1136},{"type":125,"tag":179,"props":1177,"children":1178},{"class":181,"line":528},[1179,1184,1189,1194,1199,1204,1208],{"type":125,"tag":179,"props":1180,"children":1181},{"style":320},[1182],{"type":131,"value":1183},"        \u003C",{"type":125,"tag":179,"props":1185,"children":1186},{"style":440},[1187],{"type":131,"value":1188},"body",{"type":125,"tag":179,"props":1190,"children":1191},{"style":320},[1192],{"type":131,"value":1193},">{",{"type":125,"tag":179,"props":1195,"children":1196},{"style":326},[1197],{"type":131,"value":1198},"children",{"type":125,"tag":179,"props":1200,"children":1201},{"style":320},[1202],{"type":131,"value":1203},"}\u003C\u002F",{"type":125,"tag":179,"props":1205,"children":1206},{"style":440},[1207],{"type":131,"value":1188},{"type":125,"tag":179,"props":1209,"children":1210},{"style":320},[1211],{"type":131,"value":1136},{"type":125,"tag":179,"props":1213,"children":1214},{"class":181,"line":541},[1215,1220,1224],{"type":125,"tag":179,"props":1216,"children":1217},{"style":320},[1218],{"type":131,"value":1219},"      \u003C\u002F",{"type":125,"tag":179,"props":1221,"children":1222},{"style":440},[1223],{"type":131,"value":1149},{"type":125,"tag":179,"props":1225,"children":1226},{"style":320},[1227],{"type":131,"value":1136},{"type":125,"tag":179,"props":1229,"children":1231},{"class":181,"line":1230},14,[1232,1237,1241],{"type":125,"tag":179,"props":1233,"children":1234},{"style":320},[1235],{"type":131,"value":1236},"    \u003C\u002F",{"type":125,"tag":179,"props":1238,"children":1239},{"style":196},[1240],{"type":131,"value":1131},{"type":125,"tag":179,"props":1242,"children":1243},{"style":320},[1244],{"type":131,"value":1136},{"type":125,"tag":179,"props":1246,"children":1248},{"class":181,"line":1247},15,[1249,1254],{"type":125,"tag":179,"props":1250,"children":1251},{"style":440},[1252],{"type":131,"value":1253},"  )",{"type":125,"tag":179,"props":1255,"children":1256},{"style":320},[1257],{"type":131,"value":359},{"type":125,"tag":179,"props":1259,"children":1261},{"class":181,"line":1260},16,[1262],{"type":125,"tag":179,"props":1263,"children":1264},{"style":320},[1265],{"type":131,"value":1266},"}\n",{"type":125,"tag":161,"props":1268,"children":1270},{"id":1269},"sign-in-and-sign-up-pages",[1271],{"type":131,"value":1272},"Sign-In and Sign-Up Pages",{"type":125,"tag":168,"props":1274,"children":1276},{"className":953,"code":1275,"language":955,"meta":173,"style":173},"\u002F\u002F app\u002Fsign-in\u002F[[...sign-in]]\u002Fpage.tsx\nimport { SignIn } from \"@clerk\u002Fnextjs\";\n\nexport default function Page() {\n  return \u003CSignIn \u002F>;\n}\n",[1277],{"type":125,"tag":152,"props":1278,"children":1279},{"__ignoreMap":173},[1280,1288,1328,1335,1363,1385],{"type":125,"tag":179,"props":1281,"children":1282},{"class":181,"line":182},[1283],{"type":125,"tag":179,"props":1284,"children":1285},{"style":186},[1286],{"type":131,"value":1287},"\u002F\u002F app\u002Fsign-in\u002F[[...sign-in]]\u002Fpage.tsx\n",{"type":125,"tag":179,"props":1289,"children":1290},{"class":181,"line":192},[1291,1295,1299,1304,1308,1312,1316,1320,1324],{"type":125,"tag":179,"props":1292,"children":1293},{"style":314},[1294],{"type":131,"value":317},{"type":125,"tag":179,"props":1296,"children":1297},{"style":320},[1298],{"type":131,"value":323},{"type":125,"tag":179,"props":1300,"children":1301},{"style":326},[1302],{"type":131,"value":1303}," SignIn",{"type":125,"tag":179,"props":1305,"children":1306},{"style":320},[1307],{"type":131,"value":334},{"type":125,"tag":179,"props":1309,"children":1310},{"style":314},[1311],{"type":131,"value":339},{"type":125,"tag":179,"props":1313,"children":1314},{"style":320},[1315],{"type":131,"value":344},{"type":125,"tag":179,"props":1317,"children":1318},{"style":201},[1319],{"type":131,"value":157},{"type":125,"tag":179,"props":1321,"children":1322},{"style":320},[1323],{"type":131,"value":354},{"type":125,"tag":179,"props":1325,"children":1326},{"style":320},[1327],{"type":131,"value":359},{"type":125,"tag":179,"props":1329,"children":1330},{"class":181,"line":362},[1331],{"type":125,"tag":179,"props":1332,"children":1333},{"emptyLinePlaceholder":366},[1334],{"type":131,"value":369},{"type":125,"tag":179,"props":1336,"children":1337},{"class":181,"line":372},[1338,1342,1346,1350,1355,1359],{"type":125,"tag":179,"props":1339,"children":1340},{"style":314},[1341],{"type":131,"value":378},{"type":125,"tag":179,"props":1343,"children":1344},{"style":314},[1345],{"type":131,"value":383},{"type":125,"tag":179,"props":1347,"children":1348},{"style":415},[1349],{"type":131,"value":1030},{"type":125,"tag":179,"props":1351,"children":1352},{"style":386},[1353],{"type":131,"value":1354}," Page",{"type":125,"tag":179,"props":1356,"children":1357},{"style":320},[1358],{"type":131,"value":393},{"type":125,"tag":179,"props":1360,"children":1361},{"style":320},[1362],{"type":131,"value":433},{"type":125,"tag":179,"props":1364,"children":1365},{"class":181,"line":400},[1366,1370,1375,1380],{"type":125,"tag":179,"props":1367,"children":1368},{"style":314},[1369],{"type":131,"value":1113},{"type":125,"tag":179,"props":1371,"children":1372},{"style":320},[1373],{"type":131,"value":1374}," \u003C",{"type":125,"tag":179,"props":1376,"children":1377},{"style":196},[1378],{"type":131,"value":1379},"SignIn",{"type":125,"tag":179,"props":1381,"children":1382},{"style":320},[1383],{"type":131,"value":1384}," \u002F>;\n",{"type":125,"tag":179,"props":1386,"children":1387},{"class":181,"line":40},[1388],{"type":125,"tag":179,"props":1389,"children":1390},{"style":320},[1391],{"type":131,"value":1266},{"type":125,"tag":168,"props":1393,"children":1395},{"className":953,"code":1394,"language":955,"meta":173,"style":173},"\u002F\u002F app\u002Fsign-up\u002F[[...sign-up]]\u002Fpage.tsx\nimport { SignUp } from \"@clerk\u002Fnextjs\";\n\nexport default function Page() {\n  return \u003CSignUp \u002F>;\n}\n",[1396],{"type":125,"tag":152,"props":1397,"children":1398},{"__ignoreMap":173},[1399,1407,1447,1454,1481,1501],{"type":125,"tag":179,"props":1400,"children":1401},{"class":181,"line":182},[1402],{"type":125,"tag":179,"props":1403,"children":1404},{"style":186},[1405],{"type":131,"value":1406},"\u002F\u002F app\u002Fsign-up\u002F[[...sign-up]]\u002Fpage.tsx\n",{"type":125,"tag":179,"props":1408,"children":1409},{"class":181,"line":192},[1410,1414,1418,1423,1427,1431,1435,1439,1443],{"type":125,"tag":179,"props":1411,"children":1412},{"style":314},[1413],{"type":131,"value":317},{"type":125,"tag":179,"props":1415,"children":1416},{"style":320},[1417],{"type":131,"value":323},{"type":125,"tag":179,"props":1419,"children":1420},{"style":326},[1421],{"type":131,"value":1422}," SignUp",{"type":125,"tag":179,"props":1424,"children":1425},{"style":320},[1426],{"type":131,"value":334},{"type":125,"tag":179,"props":1428,"children":1429},{"style":314},[1430],{"type":131,"value":339},{"type":125,"tag":179,"props":1432,"children":1433},{"style":320},[1434],{"type":131,"value":344},{"type":125,"tag":179,"props":1436,"children":1437},{"style":201},[1438],{"type":131,"value":157},{"type":125,"tag":179,"props":1440,"children":1441},{"style":320},[1442],{"type":131,"value":354},{"type":125,"tag":179,"props":1444,"children":1445},{"style":320},[1446],{"type":131,"value":359},{"type":125,"tag":179,"props":1448,"children":1449},{"class":181,"line":362},[1450],{"type":125,"tag":179,"props":1451,"children":1452},{"emptyLinePlaceholder":366},[1453],{"type":131,"value":369},{"type":125,"tag":179,"props":1455,"children":1456},{"class":181,"line":372},[1457,1461,1465,1469,1473,1477],{"type":125,"tag":179,"props":1458,"children":1459},{"style":314},[1460],{"type":131,"value":378},{"type":125,"tag":179,"props":1462,"children":1463},{"style":314},[1464],{"type":131,"value":383},{"type":125,"tag":179,"props":1466,"children":1467},{"style":415},[1468],{"type":131,"value":1030},{"type":125,"tag":179,"props":1470,"children":1471},{"style":386},[1472],{"type":131,"value":1354},{"type":125,"tag":179,"props":1474,"children":1475},{"style":320},[1476],{"type":131,"value":393},{"type":125,"tag":179,"props":1478,"children":1479},{"style":320},[1480],{"type":131,"value":433},{"type":125,"tag":179,"props":1482,"children":1483},{"class":181,"line":400},[1484,1488,1492,1497],{"type":125,"tag":179,"props":1485,"children":1486},{"style":314},[1487],{"type":131,"value":1113},{"type":125,"tag":179,"props":1489,"children":1490},{"style":320},[1491],{"type":131,"value":1374},{"type":125,"tag":179,"props":1493,"children":1494},{"style":196},[1495],{"type":131,"value":1496},"SignUp",{"type":125,"tag":179,"props":1498,"children":1499},{"style":320},[1500],{"type":131,"value":1384},{"type":125,"tag":179,"props":1502,"children":1503},{"class":181,"line":40},[1504],{"type":125,"tag":179,"props":1505,"children":1506},{"style":320},[1507],{"type":131,"value":1266},{"type":125,"tag":134,"props":1509,"children":1510},{},[1511,1513,1519],{"type":131,"value":1512},"Add routing env vars to ",{"type":125,"tag":152,"props":1514,"children":1516},{"className":1515},[],[1517],{"type":131,"value":1518},".env.local",{"type":131,"value":448},{"type":125,"tag":168,"props":1521,"children":1525},{"className":1522,"code":1523,"language":1524,"meta":173,"style":173},"language-env shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","NEXT_PUBLIC_CLERK_SIGN_IN_URL=\u002Fsign-in\nNEXT_PUBLIC_CLERK_SIGN_UP_URL=\u002Fsign-up\n","env",[1526],{"type":125,"tag":152,"props":1527,"children":1528},{"__ignoreMap":173},[1529,1537],{"type":125,"tag":179,"props":1530,"children":1531},{"class":181,"line":182},[1532],{"type":125,"tag":179,"props":1533,"children":1534},{},[1535],{"type":131,"value":1536},"NEXT_PUBLIC_CLERK_SIGN_IN_URL=\u002Fsign-in\n",{"type":125,"tag":179,"props":1538,"children":1539},{"class":181,"line":192},[1540],{"type":125,"tag":179,"props":1541,"children":1542},{},[1543],{"type":131,"value":1544},"NEXT_PUBLIC_CLERK_SIGN_UP_URL=\u002Fsign-up\n",{"type":125,"tag":161,"props":1546,"children":1548},{"id":1547},"access-user-data",[1549],{"type":131,"value":1550},"Access User Data",{"type":125,"tag":168,"props":1552,"children":1554},{"className":953,"code":1553,"language":955,"meta":173,"style":173},"\u002F\u002F Server component\nimport { currentUser } from \"@clerk\u002Fnextjs\u002Fserver\";\n\nexport default async function Page() {\n  const user = await currentUser();\n  return \u003Cp>Hello, {user?.firstName}\u003C\u002Fp>;\n}\n",[1555],{"type":125,"tag":152,"props":1556,"children":1557},{"__ignoreMap":173},[1558,1566,1606,1613,1645,1680,1738],{"type":125,"tag":179,"props":1559,"children":1560},{"class":181,"line":182},[1561],{"type":125,"tag":179,"props":1562,"children":1563},{"style":186},[1564],{"type":131,"value":1565},"\u002F\u002F Server component\n",{"type":125,"tag":179,"props":1567,"children":1568},{"class":181,"line":192},[1569,1573,1577,1582,1586,1590,1594,1598,1602],{"type":125,"tag":179,"props":1570,"children":1571},{"style":314},[1572],{"type":131,"value":317},{"type":125,"tag":179,"props":1574,"children":1575},{"style":320},[1576],{"type":131,"value":323},{"type":125,"tag":179,"props":1578,"children":1579},{"style":326},[1580],{"type":131,"value":1581}," currentUser",{"type":125,"tag":179,"props":1583,"children":1584},{"style":320},[1585],{"type":131,"value":334},{"type":125,"tag":179,"props":1587,"children":1588},{"style":314},[1589],{"type":131,"value":339},{"type":125,"tag":179,"props":1591,"children":1592},{"style":320},[1593],{"type":131,"value":344},{"type":125,"tag":179,"props":1595,"children":1596},{"style":201},[1597],{"type":131,"value":349},{"type":125,"tag":179,"props":1599,"children":1600},{"style":320},[1601],{"type":131,"value":354},{"type":125,"tag":179,"props":1603,"children":1604},{"style":320},[1605],{"type":131,"value":359},{"type":125,"tag":179,"props":1607,"children":1608},{"class":181,"line":362},[1609],{"type":125,"tag":179,"props":1610,"children":1611},{"emptyLinePlaceholder":366},[1612],{"type":131,"value":369},{"type":125,"tag":179,"props":1614,"children":1615},{"class":181,"line":372},[1616,1620,1624,1629,1633,1637,1641],{"type":125,"tag":179,"props":1617,"children":1618},{"style":314},[1619],{"type":131,"value":378},{"type":125,"tag":179,"props":1621,"children":1622},{"style":314},[1623],{"type":131,"value":383},{"type":125,"tag":179,"props":1625,"children":1626},{"style":415},[1627],{"type":131,"value":1628}," async",{"type":125,"tag":179,"props":1630,"children":1631},{"style":415},[1632],{"type":131,"value":1030},{"type":125,"tag":179,"props":1634,"children":1635},{"style":386},[1636],{"type":131,"value":1354},{"type":125,"tag":179,"props":1638,"children":1639},{"style":320},[1640],{"type":131,"value":393},{"type":125,"tag":179,"props":1642,"children":1643},{"style":320},[1644],{"type":131,"value":433},{"type":125,"tag":179,"props":1646,"children":1647},{"class":181,"line":400},[1648,1653,1658,1663,1668,1672,1676],{"type":125,"tag":179,"props":1649,"children":1650},{"style":415},[1651],{"type":131,"value":1652},"  const",{"type":125,"tag":179,"props":1654,"children":1655},{"style":326},[1656],{"type":131,"value":1657}," user",{"type":125,"tag":179,"props":1659,"children":1660},{"style":320},[1661],{"type":131,"value":1662}," =",{"type":125,"tag":179,"props":1664,"children":1665},{"style":314},[1666],{"type":131,"value":1667}," await",{"type":125,"tag":179,"props":1669,"children":1670},{"style":386},[1671],{"type":131,"value":1581},{"type":125,"tag":179,"props":1673,"children":1674},{"style":440},[1675],{"type":131,"value":393},{"type":125,"tag":179,"props":1677,"children":1678},{"style":320},[1679],{"type":131,"value":359},{"type":125,"tag":179,"props":1681,"children":1682},{"class":181,"line":40},[1683,1687,1691,1695,1700,1705,1710,1715,1720,1725,1729,1733],{"type":125,"tag":179,"props":1684,"children":1685},{"style":314},[1686],{"type":131,"value":1113},{"type":125,"tag":179,"props":1688,"children":1689},{"style":320},[1690],{"type":131,"value":1374},{"type":125,"tag":179,"props":1692,"children":1693},{"style":440},[1694],{"type":131,"value":134},{"type":125,"tag":179,"props":1696,"children":1697},{"style":320},[1698],{"type":131,"value":1699},">",{"type":125,"tag":179,"props":1701,"children":1702},{"style":326},[1703],{"type":131,"value":1704},"Hello, ",{"type":125,"tag":179,"props":1706,"children":1707},{"style":320},[1708],{"type":131,"value":1709},"{",{"type":125,"tag":179,"props":1711,"children":1712},{"style":326},[1713],{"type":131,"value":1714},"user",{"type":125,"tag":179,"props":1716,"children":1717},{"style":320},[1718],{"type":131,"value":1719},"?.",{"type":125,"tag":179,"props":1721,"children":1722},{"style":326},[1723],{"type":131,"value":1724},"firstName",{"type":125,"tag":179,"props":1726,"children":1727},{"style":320},[1728],{"type":131,"value":1203},{"type":125,"tag":179,"props":1730,"children":1731},{"style":440},[1732],{"type":131,"value":134},{"type":125,"tag":179,"props":1734,"children":1735},{"style":320},[1736],{"type":131,"value":1737},">;\n",{"type":125,"tag":179,"props":1739,"children":1740},{"class":181,"line":436},[1741],{"type":125,"tag":179,"props":1742,"children":1743},{"style":320},[1744],{"type":131,"value":1266},{"type":125,"tag":168,"props":1746,"children":1748},{"className":953,"code":1747,"language":955,"meta":173,"style":173},"\u002F\u002F Client component\n\"use client\";\nimport { useUser } from \"@clerk\u002Fnextjs\";\n\nexport default function UserGreeting() {\n  const { user, isLoaded } = useUser();\n  if (!isLoaded) return null;\n  return \u003Cp>Hello, {user?.firstName}\u003C\u002Fp>;\n}\n",[1749],{"type":125,"tag":152,"props":1750,"children":1751},{"__ignoreMap":173},[1752,1760,1780,1820,1827,1855,1899,1935,1986],{"type":125,"tag":179,"props":1753,"children":1754},{"class":181,"line":182},[1755],{"type":125,"tag":179,"props":1756,"children":1757},{"style":186},[1758],{"type":131,"value":1759},"\u002F\u002F Client component\n",{"type":125,"tag":179,"props":1761,"children":1762},{"class":181,"line":192},[1763,1767,1772,1776],{"type":125,"tag":179,"props":1764,"children":1765},{"style":320},[1766],{"type":131,"value":354},{"type":125,"tag":179,"props":1768,"children":1769},{"style":201},[1770],{"type":131,"value":1771},"use client",{"type":125,"tag":179,"props":1773,"children":1774},{"style":320},[1775],{"type":131,"value":354},{"type":125,"tag":179,"props":1777,"children":1778},{"style":320},[1779],{"type":131,"value":359},{"type":125,"tag":179,"props":1781,"children":1782},{"class":181,"line":362},[1783,1787,1791,1796,1800,1804,1808,1812,1816],{"type":125,"tag":179,"props":1784,"children":1785},{"style":314},[1786],{"type":131,"value":317},{"type":125,"tag":179,"props":1788,"children":1789},{"style":320},[1790],{"type":131,"value":323},{"type":125,"tag":179,"props":1792,"children":1793},{"style":326},[1794],{"type":131,"value":1795}," useUser",{"type":125,"tag":179,"props":1797,"children":1798},{"style":320},[1799],{"type":131,"value":334},{"type":125,"tag":179,"props":1801,"children":1802},{"style":314},[1803],{"type":131,"value":339},{"type":125,"tag":179,"props":1805,"children":1806},{"style":320},[1807],{"type":131,"value":344},{"type":125,"tag":179,"props":1809,"children":1810},{"style":201},[1811],{"type":131,"value":157},{"type":125,"tag":179,"props":1813,"children":1814},{"style":320},[1815],{"type":131,"value":354},{"type":125,"tag":179,"props":1817,"children":1818},{"style":320},[1819],{"type":131,"value":359},{"type":125,"tag":179,"props":1821,"children":1822},{"class":181,"line":372},[1823],{"type":125,"tag":179,"props":1824,"children":1825},{"emptyLinePlaceholder":366},[1826],{"type":131,"value":369},{"type":125,"tag":179,"props":1828,"children":1829},{"class":181,"line":400},[1830,1834,1838,1842,1847,1851],{"type":125,"tag":179,"props":1831,"children":1832},{"style":314},[1833],{"type":131,"value":378},{"type":125,"tag":179,"props":1835,"children":1836},{"style":314},[1837],{"type":131,"value":383},{"type":125,"tag":179,"props":1839,"children":1840},{"style":415},[1841],{"type":131,"value":1030},{"type":125,"tag":179,"props":1843,"children":1844},{"style":386},[1845],{"type":131,"value":1846}," UserGreeting",{"type":125,"tag":179,"props":1848,"children":1849},{"style":320},[1850],{"type":131,"value":393},{"type":125,"tag":179,"props":1852,"children":1853},{"style":320},[1854],{"type":131,"value":433},{"type":125,"tag":179,"props":1856,"children":1857},{"class":181,"line":40},[1858,1862,1866,1870,1874,1879,1883,1887,1891,1895],{"type":125,"tag":179,"props":1859,"children":1860},{"style":415},[1861],{"type":131,"value":1652},{"type":125,"tag":179,"props":1863,"children":1864},{"style":320},[1865],{"type":131,"value":323},{"type":125,"tag":179,"props":1867,"children":1868},{"style":326},[1869],{"type":131,"value":1657},{"type":125,"tag":179,"props":1871,"children":1872},{"style":320},[1873],{"type":131,"value":588},{"type":125,"tag":179,"props":1875,"children":1876},{"style":326},[1877],{"type":131,"value":1878}," isLoaded",{"type":125,"tag":179,"props":1880,"children":1881},{"style":320},[1882],{"type":131,"value":334},{"type":125,"tag":179,"props":1884,"children":1885},{"style":320},[1886],{"type":131,"value":1662},{"type":125,"tag":179,"props":1888,"children":1889},{"style":386},[1890],{"type":131,"value":1795},{"type":125,"tag":179,"props":1892,"children":1893},{"style":440},[1894],{"type":131,"value":393},{"type":125,"tag":179,"props":1896,"children":1897},{"style":320},[1898],{"type":131,"value":359},{"type":125,"tag":179,"props":1900,"children":1901},{"class":181,"line":436},[1902,1906,1910,1915,1920,1925,1930],{"type":125,"tag":179,"props":1903,"children":1904},{"style":314},[1905],{"type":131,"value":762},{"type":125,"tag":179,"props":1907,"children":1908},{"style":440},[1909],{"type":131,"value":726},{"type":125,"tag":179,"props":1911,"children":1912},{"style":320},[1913],{"type":131,"value":1914},"!",{"type":125,"tag":179,"props":1916,"children":1917},{"style":326},[1918],{"type":131,"value":1919},"isLoaded",{"type":125,"tag":179,"props":1921,"children":1922},{"style":440},[1923],{"type":131,"value":1924},") ",{"type":125,"tag":179,"props":1926,"children":1927},{"style":314},[1928],{"type":131,"value":1929},"return",{"type":125,"tag":179,"props":1931,"children":1932},{"style":320},[1933],{"type":131,"value":1934}," null;\n",{"type":125,"tag":179,"props":1936,"children":1937},{"class":181,"line":456},[1938,1942,1946,1950,1954,1958,1962,1966,1970,1974,1978,1982],{"type":125,"tag":179,"props":1939,"children":1940},{"style":314},[1941],{"type":131,"value":1113},{"type":125,"tag":179,"props":1943,"children":1944},{"style":320},[1945],{"type":131,"value":1374},{"type":125,"tag":179,"props":1947,"children":1948},{"style":440},[1949],{"type":131,"value":134},{"type":125,"tag":179,"props":1951,"children":1952},{"style":320},[1953],{"type":131,"value":1699},{"type":125,"tag":179,"props":1955,"children":1956},{"style":326},[1957],{"type":131,"value":1704},{"type":125,"tag":179,"props":1959,"children":1960},{"style":320},[1961],{"type":131,"value":1709},{"type":125,"tag":179,"props":1963,"children":1964},{"style":326},[1965],{"type":131,"value":1714},{"type":125,"tag":179,"props":1967,"children":1968},{"style":320},[1969],{"type":131,"value":1719},{"type":125,"tag":179,"props":1971,"children":1972},{"style":326},[1973],{"type":131,"value":1724},{"type":125,"tag":179,"props":1975,"children":1976},{"style":320},[1977],{"type":131,"value":1203},{"type":125,"tag":179,"props":1979,"children":1980},{"style":440},[1981],{"type":131,"value":134},{"type":125,"tag":179,"props":1983,"children":1984},{"style":320},[1985],{"type":131,"value":1737},{"type":125,"tag":179,"props":1987,"children":1988},{"class":181,"line":465},[1989],{"type":125,"tag":179,"props":1990,"children":1991},{"style":320},[1992],{"type":131,"value":1266},{"type":125,"tag":161,"props":1994,"children":1996},{"id":1995},"api-route-protection",[1997],{"type":131,"value":1998},"API Route Protection",{"type":125,"tag":168,"props":2000,"children":2002},{"className":294,"code":2001,"language":296,"meta":173,"style":173},"\u002F\u002F app\u002Fapi\u002Fprotected\u002Froute.ts\nimport { auth } from \"@clerk\u002Fnextjs\u002Fserver\";\n\nexport async function GET() {\n  const { userId } = await auth();\n  if (!userId) {\n    return Response.json({ error: \"Unauthorized\" }, { status: 401 });\n  }\n  return Response.json({ userId });\n}\n",[2003],{"type":125,"tag":152,"props":2004,"children":2005},{"__ignoreMap":173},[2006,2014,2053,2060,2088,2128,2156,2244,2251,2294],{"type":125,"tag":179,"props":2007,"children":2008},{"class":181,"line":182},[2009],{"type":125,"tag":179,"props":2010,"children":2011},{"style":186},[2012],{"type":131,"value":2013},"\u002F\u002F app\u002Fapi\u002Fprotected\u002Froute.ts\n",{"type":125,"tag":179,"props":2015,"children":2016},{"class":181,"line":192},[2017,2021,2025,2029,2033,2037,2041,2045,2049],{"type":125,"tag":179,"props":2018,"children":2019},{"style":314},[2020],{"type":131,"value":317},{"type":125,"tag":179,"props":2022,"children":2023},{"style":320},[2024],{"type":131,"value":323},{"type":125,"tag":179,"props":2026,"children":2027},{"style":326},[2028],{"type":131,"value":803},{"type":125,"tag":179,"props":2030,"children":2031},{"style":320},[2032],{"type":131,"value":334},{"type":125,"tag":179,"props":2034,"children":2035},{"style":314},[2036],{"type":131,"value":339},{"type":125,"tag":179,"props":2038,"children":2039},{"style":320},[2040],{"type":131,"value":344},{"type":125,"tag":179,"props":2042,"children":2043},{"style":201},[2044],{"type":131,"value":349},{"type":125,"tag":179,"props":2046,"children":2047},{"style":320},[2048],{"type":131,"value":354},{"type":125,"tag":179,"props":2050,"children":2051},{"style":320},[2052],{"type":131,"value":359},{"type":125,"tag":179,"props":2054,"children":2055},{"class":181,"line":362},[2056],{"type":125,"tag":179,"props":2057,"children":2058},{"emptyLinePlaceholder":366},[2059],{"type":131,"value":369},{"type":125,"tag":179,"props":2061,"children":2062},{"class":181,"line":372},[2063,2067,2071,2075,2080,2084],{"type":125,"tag":179,"props":2064,"children":2065},{"style":314},[2066],{"type":131,"value":378},{"type":125,"tag":179,"props":2068,"children":2069},{"style":415},[2070],{"type":131,"value":1628},{"type":125,"tag":179,"props":2072,"children":2073},{"style":415},[2074],{"type":131,"value":1030},{"type":125,"tag":179,"props":2076,"children":2077},{"style":386},[2078],{"type":131,"value":2079}," GET",{"type":125,"tag":179,"props":2081,"children":2082},{"style":320},[2083],{"type":131,"value":393},{"type":125,"tag":179,"props":2085,"children":2086},{"style":320},[2087],{"type":131,"value":433},{"type":125,"tag":179,"props":2089,"children":2090},{"class":181,"line":400},[2091,2095,2099,2104,2108,2112,2116,2120,2124],{"type":125,"tag":179,"props":2092,"children":2093},{"style":415},[2094],{"type":131,"value":1652},{"type":125,"tag":179,"props":2096,"children":2097},{"style":320},[2098],{"type":131,"value":323},{"type":125,"tag":179,"props":2100,"children":2101},{"style":326},[2102],{"type":131,"value":2103}," userId",{"type":125,"tag":179,"props":2105,"children":2106},{"style":320},[2107],{"type":131,"value":334},{"type":125,"tag":179,"props":2109,"children":2110},{"style":320},[2111],{"type":131,"value":1662},{"type":125,"tag":179,"props":2113,"children":2114},{"style":314},[2115],{"type":131,"value":1667},{"type":125,"tag":179,"props":2117,"children":2118},{"style":386},[2119],{"type":131,"value":803},{"type":125,"tag":179,"props":2121,"children":2122},{"style":440},[2123],{"type":131,"value":393},{"type":125,"tag":179,"props":2125,"children":2126},{"style":320},[2127],{"type":131,"value":359},{"type":125,"tag":179,"props":2129,"children":2130},{"class":181,"line":40},[2131,2135,2139,2143,2148,2152],{"type":125,"tag":179,"props":2132,"children":2133},{"style":314},[2134],{"type":131,"value":762},{"type":125,"tag":179,"props":2136,"children":2137},{"style":440},[2138],{"type":131,"value":726},{"type":125,"tag":179,"props":2140,"children":2141},{"style":320},[2142],{"type":131,"value":1914},{"type":125,"tag":179,"props":2144,"children":2145},{"style":326},[2146],{"type":131,"value":2147},"userId",{"type":125,"tag":179,"props":2149,"children":2150},{"style":440},[2151],{"type":131,"value":1924},{"type":125,"tag":179,"props":2153,"children":2154},{"style":320},[2155],{"type":131,"value":790},{"type":125,"tag":179,"props":2157,"children":2158},{"class":181,"line":436},[2159,2164,2169,2173,2178,2182,2186,2191,2195,2199,2204,2208,2213,2217,2222,2226,2232,2236,2240],{"type":125,"tag":179,"props":2160,"children":2161},{"style":314},[2162],{"type":131,"value":2163},"    return",{"type":125,"tag":179,"props":2165,"children":2166},{"style":326},[2167],{"type":131,"value":2168}," Response",{"type":125,"tag":179,"props":2170,"children":2171},{"style":320},[2172],{"type":131,"value":808},{"type":125,"tag":179,"props":2174,"children":2175},{"style":386},[2176],{"type":131,"value":2177},"json",{"type":125,"tag":179,"props":2179,"children":2180},{"style":440},[2181],{"type":131,"value":716},{"type":125,"tag":179,"props":2183,"children":2184},{"style":320},[2185],{"type":131,"value":1709},{"type":125,"tag":179,"props":2187,"children":2188},{"style":440},[2189],{"type":131,"value":2190}," error",{"type":125,"tag":179,"props":2192,"children":2193},{"style":320},[2194],{"type":131,"value":448},{"type":125,"tag":179,"props":2196,"children":2197},{"style":320},[2198],{"type":131,"value":344},{"type":125,"tag":179,"props":2200,"children":2201},{"style":201},[2202],{"type":131,"value":2203},"Unauthorized",{"type":125,"tag":179,"props":2205,"children":2206},{"style":320},[2207],{"type":131,"value":354},{"type":125,"tag":179,"props":2209,"children":2210},{"style":320},[2211],{"type":131,"value":2212}," },",{"type":125,"tag":179,"props":2214,"children":2215},{"style":320},[2216],{"type":131,"value":323},{"type":125,"tag":179,"props":2218,"children":2219},{"style":440},[2220],{"type":131,"value":2221}," status",{"type":125,"tag":179,"props":2223,"children":2224},{"style":320},[2225],{"type":131,"value":448},{"type":125,"tag":179,"props":2227,"children":2229},{"style":2228},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[2230],{"type":131,"value":2231}," 401",{"type":125,"tag":179,"props":2233,"children":2234},{"style":320},[2235],{"type":131,"value":334},{"type":125,"tag":179,"props":2237,"children":2238},{"style":440},[2239],{"type":131,"value":745},{"type":125,"tag":179,"props":2241,"children":2242},{"style":320},[2243],{"type":131,"value":359},{"type":125,"tag":179,"props":2245,"children":2246},{"class":181,"line":456},[2247],{"type":125,"tag":179,"props":2248,"children":2249},{"style":320},[2250],{"type":131,"value":829},{"type":125,"tag":179,"props":2252,"children":2253},{"class":181,"line":465},[2254,2258,2262,2266,2270,2274,2278,2282,2286,2290],{"type":125,"tag":179,"props":2255,"children":2256},{"style":314},[2257],{"type":131,"value":1113},{"type":125,"tag":179,"props":2259,"children":2260},{"style":326},[2261],{"type":131,"value":2168},{"type":125,"tag":179,"props":2263,"children":2264},{"style":320},[2265],{"type":131,"value":808},{"type":125,"tag":179,"props":2267,"children":2268},{"style":386},[2269],{"type":131,"value":2177},{"type":125,"tag":179,"props":2271,"children":2272},{"style":440},[2273],{"type":131,"value":716},{"type":125,"tag":179,"props":2275,"children":2276},{"style":320},[2277],{"type":131,"value":1709},{"type":125,"tag":179,"props":2279,"children":2280},{"style":326},[2281],{"type":131,"value":2103},{"type":125,"tag":179,"props":2283,"children":2284},{"style":320},[2285],{"type":131,"value":334},{"type":125,"tag":179,"props":2287,"children":2288},{"style":440},[2289],{"type":131,"value":745},{"type":125,"tag":179,"props":2291,"children":2292},{"style":320},[2293],{"type":131,"value":359},{"type":125,"tag":179,"props":2295,"children":2296},{"class":181,"line":498},[2297],{"type":125,"tag":179,"props":2298,"children":2299},{"style":320},[2300],{"type":131,"value":1266},{"type":125,"tag":140,"props":2302,"children":2304},{"id":2303},"descope",[2305],{"type":131,"value":2306},"Descope",{"type":125,"tag":134,"props":2308,"children":2309},{},[2310],{"type":131,"value":2311},"Descope is available on the Vercel Marketplace with native integration support.",{"type":125,"tag":161,"props":2313,"children":2315},{"id":2314},"install-via-marketplace-1",[2316],{"type":131,"value":166},{"type":125,"tag":168,"props":2318,"children":2320},{"className":170,"code":2319,"language":172,"meta":173,"style":173},"vercel integration add descope\n",[2321],{"type":125,"tag":152,"props":2322,"children":2323},{"__ignoreMap":173},[2324],{"type":125,"tag":179,"props":2325,"children":2326},{"class":181,"line":182},[2327,2331,2335,2339],{"type":125,"tag":179,"props":2328,"children":2329},{"style":196},[2330],{"type":131,"value":8},{"type":125,"tag":179,"props":2332,"children":2333},{"style":201},[2334],{"type":131,"value":204},{"type":125,"tag":179,"props":2336,"children":2337},{"style":201},[2338],{"type":131,"value":209},{"type":125,"tag":179,"props":2340,"children":2341},{"style":201},[2342],{"type":131,"value":2343}," descope\n",{"type":125,"tag":161,"props":2345,"children":2347},{"id":2346},"sdk-setup-1",[2348],{"type":131,"value":252},{"type":125,"tag":168,"props":2350,"children":2352},{"className":170,"code":2351,"language":172,"meta":173,"style":173},"npm install @descope\u002Fnextjs-sdk\n",[2353],{"type":125,"tag":152,"props":2354,"children":2355},{"__ignoreMap":173},[2356],{"type":125,"tag":179,"props":2357,"children":2358},{"class":181,"line":182},[2359,2363,2367],{"type":125,"tag":179,"props":2360,"children":2361},{"style":196},[2362],{"type":131,"value":275},{"type":125,"tag":179,"props":2364,"children":2365},{"style":201},[2366],{"type":131,"value":280},{"type":125,"tag":179,"props":2368,"children":2369},{"style":201},[2370],{"type":131,"value":2371}," @descope\u002Fnextjs-sdk\n",{"type":125,"tag":161,"props":2373,"children":2375},{"id":2374},"provider-and-middleware",[2376],{"type":131,"value":2377},"Provider and Middleware",{"type":125,"tag":168,"props":2379,"children":2381},{"className":953,"code":2380,"language":955,"meta":173,"style":173},"\u002F\u002F app\u002Flayout.tsx\nimport { AuthProvider } from \"@descope\u002Fnextjs-sdk\";\n\nexport default function RootLayout({\n  children,\n}: {\n  children: React.ReactNode;\n}) {\n  return (\n    \u003CAuthProvider projectId={process.env.NEXT_PUBLIC_DESCOPE_PROJECT_ID!}>\n      \u003Chtml lang=\"en\">\n        \u003Cbody>{children}\u003C\u002Fbody>\n      \u003C\u002Fhtml>\n    \u003C\u002FAuthProvider>\n  );\n}\n",[2382],{"type":125,"tag":152,"props":2383,"children":2384},{"__ignoreMap":173},[2385,2392,2433,2440,2463,2474,2485,2512,2523,2534,2583,2618,2649,2664,2679,2690],{"type":125,"tag":179,"props":2386,"children":2387},{"class":181,"line":182},[2388],{"type":125,"tag":179,"props":2389,"children":2390},{"style":186},[2391],{"type":131,"value":967},{"type":125,"tag":179,"props":2393,"children":2394},{"class":181,"line":192},[2395,2399,2403,2408,2412,2416,2420,2425,2429],{"type":125,"tag":179,"props":2396,"children":2397},{"style":314},[2398],{"type":131,"value":317},{"type":125,"tag":179,"props":2400,"children":2401},{"style":320},[2402],{"type":131,"value":323},{"type":125,"tag":179,"props":2404,"children":2405},{"style":326},[2406],{"type":131,"value":2407}," AuthProvider",{"type":125,"tag":179,"props":2409,"children":2410},{"style":320},[2411],{"type":131,"value":334},{"type":125,"tag":179,"props":2413,"children":2414},{"style":314},[2415],{"type":131,"value":339},{"type":125,"tag":179,"props":2417,"children":2418},{"style":320},[2419],{"type":131,"value":344},{"type":125,"tag":179,"props":2421,"children":2422},{"style":201},[2423],{"type":131,"value":2424},"@descope\u002Fnextjs-sdk",{"type":125,"tag":179,"props":2426,"children":2427},{"style":320},[2428],{"type":131,"value":354},{"type":125,"tag":179,"props":2430,"children":2431},{"style":320},[2432],{"type":131,"value":359},{"type":125,"tag":179,"props":2434,"children":2435},{"class":181,"line":362},[2436],{"type":125,"tag":179,"props":2437,"children":2438},{"emptyLinePlaceholder":366},[2439],{"type":131,"value":369},{"type":125,"tag":179,"props":2441,"children":2442},{"class":181,"line":372},[2443,2447,2451,2455,2459],{"type":125,"tag":179,"props":2444,"children":2445},{"style":314},[2446],{"type":131,"value":378},{"type":125,"tag":179,"props":2448,"children":2449},{"style":314},[2450],{"type":131,"value":383},{"type":125,"tag":179,"props":2452,"children":2453},{"style":415},[2454],{"type":131,"value":1030},{"type":125,"tag":179,"props":2456,"children":2457},{"style":386},[2458],{"type":131,"value":1035},{"type":125,"tag":179,"props":2460,"children":2461},{"style":320},[2462],{"type":131,"value":1040},{"type":125,"tag":179,"props":2464,"children":2465},{"class":181,"line":400},[2466,2470],{"type":125,"tag":179,"props":2467,"children":2468},{"style":729},[2469],{"type":131,"value":1048},{"type":125,"tag":179,"props":2471,"children":2472},{"style":320},[2473],{"type":131,"value":495},{"type":125,"tag":179,"props":2475,"children":2476},{"class":181,"line":40},[2477,2481],{"type":125,"tag":179,"props":2478,"children":2479},{"style":320},[2480],{"type":131,"value":1060},{"type":125,"tag":179,"props":2482,"children":2483},{"style":320},[2484],{"type":131,"value":433},{"type":125,"tag":179,"props":2486,"children":2487},{"class":181,"line":436},[2488,2492,2496,2500,2504,2508],{"type":125,"tag":179,"props":2489,"children":2490},{"style":440},[2491],{"type":131,"value":1048},{"type":125,"tag":179,"props":2493,"children":2494},{"style":320},[2495],{"type":131,"value":448},{"type":125,"tag":179,"props":2497,"children":2498},{"style":196},[2499],{"type":131,"value":1080},{"type":125,"tag":179,"props":2501,"children":2502},{"style":320},[2503],{"type":131,"value":808},{"type":125,"tag":179,"props":2505,"children":2506},{"style":196},[2507],{"type":131,"value":1089},{"type":125,"tag":179,"props":2509,"children":2510},{"style":320},[2511],{"type":131,"value":359},{"type":125,"tag":179,"props":2513,"children":2514},{"class":181,"line":456},[2515,2519],{"type":125,"tag":179,"props":2516,"children":2517},{"style":320},[2518],{"type":131,"value":1101},{"type":125,"tag":179,"props":2520,"children":2521},{"style":320},[2522],{"type":131,"value":433},{"type":125,"tag":179,"props":2524,"children":2525},{"class":181,"line":465},[2526,2530],{"type":125,"tag":179,"props":2527,"children":2528},{"style":314},[2529],{"type":131,"value":1113},{"type":125,"tag":179,"props":2531,"children":2532},{"style":440},[2533],{"type":131,"value":1118},{"type":125,"tag":179,"props":2535,"children":2536},{"class":181,"line":498},[2537,2541,2546,2551,2556,2561,2565,2569,2573,2578],{"type":125,"tag":179,"props":2538,"children":2539},{"style":320},[2540],{"type":131,"value":1126},{"type":125,"tag":179,"props":2542,"children":2543},{"style":196},[2544],{"type":131,"value":2545},"AuthProvider",{"type":125,"tag":179,"props":2547,"children":2548},{"style":415},[2549],{"type":131,"value":2550}," projectId",{"type":125,"tag":179,"props":2552,"children":2553},{"style":320},[2554],{"type":131,"value":2555},"={",{"type":125,"tag":179,"props":2557,"children":2558},{"style":326},[2559],{"type":131,"value":2560},"process",{"type":125,"tag":179,"props":2562,"children":2563},{"style":320},[2564],{"type":131,"value":808},{"type":125,"tag":179,"props":2566,"children":2567},{"style":326},[2568],{"type":131,"value":1524},{"type":125,"tag":179,"props":2570,"children":2571},{"style":320},[2572],{"type":131,"value":808},{"type":125,"tag":179,"props":2574,"children":2575},{"style":326},[2576],{"type":131,"value":2577},"NEXT_PUBLIC_DESCOPE_PROJECT_ID",{"type":125,"tag":179,"props":2579,"children":2580},{"style":320},[2581],{"type":131,"value":2582},"!}>\n",{"type":125,"tag":179,"props":2584,"children":2585},{"class":181,"line":507},[2586,2590,2594,2598,2602,2606,2610,2614],{"type":125,"tag":179,"props":2587,"children":2588},{"style":320},[2589],{"type":131,"value":1144},{"type":125,"tag":179,"props":2591,"children":2592},{"style":440},[2593],{"type":131,"value":1149},{"type":125,"tag":179,"props":2595,"children":2596},{"style":415},[2597],{"type":131,"value":1154},{"type":125,"tag":179,"props":2599,"children":2600},{"style":320},[2601],{"type":131,"value":428},{"type":125,"tag":179,"props":2603,"children":2604},{"style":320},[2605],{"type":131,"value":354},{"type":125,"tag":179,"props":2607,"children":2608},{"style":201},[2609],{"type":131,"value":1167},{"type":125,"tag":179,"props":2611,"children":2612},{"style":320},[2613],{"type":131,"value":354},{"type":125,"tag":179,"props":2615,"children":2616},{"style":320},[2617],{"type":131,"value":1136},{"type":125,"tag":179,"props":2619,"children":2620},{"class":181,"line":528},[2621,2625,2629,2633,2637,2641,2645],{"type":125,"tag":179,"props":2622,"children":2623},{"style":320},[2624],{"type":131,"value":1183},{"type":125,"tag":179,"props":2626,"children":2627},{"style":440},[2628],{"type":131,"value":1188},{"type":125,"tag":179,"props":2630,"children":2631},{"style":320},[2632],{"type":131,"value":1193},{"type":125,"tag":179,"props":2634,"children":2635},{"style":326},[2636],{"type":131,"value":1198},{"type":125,"tag":179,"props":2638,"children":2639},{"style":320},[2640],{"type":131,"value":1203},{"type":125,"tag":179,"props":2642,"children":2643},{"style":440},[2644],{"type":131,"value":1188},{"type":125,"tag":179,"props":2646,"children":2647},{"style":320},[2648],{"type":131,"value":1136},{"type":125,"tag":179,"props":2650,"children":2651},{"class":181,"line":541},[2652,2656,2660],{"type":125,"tag":179,"props":2653,"children":2654},{"style":320},[2655],{"type":131,"value":1219},{"type":125,"tag":179,"props":2657,"children":2658},{"style":440},[2659],{"type":131,"value":1149},{"type":125,"tag":179,"props":2661,"children":2662},{"style":320},[2663],{"type":131,"value":1136},{"type":125,"tag":179,"props":2665,"children":2666},{"class":181,"line":1230},[2667,2671,2675],{"type":125,"tag":179,"props":2668,"children":2669},{"style":320},[2670],{"type":131,"value":1236},{"type":125,"tag":179,"props":2672,"children":2673},{"style":196},[2674],{"type":131,"value":2545},{"type":125,"tag":179,"props":2676,"children":2677},{"style":320},[2678],{"type":131,"value":1136},{"type":125,"tag":179,"props":2680,"children":2681},{"class":181,"line":1247},[2682,2686],{"type":125,"tag":179,"props":2683,"children":2684},{"style":440},[2685],{"type":131,"value":1253},{"type":125,"tag":179,"props":2687,"children":2688},{"style":320},[2689],{"type":131,"value":359},{"type":125,"tag":179,"props":2691,"children":2692},{"class":181,"line":1260},[2693],{"type":125,"tag":179,"props":2694,"children":2695},{"style":320},[2696],{"type":131,"value":1266},{"type":125,"tag":168,"props":2698,"children":2700},{"className":294,"code":2699,"language":296,"meta":173,"style":173},"\u002F\u002F middleware.ts\nimport { authMiddleware } from \"@descope\u002Fnextjs-sdk\u002Fserver\";\n\nexport default authMiddleware({\n  projectId: process.env.DESCOPE_PROJECT_ID!,\n  publicRoutes: [\"\u002F\", \"\u002Fsign-in\"],\n});\n",[2701],{"type":125,"tag":152,"props":2702,"children":2703},{"__ignoreMap":173},[2704,2711,2752,2759,2782,2821,2877],{"type":125,"tag":179,"props":2705,"children":2706},{"class":181,"line":182},[2707],{"type":125,"tag":179,"props":2708,"children":2709},{"style":186},[2710],{"type":131,"value":308},{"type":125,"tag":179,"props":2712,"children":2713},{"class":181,"line":192},[2714,2718,2722,2727,2731,2735,2739,2744,2748],{"type":125,"tag":179,"props":2715,"children":2716},{"style":314},[2717],{"type":131,"value":317},{"type":125,"tag":179,"props":2719,"children":2720},{"style":320},[2721],{"type":131,"value":323},{"type":125,"tag":179,"props":2723,"children":2724},{"style":326},[2725],{"type":131,"value":2726}," authMiddleware",{"type":125,"tag":179,"props":2728,"children":2729},{"style":320},[2730],{"type":131,"value":334},{"type":125,"tag":179,"props":2732,"children":2733},{"style":314},[2734],{"type":131,"value":339},{"type":125,"tag":179,"props":2736,"children":2737},{"style":320},[2738],{"type":131,"value":344},{"type":125,"tag":179,"props":2740,"children":2741},{"style":201},[2742],{"type":131,"value":2743},"@descope\u002Fnextjs-sdk\u002Fserver",{"type":125,"tag":179,"props":2745,"children":2746},{"style":320},[2747],{"type":131,"value":354},{"type":125,"tag":179,"props":2749,"children":2750},{"style":320},[2751],{"type":131,"value":359},{"type":125,"tag":179,"props":2753,"children":2754},{"class":181,"line":362},[2755],{"type":125,"tag":179,"props":2756,"children":2757},{"emptyLinePlaceholder":366},[2758],{"type":131,"value":369},{"type":125,"tag":179,"props":2760,"children":2761},{"class":181,"line":372},[2762,2766,2770,2774,2778],{"type":125,"tag":179,"props":2763,"children":2764},{"style":314},[2765],{"type":131,"value":378},{"type":125,"tag":179,"props":2767,"children":2768},{"style":314},[2769],{"type":131,"value":383},{"type":125,"tag":179,"props":2771,"children":2772},{"style":386},[2773],{"type":131,"value":2726},{"type":125,"tag":179,"props":2775,"children":2776},{"style":326},[2777],{"type":131,"value":716},{"type":125,"tag":179,"props":2779,"children":2780},{"style":320},[2781],{"type":131,"value":790},{"type":125,"tag":179,"props":2783,"children":2784},{"class":181,"line":400},[2785,2790,2794,2799,2803,2807,2811,2816],{"type":125,"tag":179,"props":2786,"children":2787},{"style":440},[2788],{"type":131,"value":2789},"  projectId",{"type":125,"tag":179,"props":2791,"children":2792},{"style":320},[2793],{"type":131,"value":448},{"type":125,"tag":179,"props":2795,"children":2796},{"style":326},[2797],{"type":131,"value":2798}," process",{"type":125,"tag":179,"props":2800,"children":2801},{"style":320},[2802],{"type":131,"value":808},{"type":125,"tag":179,"props":2804,"children":2805},{"style":326},[2806],{"type":131,"value":1524},{"type":125,"tag":179,"props":2808,"children":2809},{"style":320},[2810],{"type":131,"value":808},{"type":125,"tag":179,"props":2812,"children":2813},{"style":326},[2814],{"type":131,"value":2815},"DESCOPE_PROJECT_ID",{"type":125,"tag":179,"props":2817,"children":2818},{"style":320},[2819],{"type":131,"value":2820},"!,\n",{"type":125,"tag":179,"props":2822,"children":2823},{"class":181,"line":40},[2824,2829,2833,2838,2842,2847,2851,2855,2859,2864,2868,2873],{"type":125,"tag":179,"props":2825,"children":2826},{"style":440},[2827],{"type":131,"value":2828},"  publicRoutes",{"type":125,"tag":179,"props":2830,"children":2831},{"style":320},[2832],{"type":131,"value":448},{"type":125,"tag":179,"props":2834,"children":2835},{"style":326},[2836],{"type":131,"value":2837}," [",{"type":125,"tag":179,"props":2839,"children":2840},{"style":320},[2841],{"type":131,"value":354},{"type":125,"tag":179,"props":2843,"children":2844},{"style":201},[2845],{"type":131,"value":2846},"\u002F",{"type":125,"tag":179,"props":2848,"children":2849},{"style":320},[2850],{"type":131,"value":354},{"type":125,"tag":179,"props":2852,"children":2853},{"style":320},[2854],{"type":131,"value":588},{"type":125,"tag":179,"props":2856,"children":2857},{"style":320},[2858],{"type":131,"value":344},{"type":125,"tag":179,"props":2860,"children":2861},{"style":201},[2862],{"type":131,"value":2863},"\u002Fsign-in",{"type":125,"tag":179,"props":2865,"children":2866},{"style":320},[2867],{"type":131,"value":354},{"type":125,"tag":179,"props":2869,"children":2870},{"style":326},[2871],{"type":131,"value":2872},"]",{"type":125,"tag":179,"props":2874,"children":2875},{"style":320},[2876],{"type":131,"value":495},{"type":125,"tag":179,"props":2878,"children":2879},{"class":181,"line":436},[2880,2884,2888],{"type":125,"tag":179,"props":2881,"children":2882},{"style":320},[2883],{"type":131,"value":837},{"type":125,"tag":179,"props":2885,"children":2886},{"style":326},[2887],{"type":131,"value":745},{"type":125,"tag":179,"props":2889,"children":2890},{"style":320},[2891],{"type":131,"value":359},{"type":125,"tag":161,"props":2893,"children":2895},{"id":2894},"sign-in-flow",[2896],{"type":131,"value":2897},"Sign-In Flow",{"type":125,"tag":168,"props":2899,"children":2901},{"className":953,"code":2900,"language":955,"meta":173,"style":173},"\"use client\";\nimport { Descope } from \"@descope\u002Fnextjs-sdk\";\n\nexport default function SignInPage() {\n  return \u003CDescope flowId=\"sign-up-or-in\" \u002F>;\n}\n",[2902],{"type":125,"tag":152,"props":2903,"children":2904},{"__ignoreMap":173},[2905,2924,2964,2971,2999,3040],{"type":125,"tag":179,"props":2906,"children":2907},{"class":181,"line":182},[2908,2912,2916,2920],{"type":125,"tag":179,"props":2909,"children":2910},{"style":320},[2911],{"type":131,"value":354},{"type":125,"tag":179,"props":2913,"children":2914},{"style":201},[2915],{"type":131,"value":1771},{"type":125,"tag":179,"props":2917,"children":2918},{"style":320},[2919],{"type":131,"value":354},{"type":125,"tag":179,"props":2921,"children":2922},{"style":320},[2923],{"type":131,"value":359},{"type":125,"tag":179,"props":2925,"children":2926},{"class":181,"line":192},[2927,2931,2935,2940,2944,2948,2952,2956,2960],{"type":125,"tag":179,"props":2928,"children":2929},{"style":314},[2930],{"type":131,"value":317},{"type":125,"tag":179,"props":2932,"children":2933},{"style":320},[2934],{"type":131,"value":323},{"type":125,"tag":179,"props":2936,"children":2937},{"style":326},[2938],{"type":131,"value":2939}," Descope",{"type":125,"tag":179,"props":2941,"children":2942},{"style":320},[2943],{"type":131,"value":334},{"type":125,"tag":179,"props":2945,"children":2946},{"style":314},[2947],{"type":131,"value":339},{"type":125,"tag":179,"props":2949,"children":2950},{"style":320},[2951],{"type":131,"value":344},{"type":125,"tag":179,"props":2953,"children":2954},{"style":201},[2955],{"type":131,"value":2424},{"type":125,"tag":179,"props":2957,"children":2958},{"style":320},[2959],{"type":131,"value":354},{"type":125,"tag":179,"props":2961,"children":2962},{"style":320},[2963],{"type":131,"value":359},{"type":125,"tag":179,"props":2965,"children":2966},{"class":181,"line":362},[2967],{"type":125,"tag":179,"props":2968,"children":2969},{"emptyLinePlaceholder":366},[2970],{"type":131,"value":369},{"type":125,"tag":179,"props":2972,"children":2973},{"class":181,"line":372},[2974,2978,2982,2986,2991,2995],{"type":125,"tag":179,"props":2975,"children":2976},{"style":314},[2977],{"type":131,"value":378},{"type":125,"tag":179,"props":2979,"children":2980},{"style":314},[2981],{"type":131,"value":383},{"type":125,"tag":179,"props":2983,"children":2984},{"style":415},[2985],{"type":131,"value":1030},{"type":125,"tag":179,"props":2987,"children":2988},{"style":386},[2989],{"type":131,"value":2990}," SignInPage",{"type":125,"tag":179,"props":2992,"children":2993},{"style":320},[2994],{"type":131,"value":393},{"type":125,"tag":179,"props":2996,"children":2997},{"style":320},[2998],{"type":131,"value":433},{"type":125,"tag":179,"props":3000,"children":3001},{"class":181,"line":400},[3002,3006,3010,3014,3019,3023,3027,3032,3036],{"type":125,"tag":179,"props":3003,"children":3004},{"style":314},[3005],{"type":131,"value":1113},{"type":125,"tag":179,"props":3007,"children":3008},{"style":320},[3009],{"type":131,"value":1374},{"type":125,"tag":179,"props":3011,"children":3012},{"style":196},[3013],{"type":131,"value":2306},{"type":125,"tag":179,"props":3015,"children":3016},{"style":415},[3017],{"type":131,"value":3018}," flowId",{"type":125,"tag":179,"props":3020,"children":3021},{"style":320},[3022],{"type":131,"value":428},{"type":125,"tag":179,"props":3024,"children":3025},{"style":320},[3026],{"type":131,"value":354},{"type":125,"tag":179,"props":3028,"children":3029},{"style":201},[3030],{"type":131,"value":3031},"sign-up-or-in",{"type":125,"tag":179,"props":3033,"children":3034},{"style":320},[3035],{"type":131,"value":354},{"type":125,"tag":179,"props":3037,"children":3038},{"style":320},[3039],{"type":131,"value":1384},{"type":125,"tag":179,"props":3041,"children":3042},{"class":181,"line":40},[3043],{"type":125,"tag":179,"props":3044,"children":3045},{"style":320},[3046],{"type":131,"value":1266},{"type":125,"tag":140,"props":3048,"children":3049},{"id":22},[3050],{"type":131,"value":21},{"type":125,"tag":134,"props":3052,"children":3053},{},[3054],{"type":131,"value":3055},"Auth0 provides a mature authentication platform with extensive identity provider support.",{"type":125,"tag":161,"props":3057,"children":3059},{"id":3058},"sdk-setup-2",[3060],{"type":131,"value":252},{"type":125,"tag":168,"props":3062,"children":3064},{"className":170,"code":3063,"language":172,"meta":173,"style":173},"npm install @auth0\u002Fnextjs-auth0\n",[3065],{"type":125,"tag":152,"props":3066,"children":3067},{"__ignoreMap":173},[3068],{"type":125,"tag":179,"props":3069,"children":3070},{"class":181,"line":182},[3071,3075,3079],{"type":125,"tag":179,"props":3072,"children":3073},{"style":196},[3074],{"type":131,"value":275},{"type":125,"tag":179,"props":3076,"children":3077},{"style":201},[3078],{"type":131,"value":280},{"type":125,"tag":179,"props":3080,"children":3081},{"style":201},[3082],{"type":131,"value":3083}," @auth0\u002Fnextjs-auth0\n",{"type":125,"tag":161,"props":3085,"children":3087},{"id":3086},"configuration",[3088],{"type":131,"value":3089},"Configuration",{"type":125,"tag":168,"props":3091,"children":3093},{"className":294,"code":3092,"language":296,"meta":173,"style":173},"\u002F\u002F lib\u002Fauth0.ts\nimport { Auth0Client } from \"@auth0\u002Fnextjs-auth0\u002Fserver\";\n\nexport const auth0 = new Auth0Client();\n",[3094],{"type":125,"tag":152,"props":3095,"children":3096},{"__ignoreMap":173},[3097,3105,3146,3153],{"type":125,"tag":179,"props":3098,"children":3099},{"class":181,"line":182},[3100],{"type":125,"tag":179,"props":3101,"children":3102},{"style":186},[3103],{"type":131,"value":3104},"\u002F\u002F lib\u002Fauth0.ts\n",{"type":125,"tag":179,"props":3106,"children":3107},{"class":181,"line":192},[3108,3112,3116,3121,3125,3129,3133,3138,3142],{"type":125,"tag":179,"props":3109,"children":3110},{"style":314},[3111],{"type":131,"value":317},{"type":125,"tag":179,"props":3113,"children":3114},{"style":320},[3115],{"type":131,"value":323},{"type":125,"tag":179,"props":3117,"children":3118},{"style":326},[3119],{"type":131,"value":3120}," Auth0Client",{"type":125,"tag":179,"props":3122,"children":3123},{"style":320},[3124],{"type":131,"value":334},{"type":125,"tag":179,"props":3126,"children":3127},{"style":314},[3128],{"type":131,"value":339},{"type":125,"tag":179,"props":3130,"children":3131},{"style":320},[3132],{"type":131,"value":344},{"type":125,"tag":179,"props":3134,"children":3135},{"style":201},[3136],{"type":131,"value":3137},"@auth0\u002Fnextjs-auth0\u002Fserver",{"type":125,"tag":179,"props":3139,"children":3140},{"style":320},[3141],{"type":131,"value":354},{"type":125,"tag":179,"props":3143,"children":3144},{"style":320},[3145],{"type":131,"value":359},{"type":125,"tag":179,"props":3147,"children":3148},{"class":181,"line":362},[3149],{"type":125,"tag":179,"props":3150,"children":3151},{"emptyLinePlaceholder":366},[3152],{"type":131,"value":369},{"type":125,"tag":179,"props":3154,"children":3155},{"class":181,"line":372},[3156,3160,3164,3169,3173,3178,3182,3186],{"type":125,"tag":179,"props":3157,"children":3158},{"style":314},[3159],{"type":131,"value":378},{"type":125,"tag":179,"props":3161,"children":3162},{"style":415},[3163],{"type":131,"value":418},{"type":125,"tag":179,"props":3165,"children":3166},{"style":326},[3167],{"type":131,"value":3168}," auth0 ",{"type":125,"tag":179,"props":3170,"children":3171},{"style":320},[3172],{"type":131,"value":428},{"type":125,"tag":179,"props":3174,"children":3175},{"style":320},[3176],{"type":131,"value":3177}," new",{"type":125,"tag":179,"props":3179,"children":3180},{"style":386},[3181],{"type":131,"value":3120},{"type":125,"tag":179,"props":3183,"children":3184},{"style":326},[3185],{"type":131,"value":393},{"type":125,"tag":179,"props":3187,"children":3188},{"style":320},[3189],{"type":131,"value":359},{"type":125,"tag":134,"props":3191,"children":3192},{},[3193],{"type":131,"value":3194},"Required environment variables:",{"type":125,"tag":168,"props":3196,"children":3198},{"className":1522,"code":3197,"language":1524,"meta":173,"style":173},"AUTH0_SECRET=\u003Crandom-secret>\nAUTH0_BASE_URL=http:\u002F\u002Flocalhost:3000\nAUTH0_ISSUER_BASE_URL=https:\u002F\u002Fyour-tenant.auth0.com\nAUTH0_CLIENT_ID=\u003Cclient-id>\nAUTH0_CLIENT_SECRET=\u003Cclient-secret>\n",[3199],{"type":125,"tag":152,"props":3200,"children":3201},{"__ignoreMap":173},[3202,3210,3218,3226,3234],{"type":125,"tag":179,"props":3203,"children":3204},{"class":181,"line":182},[3205],{"type":125,"tag":179,"props":3206,"children":3207},{},[3208],{"type":131,"value":3209},"AUTH0_SECRET=\u003Crandom-secret>\n",{"type":125,"tag":179,"props":3211,"children":3212},{"class":181,"line":192},[3213],{"type":125,"tag":179,"props":3214,"children":3215},{},[3216],{"type":131,"value":3217},"AUTH0_BASE_URL=http:\u002F\u002Flocalhost:3000\n",{"type":125,"tag":179,"props":3219,"children":3220},{"class":181,"line":362},[3221],{"type":125,"tag":179,"props":3222,"children":3223},{},[3224],{"type":131,"value":3225},"AUTH0_ISSUER_BASE_URL=https:\u002F\u002Fyour-tenant.auth0.com\n",{"type":125,"tag":179,"props":3227,"children":3228},{"class":181,"line":372},[3229],{"type":125,"tag":179,"props":3230,"children":3231},{},[3232],{"type":131,"value":3233},"AUTH0_CLIENT_ID=\u003Cclient-id>\n",{"type":125,"tag":179,"props":3235,"children":3236},{"class":181,"line":400},[3237],{"type":125,"tag":179,"props":3238,"children":3239},{},[3240],{"type":131,"value":3241},"AUTH0_CLIENT_SECRET=\u003Cclient-secret>\n",{"type":125,"tag":161,"props":3243,"children":3244},{"id":96},[3245],{"type":131,"value":3246},"Middleware",{"type":125,"tag":168,"props":3248,"children":3250},{"className":294,"code":3249,"language":296,"meta":173,"style":173},"\u002F\u002F middleware.ts\nimport { auth0 } from \"@\u002Flib\u002Fauth0\";\nimport { NextRequest, NextResponse } from \"next\u002Fserver\";\n\nexport async function middleware(request: NextRequest) {\n  return await auth0.middleware(request);\n}\n\nexport const config = {\n  matcher: [\n    \"\u002F((?!_next\u002Fstatic|_next\u002Fimage|favicon.ico|sitemap.xml|robots.txt).*)\",\n  ],\n};\n",[3251],{"type":125,"tag":152,"props":3252,"children":3253},{"__ignoreMap":173},[3254,3261,3302,3352,3359,3404,3443,3450,3457,3480,3495,3515,3526],{"type":125,"tag":179,"props":3255,"children":3256},{"class":181,"line":182},[3257],{"type":125,"tag":179,"props":3258,"children":3259},{"style":186},[3260],{"type":131,"value":308},{"type":125,"tag":179,"props":3262,"children":3263},{"class":181,"line":192},[3264,3268,3272,3277,3281,3285,3289,3294,3298],{"type":125,"tag":179,"props":3265,"children":3266},{"style":314},[3267],{"type":131,"value":317},{"type":125,"tag":179,"props":3269,"children":3270},{"style":320},[3271],{"type":131,"value":323},{"type":125,"tag":179,"props":3273,"children":3274},{"style":326},[3275],{"type":131,"value":3276}," auth0",{"type":125,"tag":179,"props":3278,"children":3279},{"style":320},[3280],{"type":131,"value":334},{"type":125,"tag":179,"props":3282,"children":3283},{"style":314},[3284],{"type":131,"value":339},{"type":125,"tag":179,"props":3286,"children":3287},{"style":320},[3288],{"type":131,"value":344},{"type":125,"tag":179,"props":3290,"children":3291},{"style":201},[3292],{"type":131,"value":3293},"@\u002Flib\u002Fauth0",{"type":125,"tag":179,"props":3295,"children":3296},{"style":320},[3297],{"type":131,"value":354},{"type":125,"tag":179,"props":3299,"children":3300},{"style":320},[3301],{"type":131,"value":359},{"type":125,"tag":179,"props":3303,"children":3304},{"class":181,"line":362},[3305,3309,3313,3318,3322,3327,3331,3335,3339,3344,3348],{"type":125,"tag":179,"props":3306,"children":3307},{"style":314},[3308],{"type":131,"value":317},{"type":125,"tag":179,"props":3310,"children":3311},{"style":320},[3312],{"type":131,"value":323},{"type":125,"tag":179,"props":3314,"children":3315},{"style":326},[3316],{"type":131,"value":3317}," NextRequest",{"type":125,"tag":179,"props":3319,"children":3320},{"style":320},[3321],{"type":131,"value":588},{"type":125,"tag":179,"props":3323,"children":3324},{"style":326},[3325],{"type":131,"value":3326}," NextResponse",{"type":125,"tag":179,"props":3328,"children":3329},{"style":320},[3330],{"type":131,"value":334},{"type":125,"tag":179,"props":3332,"children":3333},{"style":314},[3334],{"type":131,"value":339},{"type":125,"tag":179,"props":3336,"children":3337},{"style":320},[3338],{"type":131,"value":344},{"type":125,"tag":179,"props":3340,"children":3341},{"style":201},[3342],{"type":131,"value":3343},"next\u002Fserver",{"type":125,"tag":179,"props":3345,"children":3346},{"style":320},[3347],{"type":131,"value":354},{"type":125,"tag":179,"props":3349,"children":3350},{"style":320},[3351],{"type":131,"value":359},{"type":125,"tag":179,"props":3353,"children":3354},{"class":181,"line":372},[3355],{"type":125,"tag":179,"props":3356,"children":3357},{"emptyLinePlaceholder":366},[3358],{"type":131,"value":369},{"type":125,"tag":179,"props":3360,"children":3361},{"class":181,"line":400},[3362,3366,3370,3374,3379,3383,3388,3392,3396,3400],{"type":125,"tag":179,"props":3363,"children":3364},{"style":314},[3365],{"type":131,"value":378},{"type":125,"tag":179,"props":3367,"children":3368},{"style":415},[3369],{"type":131,"value":1628},{"type":125,"tag":179,"props":3371,"children":3372},{"style":415},[3373],{"type":131,"value":1030},{"type":125,"tag":179,"props":3375,"children":3376},{"style":386},[3377],{"type":131,"value":3378}," middleware",{"type":125,"tag":179,"props":3380,"children":3381},{"style":320},[3382],{"type":131,"value":716},{"type":125,"tag":179,"props":3384,"children":3385},{"style":729},[3386],{"type":131,"value":3387},"request",{"type":125,"tag":179,"props":3389,"children":3390},{"style":320},[3391],{"type":131,"value":448},{"type":125,"tag":179,"props":3393,"children":3394},{"style":196},[3395],{"type":131,"value":3317},{"type":125,"tag":179,"props":3397,"children":3398},{"style":320},[3399],{"type":131,"value":745},{"type":125,"tag":179,"props":3401,"children":3402},{"style":320},[3403],{"type":131,"value":433},{"type":125,"tag":179,"props":3405,"children":3406},{"class":181,"line":40},[3407,3411,3415,3419,3423,3427,3431,3435,3439],{"type":125,"tag":179,"props":3408,"children":3409},{"style":314},[3410],{"type":131,"value":1113},{"type":125,"tag":179,"props":3412,"children":3413},{"style":314},[3414],{"type":131,"value":1667},{"type":125,"tag":179,"props":3416,"children":3417},{"style":326},[3418],{"type":131,"value":3276},{"type":125,"tag":179,"props":3420,"children":3421},{"style":320},[3422],{"type":131,"value":808},{"type":125,"tag":179,"props":3424,"children":3425},{"style":386},[3426],{"type":131,"value":96},{"type":125,"tag":179,"props":3428,"children":3429},{"style":440},[3430],{"type":131,"value":716},{"type":125,"tag":179,"props":3432,"children":3433},{"style":326},[3434],{"type":131,"value":3387},{"type":125,"tag":179,"props":3436,"children":3437},{"style":440},[3438],{"type":131,"value":745},{"type":125,"tag":179,"props":3440,"children":3441},{"style":320},[3442],{"type":131,"value":359},{"type":125,"tag":179,"props":3444,"children":3445},{"class":181,"line":436},[3446],{"type":125,"tag":179,"props":3447,"children":3448},{"style":320},[3449],{"type":131,"value":1266},{"type":125,"tag":179,"props":3451,"children":3452},{"class":181,"line":456},[3453],{"type":125,"tag":179,"props":3454,"children":3455},{"emptyLinePlaceholder":366},[3456],{"type":131,"value":369},{"type":125,"tag":179,"props":3458,"children":3459},{"class":181,"line":465},[3460,3464,3468,3472,3476],{"type":125,"tag":179,"props":3461,"children":3462},{"style":314},[3463],{"type":131,"value":378},{"type":125,"tag":179,"props":3465,"children":3466},{"style":415},[3467],{"type":131,"value":418},{"type":125,"tag":179,"props":3469,"children":3470},{"style":326},[3471],{"type":131,"value":423},{"type":125,"tag":179,"props":3473,"children":3474},{"style":320},[3475],{"type":131,"value":428},{"type":125,"tag":179,"props":3477,"children":3478},{"style":320},[3479],{"type":131,"value":433},{"type":125,"tag":179,"props":3481,"children":3482},{"class":181,"line":498},[3483,3487,3491],{"type":125,"tag":179,"props":3484,"children":3485},{"style":440},[3486],{"type":131,"value":443},{"type":125,"tag":179,"props":3488,"children":3489},{"style":320},[3490],{"type":131,"value":448},{"type":125,"tag":179,"props":3492,"children":3493},{"style":326},[3494],{"type":131,"value":453},{"type":125,"tag":179,"props":3496,"children":3497},{"class":181,"line":507},[3498,3502,3507,3511],{"type":125,"tag":179,"props":3499,"children":3500},{"style":320},[3501],{"type":131,"value":471},{"type":125,"tag":179,"props":3503,"children":3504},{"style":201},[3505],{"type":131,"value":3506},"\u002F((?!_next\u002Fstatic|_next\u002Fimage|favicon.ico|sitemap.xml|robots.txt).*)",{"type":125,"tag":179,"props":3508,"children":3509},{"style":320},[3510],{"type":131,"value":354},{"type":125,"tag":179,"props":3512,"children":3513},{"style":320},[3514],{"type":131,"value":495},{"type":125,"tag":179,"props":3516,"children":3517},{"class":181,"line":528},[3518,3522],{"type":125,"tag":179,"props":3519,"children":3520},{"style":326},[3521],{"type":131,"value":534},{"type":125,"tag":179,"props":3523,"children":3524},{"style":320},[3525],{"type":131,"value":495},{"type":125,"tag":179,"props":3527,"children":3528},{"class":181,"line":541},[3529],{"type":125,"tag":179,"props":3530,"children":3531},{"style":320},[3532],{"type":131,"value":547},{"type":125,"tag":161,"props":3534,"children":3536},{"id":3535},"access-session-data",[3537],{"type":131,"value":3538},"Access Session Data",{"type":125,"tag":168,"props":3540,"children":3542},{"className":953,"code":3541,"language":955,"meta":173,"style":173},"\u002F\u002F Server component\nimport { auth0 } from \"@\u002Flib\u002Fauth0\";\n\nexport default async function Page() {\n  const session = await auth0.getSession();\n  return session ? (\n    \u003Cp>Hello, {session.user.name}\u003C\u002Fp>\n  ) : (\n    \u003Ca href=\"\u002Fauth\u002Flogin\">Log in\u003C\u002Fa>\n  );\n}\n",[3543],{"type":125,"tag":152,"props":3544,"children":3545},{"__ignoreMap":173},[3546,3553,3592,3599,3630,3671,3691,3747,3763,3819,3830],{"type":125,"tag":179,"props":3547,"children":3548},{"class":181,"line":182},[3549],{"type":125,"tag":179,"props":3550,"children":3551},{"style":186},[3552],{"type":131,"value":1565},{"type":125,"tag":179,"props":3554,"children":3555},{"class":181,"line":192},[3556,3560,3564,3568,3572,3576,3580,3584,3588],{"type":125,"tag":179,"props":3557,"children":3558},{"style":314},[3559],{"type":131,"value":317},{"type":125,"tag":179,"props":3561,"children":3562},{"style":320},[3563],{"type":131,"value":323},{"type":125,"tag":179,"props":3565,"children":3566},{"style":326},[3567],{"type":131,"value":3276},{"type":125,"tag":179,"props":3569,"children":3570},{"style":320},[3571],{"type":131,"value":334},{"type":125,"tag":179,"props":3573,"children":3574},{"style":314},[3575],{"type":131,"value":339},{"type":125,"tag":179,"props":3577,"children":3578},{"style":320},[3579],{"type":131,"value":344},{"type":125,"tag":179,"props":3581,"children":3582},{"style":201},[3583],{"type":131,"value":3293},{"type":125,"tag":179,"props":3585,"children":3586},{"style":320},[3587],{"type":131,"value":354},{"type":125,"tag":179,"props":3589,"children":3590},{"style":320},[3591],{"type":131,"value":359},{"type":125,"tag":179,"props":3593,"children":3594},{"class":181,"line":362},[3595],{"type":125,"tag":179,"props":3596,"children":3597},{"emptyLinePlaceholder":366},[3598],{"type":131,"value":369},{"type":125,"tag":179,"props":3600,"children":3601},{"class":181,"line":372},[3602,3606,3610,3614,3618,3622,3626],{"type":125,"tag":179,"props":3603,"children":3604},{"style":314},[3605],{"type":131,"value":378},{"type":125,"tag":179,"props":3607,"children":3608},{"style":314},[3609],{"type":131,"value":383},{"type":125,"tag":179,"props":3611,"children":3612},{"style":415},[3613],{"type":131,"value":1628},{"type":125,"tag":179,"props":3615,"children":3616},{"style":415},[3617],{"type":131,"value":1030},{"type":125,"tag":179,"props":3619,"children":3620},{"style":386},[3621],{"type":131,"value":1354},{"type":125,"tag":179,"props":3623,"children":3624},{"style":320},[3625],{"type":131,"value":393},{"type":125,"tag":179,"props":3627,"children":3628},{"style":320},[3629],{"type":131,"value":433},{"type":125,"tag":179,"props":3631,"children":3632},{"class":181,"line":400},[3633,3637,3642,3646,3650,3654,3658,3663,3667],{"type":125,"tag":179,"props":3634,"children":3635},{"style":415},[3636],{"type":131,"value":1652},{"type":125,"tag":179,"props":3638,"children":3639},{"style":326},[3640],{"type":131,"value":3641}," session",{"type":125,"tag":179,"props":3643,"children":3644},{"style":320},[3645],{"type":131,"value":1662},{"type":125,"tag":179,"props":3647,"children":3648},{"style":314},[3649],{"type":131,"value":1667},{"type":125,"tag":179,"props":3651,"children":3652},{"style":326},[3653],{"type":131,"value":3276},{"type":125,"tag":179,"props":3655,"children":3656},{"style":320},[3657],{"type":131,"value":808},{"type":125,"tag":179,"props":3659,"children":3660},{"style":386},[3661],{"type":131,"value":3662},"getSession",{"type":125,"tag":179,"props":3664,"children":3665},{"style":440},[3666],{"type":131,"value":393},{"type":125,"tag":179,"props":3668,"children":3669},{"style":320},[3670],{"type":131,"value":359},{"type":125,"tag":179,"props":3672,"children":3673},{"class":181,"line":40},[3674,3678,3682,3687],{"type":125,"tag":179,"props":3675,"children":3676},{"style":314},[3677],{"type":131,"value":1113},{"type":125,"tag":179,"props":3679,"children":3680},{"style":326},[3681],{"type":131,"value":3641},{"type":125,"tag":179,"props":3683,"children":3684},{"style":320},[3685],{"type":131,"value":3686}," ?",{"type":125,"tag":179,"props":3688,"children":3689},{"style":440},[3690],{"type":131,"value":1118},{"type":125,"tag":179,"props":3692,"children":3693},{"class":181,"line":436},[3694,3698,3702,3706,3710,3714,3718,3722,3726,3730,3735,3739,3743],{"type":125,"tag":179,"props":3695,"children":3696},{"style":320},[3697],{"type":131,"value":1126},{"type":125,"tag":179,"props":3699,"children":3700},{"style":440},[3701],{"type":131,"value":134},{"type":125,"tag":179,"props":3703,"children":3704},{"style":320},[3705],{"type":131,"value":1699},{"type":125,"tag":179,"props":3707,"children":3708},{"style":326},[3709],{"type":131,"value":1704},{"type":125,"tag":179,"props":3711,"children":3712},{"style":320},[3713],{"type":131,"value":1709},{"type":125,"tag":179,"props":3715,"children":3716},{"style":326},[3717],{"type":131,"value":95},{"type":125,"tag":179,"props":3719,"children":3720},{"style":320},[3721],{"type":131,"value":808},{"type":125,"tag":179,"props":3723,"children":3724},{"style":326},[3725],{"type":131,"value":1714},{"type":125,"tag":179,"props":3727,"children":3728},{"style":320},[3729],{"type":131,"value":808},{"type":125,"tag":179,"props":3731,"children":3732},{"style":326},[3733],{"type":131,"value":3734},"name",{"type":125,"tag":179,"props":3736,"children":3737},{"style":320},[3738],{"type":131,"value":1203},{"type":125,"tag":179,"props":3740,"children":3741},{"style":440},[3742],{"type":131,"value":134},{"type":125,"tag":179,"props":3744,"children":3745},{"style":320},[3746],{"type":131,"value":1136},{"type":125,"tag":179,"props":3748,"children":3749},{"class":181,"line":456},[3750,3755,3759],{"type":125,"tag":179,"props":3751,"children":3752},{"style":440},[3753],{"type":131,"value":3754},"  ) ",{"type":125,"tag":179,"props":3756,"children":3757},{"style":320},[3758],{"type":131,"value":448},{"type":125,"tag":179,"props":3760,"children":3761},{"style":440},[3762],{"type":131,"value":1118},{"type":125,"tag":179,"props":3764,"children":3765},{"class":181,"line":465},[3766,3770,3775,3780,3784,3788,3793,3797,3801,3806,3811,3815],{"type":125,"tag":179,"props":3767,"children":3768},{"style":320},[3769],{"type":131,"value":1126},{"type":125,"tag":179,"props":3771,"children":3772},{"style":440},[3773],{"type":131,"value":3774},"a",{"type":125,"tag":179,"props":3776,"children":3777},{"style":415},[3778],{"type":131,"value":3779}," href",{"type":125,"tag":179,"props":3781,"children":3782},{"style":320},[3783],{"type":131,"value":428},{"type":125,"tag":179,"props":3785,"children":3786},{"style":320},[3787],{"type":131,"value":354},{"type":125,"tag":179,"props":3789,"children":3790},{"style":201},[3791],{"type":131,"value":3792},"\u002Fauth\u002Flogin",{"type":125,"tag":179,"props":3794,"children":3795},{"style":320},[3796],{"type":131,"value":354},{"type":125,"tag":179,"props":3798,"children":3799},{"style":320},[3800],{"type":131,"value":1699},{"type":125,"tag":179,"props":3802,"children":3803},{"style":326},[3804],{"type":131,"value":3805},"Log in",{"type":125,"tag":179,"props":3807,"children":3808},{"style":320},[3809],{"type":131,"value":3810},"\u003C\u002F",{"type":125,"tag":179,"props":3812,"children":3813},{"style":440},[3814],{"type":131,"value":3774},{"type":125,"tag":179,"props":3816,"children":3817},{"style":320},[3818],{"type":131,"value":1136},{"type":125,"tag":179,"props":3820,"children":3821},{"class":181,"line":498},[3822,3826],{"type":125,"tag":179,"props":3823,"children":3824},{"style":440},[3825],{"type":131,"value":1253},{"type":125,"tag":179,"props":3827,"children":3828},{"style":320},[3829],{"type":131,"value":359},{"type":125,"tag":179,"props":3831,"children":3832},{"class":181,"line":507},[3833],{"type":125,"tag":179,"props":3834,"children":3835},{"style":320},[3836],{"type":131,"value":1266},{"type":125,"tag":140,"props":3838,"children":3840},{"id":3839},"decision-matrix",[3841],{"type":131,"value":3842},"Decision Matrix",{"type":125,"tag":3844,"props":3845,"children":3846},"table",{},[3847,3871],{"type":125,"tag":3848,"props":3849,"children":3850},"thead",{},[3851],{"type":125,"tag":3852,"props":3853,"children":3854},"tr",{},[3855,3861,3866],{"type":125,"tag":3856,"props":3857,"children":3858},"th",{},[3859],{"type":131,"value":3860},"Need",{"type":125,"tag":3856,"props":3862,"children":3863},{},[3864],{"type":131,"value":3865},"Recommended",{"type":125,"tag":3856,"props":3867,"children":3868},{},[3869],{"type":131,"value":3870},"Why",{"type":125,"tag":3872,"props":3873,"children":3874},"tbody",{},[3875,3894,3911,3928,3959],{"type":125,"tag":3852,"props":3876,"children":3877},{},[3878,3884,3889],{"type":125,"tag":3879,"props":3880,"children":3881},"td",{},[3882],{"type":131,"value":3883},"Fastest setup on Vercel",{"type":125,"tag":3879,"props":3885,"children":3886},{},[3887],{"type":131,"value":3888},"Clerk",{"type":125,"tag":3879,"props":3890,"children":3891},{},[3892],{"type":131,"value":3893},"Native Marketplace, auto-provisioned env vars",{"type":125,"tag":3852,"props":3895,"children":3896},{},[3897,3902,3906],{"type":125,"tag":3879,"props":3898,"children":3899},{},[3900],{"type":131,"value":3901},"Passwordless \u002F social login flows",{"type":125,"tag":3879,"props":3903,"children":3904},{},[3905],{"type":131,"value":2306},{"type":125,"tag":3879,"props":3907,"children":3908},{},[3909],{"type":131,"value":3910},"Visual flow builder, Marketplace native",{"type":125,"tag":3852,"props":3912,"children":3913},{},[3914,3919,3923],{"type":125,"tag":3879,"props":3915,"children":3916},{},[3917],{"type":131,"value":3918},"Enterprise SSO \u002F SAML \u002F multi-tenant",{"type":125,"tag":3879,"props":3920,"children":3921},{},[3922],{"type":131,"value":21},{"type":125,"tag":3879,"props":3924,"children":3925},{},[3926],{"type":131,"value":3927},"Deep enterprise identity support",{"type":125,"tag":3852,"props":3929,"children":3930},{},[3931,3936,3940],{"type":125,"tag":3879,"props":3932,"children":3933},{},[3934],{"type":131,"value":3935},"Pre-built UI components",{"type":125,"tag":3879,"props":3937,"children":3938},{},[3939],{"type":131,"value":3888},{"type":125,"tag":3879,"props":3941,"children":3942},{},[3943,3945,3951,3953],{"type":131,"value":3944},"Drop-in ",{"type":125,"tag":152,"props":3946,"children":3948},{"className":3947},[],[3949],{"type":131,"value":3950},"\u003CSignIn \u002F>",{"type":131,"value":3952},", ",{"type":125,"tag":152,"props":3954,"children":3956},{"className":3955},[],[3957],{"type":131,"value":3958},"\u003CUserButton \u002F>",{"type":125,"tag":3852,"props":3960,"children":3961},{},[3962,3967,3972],{"type":125,"tag":3879,"props":3963,"children":3964},{},[3965],{"type":131,"value":3966},"Vercel unified billing",{"type":125,"tag":3879,"props":3968,"children":3969},{},[3970],{"type":131,"value":3971},"Clerk or Descope",{"type":125,"tag":3879,"props":3973,"children":3974},{},[3975],{"type":131,"value":3976},"Both are native Marketplace integrations",{"type":125,"tag":140,"props":3978,"children":3980},{"id":3979},"clerk-core-3-breaking-changes-march-2026",[3981],{"type":131,"value":3982},"Clerk Core 3 Breaking Changes (March 2026)",{"type":125,"tag":134,"props":3984,"children":3985},{},[3986,3988,3994,3996,4002],{"type":131,"value":3987},"Clerk provides an upgrade CLI that scans your codebase and applies codemods: ",{"type":125,"tag":152,"props":3989,"children":3991},{"className":3990},[],[3992],{"type":131,"value":3993},"npx @clerk\u002Fupgrade",{"type":131,"value":3995},". Requires ",{"type":125,"tag":3997,"props":3998,"children":3999},"strong",{},[4000],{"type":131,"value":4001},"Node.js 20.9.0+",{"type":131,"value":808},{"type":125,"tag":221,"props":4004,"children":4005},{},[4006,4030,4059,4081,4103,4127,4150,4182,4200,4210],{"type":125,"tag":225,"props":4007,"children":4008},{},[4009,4020,4022,4028],{"type":125,"tag":3997,"props":4010,"children":4011},{},[4012,4018],{"type":125,"tag":152,"props":4013,"children":4015},{"className":4014},[],[4016],{"type":131,"value":4017},"auth()",{"type":131,"value":4019}," is async",{"type":131,"value":4021}," — always use ",{"type":125,"tag":152,"props":4023,"children":4025},{"className":4024},[],[4026],{"type":131,"value":4027},"const { userId } = await auth()",{"type":131,"value":4029},", not synchronous",{"type":125,"tag":225,"props":4031,"children":4032},{},[4033,4044,4046,4052,4054],{"type":125,"tag":3997,"props":4034,"children":4035},{},[4036,4042],{"type":125,"tag":152,"props":4037,"children":4039},{"className":4038},[],[4040],{"type":131,"value":4041},"auth.protect()",{"type":131,"value":4043}," moved",{"type":131,"value":4045}," — use ",{"type":125,"tag":152,"props":4047,"children":4049},{"className":4048},[],[4050],{"type":131,"value":4051},"await auth.protect()",{"type":131,"value":4053}," directly, not from the return value of ",{"type":125,"tag":152,"props":4055,"children":4057},{"className":4056},[],[4058],{"type":131,"value":4017},{"type":125,"tag":225,"props":4060,"children":4061},{},[4062,4072,4073,4079],{"type":125,"tag":3997,"props":4063,"children":4064},{},[4065,4071],{"type":125,"tag":152,"props":4066,"children":4068},{"className":4067},[],[4069],{"type":131,"value":4070},"clerkClient()",{"type":131,"value":4019},{"type":131,"value":4045},{"type":125,"tag":152,"props":4074,"children":4076},{"className":4075},[],[4077],{"type":131,"value":4078},"await clerkClient()",{"type":131,"value":4080}," in middleware handlers",{"type":125,"tag":225,"props":4082,"children":4083},{},[4084,4095,4097],{"type":125,"tag":3997,"props":4085,"children":4086},{},[4087,4093],{"type":125,"tag":152,"props":4088,"children":4090},{"className":4089},[],[4091],{"type":131,"value":4092},"authMiddleware()",{"type":131,"value":4094}," removed",{"type":131,"value":4096}," — migrate to ",{"type":125,"tag":152,"props":4098,"children":4100},{"className":4099},[],[4101],{"type":131,"value":4102},"clerkMiddleware()",{"type":125,"tag":225,"props":4104,"children":4105},{},[4106,4117,4119,4125],{"type":125,"tag":3997,"props":4107,"children":4108},{},[4109,4115],{"type":125,"tag":152,"props":4110,"children":4112},{"className":4111},[],[4113],{"type":131,"value":4114},"@clerk\u002Ftypes",{"type":131,"value":4116}," deprecated",{"type":131,"value":4118}," — import types from SDK subpath exports: ",{"type":125,"tag":152,"props":4120,"children":4122},{"className":4121},[],[4123],{"type":131,"value":4124},"import type { UserResource } from '@clerk\u002Freact\u002Ftypes'",{"type":131,"value":4126}," (works from any SDK package)",{"type":125,"tag":225,"props":4128,"children":4129},{},[4130,4140,4142,4148],{"type":125,"tag":3997,"props":4131,"children":4132},{},[4133,4138],{"type":125,"tag":152,"props":4134,"children":4136},{"className":4135},[],[4137],{"type":131,"value":1131},{"type":131,"value":4139}," no longer forces dynamic rendering",{"type":131,"value":4141}," — pass the ",{"type":125,"tag":152,"props":4143,"children":4145},{"className":4144},[],[4146],{"type":131,"value":4147},"dynamic",{"type":131,"value":4149}," prop if needed",{"type":125,"tag":225,"props":4151,"children":4152},{},[4153,4158,4160,4166,4168,4174,4176],{"type":125,"tag":3997,"props":4154,"children":4155},{},[4156],{"type":131,"value":4157},"Cache components",{"type":131,"value":4159}," — when using Next.js cache components, place ",{"type":125,"tag":152,"props":4161,"children":4163},{"className":4162},[],[4164],{"type":131,"value":4165},"\u003CClerkProvider>",{"type":131,"value":4167}," inside ",{"type":125,"tag":152,"props":4169,"children":4171},{"className":4170},[],[4172],{"type":131,"value":4173},"\u003Cbody>",{"type":131,"value":4175},", not wrapping ",{"type":125,"tag":152,"props":4177,"children":4179},{"className":4178},[],[4180],{"type":131,"value":4181},"\u003Chtml>",{"type":125,"tag":225,"props":4183,"children":4184},{},[4185,4190,4192,4198],{"type":125,"tag":3997,"props":4186,"children":4187},{},[4188],{"type":131,"value":4189},"Satellite domains",{"type":131,"value":4191}," — new ",{"type":125,"tag":152,"props":4193,"children":4195},{"className":4194},[],[4196],{"type":131,"value":4197},"satelliteAutoSync",{"type":131,"value":4199}," option skips handshake redirects when no session cookies exist",{"type":125,"tag":225,"props":4201,"children":4202},{},[4203,4208],{"type":125,"tag":3997,"props":4204,"children":4205},{},[4206],{"type":131,"value":4207},"Smaller bundles",{"type":131,"value":4209}," — React is now shared across framework SDKs (~50KB gzipped savings)",{"type":125,"tag":225,"props":4211,"children":4212},{},[4213,4218,4220,4226],{"type":125,"tag":3997,"props":4214,"children":4215},{},[4216],{"type":131,"value":4217},"Better offline handling",{"type":131,"value":4219}," — ",{"type":125,"tag":152,"props":4221,"children":4223},{"className":4222},[],[4224],{"type":131,"value":4225},"getToken()",{"type":131,"value":4227}," now correctly distinguishes signed-out from offline states",{"type":125,"tag":140,"props":4229,"children":4231},{"id":4230},"cross-references",[4232],{"type":131,"value":4233},"Cross-References",{"type":125,"tag":221,"props":4235,"children":4236},{},[4237,4253,4268],{"type":125,"tag":225,"props":4238,"children":4239},{},[4240,4245,4247],{"type":125,"tag":3997,"props":4241,"children":4242},{},[4243],{"type":131,"value":4244},"Marketplace install and env var provisioning",{"type":131,"value":4246}," → ",{"type":125,"tag":152,"props":4248,"children":4250},{"className":4249},[],[4251],{"type":131,"value":4252},"⤳ skill: marketplace",{"type":125,"tag":225,"props":4254,"children":4255},{},[4256,4261,4262],{"type":125,"tag":3997,"props":4257,"children":4258},{},[4259],{"type":131,"value":4260},"Middleware routing patterns",{"type":131,"value":4246},{"type":125,"tag":152,"props":4263,"children":4265},{"className":4264},[],[4266],{"type":131,"value":4267},"⤳ skill: routing-middleware",{"type":125,"tag":225,"props":4269,"children":4270},{},[4271,4276,4277],{"type":125,"tag":3997,"props":4272,"children":4273},{},[4274],{"type":131,"value":4275},"Environment variable management",{"type":131,"value":4246},{"type":125,"tag":152,"props":4278,"children":4280},{"className":4279},[],[4281],{"type":131,"value":4282},"⤳ skill: env-vars",{"type":125,"tag":140,"props":4284,"children":4286},{"id":4285},"official-documentation",[4287],{"type":131,"value":4288},"Official Documentation",{"type":125,"tag":221,"props":4290,"children":4291},{},[4292,4303,4313,4323],{"type":125,"tag":225,"props":4293,"children":4294},{},[4295],{"type":125,"tag":3774,"props":4296,"children":4300},{"href":4297,"rel":4298},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Fdeployments\u002Fvercel",[4299],"nofollow",[4301],{"type":131,"value":4302},"Clerk + Vercel Marketplace",{"type":125,"tag":225,"props":4304,"children":4305},{},[4306],{"type":125,"tag":3774,"props":4307,"children":4310},{"href":4308,"rel":4309},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Fquickstarts\u002Fnextjs",[4299],[4311],{"type":131,"value":4312},"Clerk Next.js Quickstart",{"type":125,"tag":225,"props":4314,"children":4315},{},[4316],{"type":125,"tag":3774,"props":4317,"children":4320},{"href":4318,"rel":4319},"https:\u002F\u002Fdocs.descope.com\u002Fgetting-started\u002Fnextjs",[4299],[4321],{"type":131,"value":4322},"Descope Next.js SDK",{"type":125,"tag":225,"props":4324,"children":4325},{},[4326],{"type":125,"tag":3774,"props":4327,"children":4330},{"href":4328,"rel":4329},"https:\u002F\u002Fauth0.com\u002Fdocs\u002Fquickstart\u002Fwebapp\u002Fnextjs",[4299],[4331],{"type":131,"value":4332},"Auth0 Next.js SDK",{"type":125,"tag":4334,"props":4335,"children":4336},"style",{},[4337],{"type":131,"value":4338},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":4340,"total":4441},[4341,4358,4366,4381,4398,4415,4430],{"slug":4342,"name":4342,"fn":4343,"description":4344,"org":4345,"tags":4346,"stars":26,"repoUrl":27,"updatedAt":4357},"ai-gateway","configure and manage Vercel AI Gateway","Vercel AI Gateway expert guidance. Use when configuring model routing, provider failover, cost tracking, or managing multiple AI providers through a unified API.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4347,4350,4353,4356],{"name":4348,"slug":4349,"type":15},"AI Infrastructure","ai-infrastructure",{"name":4351,"slug":4352,"type":15},"Cost Optimization","cost-optimization",{"name":4354,"slug":4355,"type":15},"LLM","llm",{"name":9,"slug":8,"type":15},"2026-04-06T18:56:06.57787",{"slug":4,"name":4,"fn":5,"description":6,"org":4359,"tags":4360,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4361,4362,4363,4364,4365],{"name":21,"slug":22,"type":15},{"name":24,"slug":25,"type":15},{"name":18,"slug":19,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"slug":4367,"name":4367,"fn":4368,"description":4369,"org":4370,"tags":4371,"stars":26,"repoUrl":27,"updatedAt":4380},"bootstrap","bootstrap Vercel-linked repositories","Project bootstrapping orchestrator for repos that depend on Vercel-linked resources (databases, auth, and managed integrations). Use when setting up or repairing a repository so linking, environment provisioning, env pulls, and first-run db\u002Fdev commands happen in the correct safe order.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4372,4373,4376,4379],{"name":3089,"slug":3086,"type":15},{"name":4374,"slug":4375,"type":15},"Deployment","deployment",{"name":4377,"slug":4378,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},"2026-04-06T18:56:18.297868",{"slug":4382,"name":4382,"fn":4383,"description":4384,"org":4385,"tags":4386,"stars":26,"repoUrl":27,"updatedAt":4397},"cdn-caching","debug Vercel CDN caching behavior","Debug Vercel CDN caching — cache hit rate, stale content, revalidation behavior, ISR + PPR, per-request cache reasons (cacheReason) and PPR state (ppr_state), and costs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4387,4390,4393,4396],{"name":4388,"slug":4389,"type":15},"Caching","caching",{"name":4391,"slug":4392,"type":15},"Observability","observability",{"name":4394,"slug":4395,"type":15},"Performance","performance",{"name":9,"slug":8,"type":15},"2026-07-30T05:31:34.628944",{"slug":4399,"name":4399,"fn":4400,"description":4401,"org":4402,"tags":4403,"stars":26,"repoUrl":27,"updatedAt":4414},"chat-sdk","build multi-platform chatbots with Vercel","Vercel Chat SDK expert guidance. Use when building multi-platform chat bots — Slack, Telegram, Microsoft Teams, Discord, Google Chat, GitHub, Linear — with a single codebase. Covers the Chat class, adapters, threads, messages, cards, modals, streaming, state management, and webhook setup.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4404,4407,4410,4413],{"name":4405,"slug":4406,"type":15},"Agents","agents",{"name":4408,"slug":4409,"type":15},"Messaging","messaging",{"name":4411,"slug":4412,"type":15},"SDK","sdk",{"name":9,"slug":8,"type":15},"2026-04-06T18:56:26.921901",{"slug":4416,"name":4416,"fn":4417,"description":4418,"org":4419,"tags":4420,"stars":26,"repoUrl":27,"updatedAt":4429},"deployments-cicd","manage Vercel deployments and CI\u002FCD","Vercel deployment and CI\u002FCD expert guidance. Use when deploying, promoting, rolling back, inspecting deployments, building with --prebuilt, or configuring CI workflow files for Vercel.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4421,4424,4425,4428],{"name":4422,"slug":4423,"type":15},"CI\u002FCD","ci-cd",{"name":4374,"slug":4375,"type":15},{"name":4426,"slug":4427,"type":15},"Operations","operations",{"name":9,"slug":8,"type":15},"2026-04-06T18:56:22.054263",{"slug":4431,"name":4431,"fn":4432,"description":4433,"org":4434,"tags":4435,"stars":26,"repoUrl":27,"updatedAt":4440},"env-vars","manage Vercel environment variables","Vercel environment variable expert guidance. Use when working with .env files, vercel env commands, OIDC tokens, or managing environment-specific configuration.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4436,4437,4438,4439],{"name":3089,"slug":3086,"type":15},{"name":4426,"slug":4427,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},"2026-04-06T18:56:28.150777",29,{"items":4443,"total":4606},[4444,4462,4474,4491,4502,4515,4531,4545,4557,4576,4586,4596],{"slug":4445,"name":4445,"fn":4446,"description":4447,"org":4448,"tags":4449,"stars":4459,"repoUrl":4460,"updatedAt":4461},"next-cache-components-adoption","enable and migrate to Next.js Cache Components","Turn on Cache Components in a Next.js app and resolve the blocking routes it surfaces. Use when the user wants to enable, adopt, or migrate to Cache Components, flip the `cacheComponents` flag, work through a flood of blocking-prerender \u002F instant validation errors, run the `cache-components-instant-false` codemod, or decide between opting routes out with `export const instant = false` and fixing them in place.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4450,4451,4454,4457,4458],{"name":4388,"slug":4389,"type":15},{"name":4452,"slug":4453,"type":15},"Frontend","frontend",{"name":4455,"slug":4456,"type":15},"Migration","migration",{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},141208,"https:\u002F\u002Fgithub.com\u002Fvercel\u002Fnext.js","2026-07-24T05:38:30.118542",{"slug":4463,"name":4463,"fn":4464,"description":4465,"org":4466,"tags":4467,"stars":4459,"repoUrl":4460,"updatedAt":4473},"next-cache-components-optimizer","optimize Next.js cache components","Drive a Next.js route to instant navigation by setting up an agentic loop, under Cache Components \u002F PPR, on initial load (hard navigation) and client-side navigation (soft navigation). Encode the goal as a failing @next\u002Fplaywright instant() e2e and work it to green, one verified route at a time; the shipped test then guards against regression. Use when asked to make a route's navigation instant (its static shell commits immediately), fix a route whose static shell isn't prerendered\u002Fserved\u002Fprefetched, grow a route's static shell or fix its slow first paint, diagnose which Suspense boundary keeps a route out of its static shell, or write the instant() e2e guard for one. Requires Next.js 16.3+ with cacheComponents; directs an upgrade if older.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4468,4469,4470,4471,4472],{"name":4388,"slug":4389,"type":15},{"name":4452,"slug":4453,"type":15},{"name":18,"slug":19,"type":15},{"name":4394,"slug":4395,"type":15},{"name":9,"slug":8,"type":15},"2026-07-30T05:31:10.674078",{"slug":4475,"name":4475,"fn":4476,"description":4477,"org":4478,"tags":4479,"stars":4459,"repoUrl":4460,"updatedAt":4490},"next-dev-loop","verify Next.js runtime behavior","Verify Next.js runtime behavior after editing app code. Use this skill to confirm a change actually works in a running app — not just that it compiles or type-checks. Combines \u002F_next\u002Fmcp (Next.js's view) with agent-browser (the browser's view). Requires a running `next dev`.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4480,4483,4484,4485,4486,4487],{"name":4481,"slug":4482,"type":15},"Debugging","debugging",{"name":4452,"slug":4453,"type":15},{"name":4377,"slug":4378,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"name":4488,"slug":4489,"type":15},"Web Development","web-development","2026-05-22T06:45:28.627735",{"slug":4492,"name":4492,"fn":4493,"description":4494,"org":4495,"tags":4496,"stars":4459,"repoUrl":4460,"updatedAt":4501},"next-partial-prefetching-adoption","adopt Partial Prefetching in Next.js apps","Turn on Partial Prefetching in a Next.js app and work through the insights it surfaces. Use when the user wants to enable or adopt Partial Prefetching, flip the `partialPrefetching` flag, opt routes in with `export const prefetch = 'partial'`, audit `\u003CLink prefetch={true}>` calls, or resolve the link-prefetch-partial and instant-shell-url-data insights.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4497,4498,4499,4500],{"name":4452,"slug":4453,"type":15},{"name":18,"slug":19,"type":15},{"name":4394,"slug":4395,"type":15},{"name":9,"slug":8,"type":15},"2026-07-30T05:31:11.591864",{"slug":4503,"name":4503,"fn":4504,"description":4505,"org":4506,"tags":4507,"stars":4512,"repoUrl":4513,"updatedAt":4514},"turborepo","manage monorepos with Turborepo","Turborepo monorepo build system guidance. Triggers on: turbo.json, task pipelines,\ndependsOn, caching, remote cache, the \"turbo\" CLI, --filter, --affected, CI optimization, environment\nvariables, internal packages, monorepo structure\u002Fbest practices, and boundaries.\n\nUse when user: configures tasks\u002Fworkflows\u002Fpipelines, creates packages, sets up\nmonorepo, shares code between apps, runs changed\u002Faffected packages, debugs cache,\nor has apps\u002Fpackages directories.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4508,4509,4510],{"name":4422,"slug":4423,"type":15},{"name":4394,"slug":4395,"type":15},{"name":4511,"slug":4503,"type":15},"Turborepo",30809,"https:\u002F\u002Fgithub.com\u002Fvercel\u002Fturborepo","2026-07-30T05:32:14.920116",{"slug":4516,"name":4516,"fn":4517,"description":4518,"org":4519,"tags":4520,"stars":4528,"repoUrl":4529,"updatedAt":4530},"add-function-examples","add AI function examples for testing","Guide for adding new AI function examples, for testing specific features against the actual provider APIs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4521,4524,4527],{"name":4522,"slug":4523,"type":15},"AI SDK","ai-sdk",{"name":4525,"slug":4526,"type":15},"Testing","testing",{"name":9,"slug":8,"type":15},25670,"https:\u002F\u002Fgithub.com\u002Fvercel\u002Fai","2026-04-06T18:55:51.318866",{"slug":4532,"name":4532,"fn":4533,"description":4534,"org":4535,"tags":4536,"stars":4528,"repoUrl":4529,"updatedAt":4544},"add-harness-package","add AI SDK harness packages","Guide for adding new AI SDK harness packages. Use when creating a new @ai-sdk\u002Fharness-\u003Cname> package that adapts a coding-agent runtime to HarnessV1.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4537,4538,4539,4542,4543],{"name":4405,"slug":4406,"type":15},{"name":4522,"slug":4523,"type":15},{"name":4540,"slug":4541,"type":15},"Harness","harness",{"name":4411,"slug":4412,"type":15},{"name":9,"slug":8,"type":15},"2026-06-18T08:29:19.858737",{"slug":4546,"name":4546,"fn":4547,"description":4548,"org":4549,"tags":4550,"stars":4528,"repoUrl":4529,"updatedAt":4556},"add-provider-package","add new provider packages to AI SDK","Guide for adding new AI provider packages to the AI SDK. Use when creating a new @ai-sdk\u002F\u003Cprovider> package to integrate an AI service into the SDK.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4551,4552,4555],{"name":4522,"slug":4523,"type":15},{"name":4553,"slug":4554,"type":15},"API Development","api-development",{"name":9,"slug":8,"type":15},"2026-04-06T18:55:47.45549",{"slug":4558,"name":4558,"fn":4559,"description":4560,"org":4561,"tags":4562,"stars":4528,"repoUrl":4529,"updatedAt":4575},"adr-skill","create and maintain architecture decision records","Create and maintain Architecture Decision Records (ADRs) optimized for agentic coding workflows. Use when you need to propose, write, update, accept\u002Freject, deprecate, or supersede an ADR; bootstrap an adr folder and index; consult existing ADRs before implementing changes; or enforce ADR conventions. This skill uses Socratic questioning to capture intent before drafting, and validates output against an agent-readiness checklist.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4563,4566,4569,4572],{"name":4564,"slug":4565,"type":15},"ADR","adr",{"name":4567,"slug":4568,"type":15},"Architecture","architecture",{"name":4570,"slug":4571,"type":15},"Documentation","documentation",{"name":4573,"slug":4574,"type":15},"Engineering","engineering","2026-04-06T18:55:50.043694",{"slug":4523,"name":4523,"fn":4577,"description":4578,"org":4579,"tags":4580,"stars":4528,"repoUrl":4529,"updatedAt":4585},"build AI features with Vercel AI SDK","Answer questions about the AI SDK and help build AI-powered features. Use when developers: (1) Ask about AI SDK functions like generateText, streamText, ToolLoopAgent, embed, or tools, (2) Want to build AI agents, chatbots, RAG systems, or text generation features, (3) Have questions about AI providers (OpenAI, Anthropic, Google, etc.), streaming, tool calling, structured output, or embeddings, (4) Use React hooks like useChat or useCompletion. Triggers on: \"AI SDK\", \"Vercel AI SDK\", \"generateText\", \"streamText\", \"add AI to my app\", \"build an agent\", \"tool calling\", \"structured output\", \"useChat\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4581,4582,4583,4584],{"name":4405,"slug":4406,"type":15},{"name":4522,"slug":4523,"type":15},{"name":4354,"slug":4355,"type":15},{"name":9,"slug":8,"type":15},"2026-04-06T18:55:48.739463",{"slug":4587,"name":4587,"fn":4588,"description":4589,"org":4590,"tags":4591,"stars":4528,"repoUrl":4529,"updatedAt":4595},"capture-api-response-test-fixture","capture API response test fixtures","Capture API response test fixture.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4592,4593,4594],{"name":4553,"slug":4554,"type":15},{"name":4525,"slug":4526,"type":15},{"name":9,"slug":8,"type":15},"2026-04-06T18:55:56.374433",{"slug":4597,"name":4597,"fn":4598,"description":4599,"org":4600,"tags":4601,"stars":4528,"repoUrl":4529,"updatedAt":4605},"develop-ai-functions-example","develop AI SDK function examples","Develop examples for AI SDK functions. Use when creating, running, or modifying examples under examples\u002Fai-functions\u002Fsrc to validate provider support, demonstrate features, or create test fixtures.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4602,4603,4604],{"name":4522,"slug":4523,"type":15},{"name":4525,"slug":4526,"type":15},{"name":9,"slug":8,"type":15},"2026-04-06T18:55:55.088956",68]