[{"data":1,"prerenderedAt":921},["ShallowReactive",2],{"navigation_docs":3,"-guides-production-deployment":208,"-guides-production-deployment-surround":916},[4,42,68,115,136,157],{"title":5,"path":6,"stem":7,"children":8,"icon":11},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,12,17,22,27,32,37],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-sparkles",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F1.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F2.configuration","i-lucide-settings",{"title":23,"path":24,"stem":25,"icon":26},"Client Setup","\u002Fgetting-started\u002Fclient-setup","1.getting-started\u002F3.client-setup","i-lucide-monitor",{"title":28,"path":29,"stem":30,"icon":31},"Type Augmentation","\u002Fgetting-started\u002Ftype-augmentation","1.getting-started\u002F4.type-augmentation","i-lucide-type",{"title":33,"path":34,"stem":35,"icon":36},"Schema Generation (NuxtHub)","\u002Fgetting-started\u002Fschema-generation","1.getting-started\u002F5.schema-generation","i-lucide-database",{"title":38,"path":39,"stem":40,"icon":41},"How It Works","\u002Fgetting-started\u002Fhow-it-works","1.getting-started\u002F6.how-it-works","i-lucide-workflow",{"title":43,"path":44,"stem":45,"children":46,"page":67},"Core Concepts","\u002Fcore-concepts","2.core-concepts",[47,51,55,59,63],{"title":48,"path":49,"stem":50},"serverAuth()","\u002Fcore-concepts\u002Fserver-auth","2.core-concepts\u002F1.server-auth",{"title":52,"path":53,"stem":54},"Sessions","\u002Fcore-concepts\u002Fsessions","2.core-concepts\u002F2.sessions",{"title":56,"path":57,"stem":58},"Route Protection","\u002Fcore-concepts\u002Froute-protection","2.core-concepts\u002F3.route-protection",{"title":60,"path":61,"stem":62},"Auto‑Imports and Aliases","\u002Fcore-concepts\u002Fauto-imports-aliases","2.core-concepts\u002F4.auto-imports-aliases",{"title":64,"path":65,"stem":66},"Security & Caveats","\u002Fcore-concepts\u002Fsecurity-caveats","2.core-concepts\u002F5.security-caveats",false,{"title":69,"path":70,"stem":71,"children":72,"page":67},"Guides","\u002Fguides","3.guides",[73,77,82,86,90,94,99,103,107,111],{"title":74,"path":75,"stem":76},"Role‑Based Access","\u002Fguides\u002Frole-based-access","3.guides\u002F1.role-based-access",{"title":78,"path":79,"stem":80,"icon":81},"Setup diagnostics","\u002Fguides\u002Fdiagnostics","3.guides\u002F10.diagnostics","i-lucide-circle-alert",{"title":83,"path":84,"stem":85},"OAuth Providers","\u002Fguides\u002Foauth-providers","3.guides\u002F2.oauth-providers",{"title":87,"path":88,"stem":89},"Custom Database","\u002Fguides\u002Fcustom-database","3.guides\u002F3.custom-database",{"title":91,"path":92,"stem":93},"Database-less Mode","\u002Fguides\u002Fdatabase-less-mode","3.guides\u002F4.database-less-mode",{"title":95,"path":96,"stem":97,"icon":98},"External Auth Backend","\u002Fguides\u002Fexternal-auth-backend","3.guides\u002F5.external-auth-backend","i-lucide-server",{"title":100,"path":101,"stem":102},"Migrating from nuxt-auth-utils","\u002Fguides\u002Fmigrate-from-nuxt-auth-utils","3.guides\u002F6.migrate-from-nuxt-auth-utils",{"title":104,"path":105,"stem":106},"Two-Factor Authentication (TOTP + Backup Codes)","\u002Fguides\u002Ftwo-factor-auth","3.guides\u002F7.two-factor-auth",{"title":108,"path":109,"stem":110},"Testing","\u002Fguides\u002Ftesting","3.guides\u002F8.testing",{"title":112,"path":113,"stem":114},"Production Deployment","\u002Fguides\u002Fproduction-deployment","3.guides\u002F9.production-deployment",{"title":116,"path":117,"stem":118,"children":119,"page":67},"Integrations","\u002Fintegrations","4.integrations",[120,124,128,132],{"title":121,"path":122,"stem":123},"NuxtHub","\u002Fintegrations\u002Fnuxthub","4.integrations\u002F1.nuxthub",{"title":125,"path":126,"stem":127},"DevTools","\u002Fintegrations\u002Fdevtools","4.integrations\u002F2.devtools",{"title":129,"path":130,"stem":131},"Convex","\u002Fintegrations\u002Fconvex","4.integrations\u002F3.convex",{"title":133,"path":134,"stem":135},"i18n","\u002Fintegrations\u002Fi18n","4.integrations\u002F4.i18n",{"title":137,"path":138,"stem":139,"children":140,"page":67},"API Reference","\u002Fapi","5.api",[141,145,149,153],{"title":142,"path":143,"stem":144},"Composables","\u002Fapi\u002Fcomposables","5.api\u002F1.composables",{"title":146,"path":147,"stem":148},"Server Utilities","\u002Fapi\u002Fserver-utils","5.api\u002F2.server-utils",{"title":150,"path":151,"stem":152},"Components","\u002Fapi\u002Fcomponents","5.api\u002F3.components",{"title":154,"path":155,"stem":156},"Types","\u002Fapi\u002Ftypes","5.api\u002F4.types",{"title":158,"path":159,"stem":160,"children":161,"icon":81},"Errors","\u002Ferrors","6.errors\u002F0.index",[162,164,168,172,176,180,184,188,192,196,200,204],{"title":163,"path":159,"stem":160},"Overview",{"title":165,"path":166,"stem":167},"Auth configuration failed to load","\u002Ferrors\u002Fnuxt-auth-config-load-failed","6.errors\u002Fnuxt-auth-config-load-failed",{"title":169,"path":170,"stem":171},"Schema generator returned no code","\u002Ferrors\u002Fnuxt-auth-empty-schema","6.errors\u002Fnuxt-auth-empty-schema",{"title":173,"path":174,"stem":175},"Invalid server auth config export","\u002Ferrors\u002Fnuxt-auth-invalid-config-export","6.errors\u002Fnuxt-auth-invalid-config-export",{"title":177,"path":178,"stem":179},"Auth plugin path must be absolute","\u002Ferrors\u002Fnuxt-auth-invalid-plugin-source","6.errors\u002Fnuxt-auth-invalid-plugin-source",{"title":181,"path":182,"stem":183},"Missing auth configuration","\u002Ferrors\u002Fnuxt-auth-missing-config","6.errors\u002Fnuxt-auth-missing-config",{"title":185,"path":186,"stem":187},"NuxtHub database alias is missing","\u002Ferrors\u002Fnuxt-auth-missing-hub-db","6.errors\u002Fnuxt-auth-missing-hub-db",{"title":189,"path":190,"stem":191},"No database provider is enabled","\u002Ferrors\u002Fnuxt-auth-no-database-provider","6.errors\u002Fnuxt-auth-no-database-provider",{"title":193,"path":194,"stem":195},"Auth schema generation failed","\u002Ferrors\u002Fnuxt-auth-schema-generation-failed","6.errors\u002Fnuxt-auth-schema-generation-failed",{"title":197,"path":198,"stem":199},"Custom session storage is missing","\u002Ferrors\u002Fnuxt-auth-schema-storage-required","6.errors\u002Fnuxt-auth-schema-storage-required",{"title":201,"path":202,"stem":203},"Secondary storage in client-only mode","\u002Ferrors\u002Fnuxt-auth-storage-client-only","6.errors\u002Fnuxt-auth-storage-client-only",{"title":205,"path":206,"stem":207},"Unsupported database dialect","\u002Ferrors\u002Fnuxt-auth-unsupported-dialect","6.errors\u002Fnuxt-auth-unsupported-dialect",{"id":209,"title":112,"body":210,"description":910,"extension":911,"links":912,"meta":913,"navigation":255,"path":113,"seo":914,"stem":114,"__hash__":915},"docs\u002F3.guides\u002F9.production-deployment.md",{"type":211,"value":212,"toc":890},"minimark",[213,217,222,225,309,314,335,354,358,362,438,441,452,554,558,569,572,576,584,588,595,669,672,676,682,702,755,775,779,783,794,798,812,816,832,836,839,854,869,872,886],[214,215,216],"p",{},"Use this guide when your auth flow works locally and you are preparing to ship it to a real environment.",[218,219,221],"h2",{"id":220},"environment-variables","Environment Variables",[214,223,224],{},"Production requires a singular or versioned auth secret at runtime:",[226,227,233],"pre",{"className":228,"code":229,"filename":230,"language":231,"meta":232,"style":232},"language-ini shiki shiki-themes one-light synthwave-84 synthwave-84","# Required: 32+ character secret for session encryption\nNUXT_BETTER_AUTH_SECRET=\"your-32-character-secret-here-minimum\"\n\n# Alternative for non-destructive rotation\n# BETTER_AUTH_SECRETS=\"2:current-secret-must-be-at-least-32-characters,1:previous-secret-must-be-at-least-32-characters\"\n\n# Required on Workers, custom domains, and hosts without a platform URL\nNUXT_PUBLIC_SITE_URL=\"https:\u002F\u002Fyour-app.com\"\n\n# OAuth provider credentials (if using)\nGOOGLE_CLIENT_ID=\"...\"\nGOOGLE_CLIENT_SECRET=\"...\"\n",".env.production","ini","",[234,235,236,244,250,257,263,269,274,280,286,291,297,303],"code",{"__ignoreMap":232},[237,238,241],"span",{"class":239,"line":240},"line",1,[237,242,243],{},"# Required: 32+ character secret for session encryption\n",[237,245,247],{"class":239,"line":246},2,[237,248,249],{},"NUXT_BETTER_AUTH_SECRET=\"your-32-character-secret-here-minimum\"\n",[237,251,253],{"class":239,"line":252},3,[237,254,256],{"emptyLinePlaceholder":255},true,"\n",[237,258,260],{"class":239,"line":259},4,[237,261,262],{},"# Alternative for non-destructive rotation\n",[237,264,266],{"class":239,"line":265},5,[237,267,268],{},"# BETTER_AUTH_SECRETS=\"2:current-secret-must-be-at-least-32-characters,1:previous-secret-must-be-at-least-32-characters\"\n",[237,270,272],{"class":239,"line":271},6,[237,273,256],{"emptyLinePlaceholder":255},[237,275,277],{"class":239,"line":276},7,[237,278,279],{},"# Required on Workers, custom domains, and hosts without a platform URL\n",[237,281,283],{"class":239,"line":282},8,[237,284,285],{},"NUXT_PUBLIC_SITE_URL=\"https:\u002F\u002Fyour-app.com\"\n",[237,287,289],{"class":239,"line":288},9,[237,290,256],{"emptyLinePlaceholder":255},[237,292,294],{"class":239,"line":293},10,[237,295,296],{},"# OAuth provider credentials (if using)\n",[237,298,300],{"class":239,"line":299},11,[237,301,302],{},"GOOGLE_CLIENT_ID=\"...\"\n",[237,304,306],{"class":239,"line":305},12,[237,307,308],{},"GOOGLE_CLIENT_SECRET=\"...\"\n",[310,311,313],"h3",{"id":312},"generate-a-secure-secret","Generate a Secure Secret",[226,315,319],{"className":316,"code":317,"language":318,"meta":232,"style":232},"language-bash shiki shiki-themes one-light synthwave-84 synthwave-84","node -e \"console.log(require('crypto').randomBytes(32).toString('hex'))\"\n","bash",[234,320,321],{"__ignoreMap":232},[237,322,323,327,331],{"class":239,"line":240},[237,324,326],{"class":325},"siqUp","node",[237,328,330],{"class":329},"s3ZNE"," -e",[237,332,334],{"class":333},"sPAZv"," \"console.log(require('crypto').randomBytes(32).toString('hex'))\"\n",[214,336,337,338,341,342,345,346,349,350,353],{},"Singular secrets must be at least 32 characters. Shorter ",[234,339,340],{},"NUXT_BETTER_AUTH_SECRET"," or ",[234,343,344],{},"BETTER_AUTH_SECRET"," values cause auth initialization to throw at runtime. Better Auth validates versioned ",[234,347,348],{},"BETTER_AUTH_SECRETS","\u002F",[234,351,352],{},"secrets"," entries and warns when the current key is too short.",[218,355,357],{"id":356},"security-checklist","Security Checklist",[310,359,361],{"id":360},"before-deploying","Before Deploying",[363,364,367,389,414,423,429],"ul",{"className":365},[366],"contains-task-list",[368,369,372,376,377,379,380,379,382,384,385,388],"li",{"className":370},[371],"task-list-item",[373,374],"input",{"disabled":255,"type":375},"checkbox"," ",[234,378,340],{},", ",[234,381,344],{},[234,383,348],{},", or ",[234,386,387],{},"defineServerAuth({ secrets })"," is configured",[368,390,392,376,394,397,398,401,402,405,406,409,410,413],{"className":391},[371],[373,393],{"disabled":255,"type":375},[234,395,396],{},"NUXT_PUBLIC_SITE_URL"," is set at runtime. For platform domains, ",[234,399,400],{},"VERCEL_URL"," (Vercel), ",[234,403,404],{},"CF_PAGES_URL"," (Cloudflare Pages), or ",[234,407,408],{},"URL"," (Netlify) can supply the URL instead. Cloudflare Workers needs an explicit URL, including on ",[234,411,412],{},"workers.dev",".",[368,415,417,376,419,422],{"className":416},[371],[373,418],{"disabled":255,"type":375},[234,420,421],{},"trustedOrigins"," includes every active frontend origin (primary domain and preview domain, if used)",[368,424,426,428],{"className":425},[371],[373,427],{"disabled":255,"type":375}," OAuth redirect URIs configured for production domain",[368,430,432,376,434,437],{"className":431},[371],[373,433],{"disabled":255,"type":375},[234,435,436],{},"NODE_ENV=production"," is set (disables devtools)",[310,439,56],{"id":440},"route-protection",[214,442,443,444,447,448,451],{},"Route rules and ",[234,445,446],{},"definePageMeta"," are for UX (redirects). Always protect API endpoints with ",[234,449,450],{},"requireUserSession",":",[226,453,458],{"className":454,"code":455,"filename":456,"language":457,"meta":232,"style":232},"language-ts shiki shiki-themes one-light synthwave-84 synthwave-84","export default defineEventHandler(async (event) => {\n  const { user } = await requireUserSession(event)\n  return { data: 'protected' }\n})\n","server\u002Fapi\u002Fprotected.get.ts","ts",[234,459,460,497,530,549],{"__ignoreMap":232},[237,461,462,466,470,474,478,481,484,488,491,494],{"class":239,"line":240},[237,463,465],{"class":464},"sqe1H","export",[237,467,469],{"class":468},"sKg8T"," default",[237,471,473],{"class":472},"sfT9l"," defineEventHandler",[237,475,477],{"class":476},"s17Py","(",[237,479,480],{"class":464},"async",[237,482,483],{"class":476}," (",[237,485,487],{"class":486},"sgisi","event",[237,489,490],{"class":476},") ",[237,492,493],{"class":464},"=>",[237,495,496],{"class":476}," {\n",[237,498,499,502,505,509,512,516,519,522,524,527],{"class":239,"line":246},[237,500,501],{"class":464},"  const",[237,503,504],{"class":476}," { ",[237,506,508],{"class":507},"s6Rhl","user",[237,510,511],{"class":476}," } ",[237,513,515],{"class":514},"sQBpM","=",[237,517,518],{"class":464}," await",[237,520,521],{"class":472}," requireUserSession",[237,523,477],{"class":476},[237,525,487],{"class":526},"sYvLG",[237,528,529],{"class":476},")\n",[237,531,532,535,537,540,543,546],{"class":239,"line":252},[237,533,534],{"class":464},"  return",[237,536,504],{"class":476},[237,538,539],{"class":526},"data",[237,541,451],{"class":542},"sVnqq",[237,544,545],{"class":333}," 'protected'",[237,547,548],{"class":476}," }\n",[237,550,551],{"class":239,"line":259},[237,552,553],{"class":476},"})\n",[310,555,557],{"id":556},"rate-limiting","Rate Limiting",[214,559,560,561,568],{},"Better Auth enables its ",[562,563,567],"a",{"href":564,"rel":565},"https:\u002F\u002Fwww.better-auth.com\u002Fdocs\u002Fconcepts\u002Frate-limit",[566],"nofollow","built-in rate limiter"," by default in production with a 60-second window and a maximum of 100 requests. It is disabled by default in development.",[214,570,571],{},"Better Auth stores rate-limit data in memory by default. For serverless or multi-instance deployments, configure database, secondary storage, or custom storage instead of relying on separate per-instance counters.",[310,573,575],{"id":574},"separate-build-and-runtime-environments","Separate Build and Runtime Environments",[214,577,578,579,583],{},"Some platforms, including ",[580,581],"brand-badge",{"name":582},"cloudflare"," Workers Builds, expose build-time and runtime environment variables separately. Your singular or versioned auth secret must be available to the deployed runtime, but it does not need to be present in the build container.",[310,585,587],{"id":586},"trusted-origins-for-preview-environments","Trusted Origins for Preview Environments",[214,589,590,591,594],{},"If your workflow uses preview URLs (for example, ",[234,592,593],{},"*.workers.dev","), include those origins in your Better Auth server config.",[226,596,599],{"className":454,"code":597,"filename":598,"language":457,"meta":232,"style":232},"import { defineServerAuth } from '@nuxtjs\u002Fbetter-auth\u002Fconfig'\n\nexport default defineServerAuth({\n  trustedOrigins: [\n    'https:\u002F\u002Fyour-app.com',\n    'https:\u002F\u002Fyour-preview.workers.dev',\n  ],\n})\n","server\u002Fauth.config.ts",[234,600,601,619,623,635,645,653,660,665],{"__ignoreMap":232},[237,602,603,606,608,611,613,616],{"class":239,"line":240},[237,604,605],{"class":464},"import",[237,607,504],{"class":476},[237,609,610],{"class":526},"defineServerAuth",[237,612,511],{"class":476},[237,614,615],{"class":464},"from",[237,617,618],{"class":333}," '@nuxtjs\u002Fbetter-auth\u002Fconfig'\n",[237,620,621],{"class":239,"line":246},[237,622,256],{"emptyLinePlaceholder":255},[237,624,625,627,629,632],{"class":239,"line":252},[237,626,465],{"class":464},[237,628,469],{"class":468},[237,630,631],{"class":472}," defineServerAuth",[237,633,634],{"class":476},"({\n",[237,636,637,640,642],{"class":239,"line":259},[237,638,639],{"class":526},"  trustedOrigins",[237,641,451],{"class":542},[237,643,644],{"class":476}," [\n",[237,646,647,650],{"class":239,"line":265},[237,648,649],{"class":333},"    'https:\u002F\u002Fyour-app.com'",[237,651,652],{"class":476},",\n",[237,654,655,658],{"class":239,"line":271},[237,656,657],{"class":333},"    'https:\u002F\u002Fyour-preview.workers.dev'",[237,659,652],{"class":476},[237,661,662],{"class":239,"line":276},[237,663,664],{"class":476},"  ],\n",[237,666,667],{"class":239,"line":282},[237,668,553],{"class":476},[214,670,671],{},"Without the preview origin, browser auth flows can fail because Better Auth rejects cookie-based requests from unknown origins.",[218,673,675],{"id":674},"nuxthub-deployment","NuxtHub Deployment",[214,677,678,679,451],{},"When deploying with ",[580,680],{"name":681},"nuxthub",[683,684,685,688,691],"ol",{},[368,686,687],{},"Database migrations run automatically during build",[368,689,690],{},"Set environment variables in your deployment platform",[368,692,693,694,697,698,701],{},"Ensure ",[234,695,696],{},"@nuxthub\u002Fcore"," is listed before ",[234,699,700],{},"@nuxtjs\u002Fbetter-auth"," in modules",[226,703,706],{"className":454,"code":704,"filename":705,"language":457,"meta":232,"style":232},"export default defineNuxtConfig({\n  modules: [\n    '@nuxthub\u002Fcore',  \u002F\u002F Must be first\n    '@nuxtjs\u002Fbetter-auth',\n  ],\n})\n","nuxt.config.ts",[234,707,708,719,728,740,747,751],{"__ignoreMap":232},[237,709,710,712,714,717],{"class":239,"line":240},[237,711,465],{"class":464},[237,713,469],{"class":468},[237,715,716],{"class":472}," defineNuxtConfig",[237,718,634],{"class":476},[237,720,721,724,726],{"class":239,"line":246},[237,722,723],{"class":526},"  modules",[237,725,451],{"class":542},[237,727,644],{"class":476},[237,729,730,733,736],{"class":239,"line":252},[237,731,732],{"class":333},"    '@nuxthub\u002Fcore'",[237,734,735],{"class":476},",  ",[237,737,739],{"class":738},"st7cf","\u002F\u002F Must be first\n",[237,741,742,745],{"class":239,"line":259},[237,743,744],{"class":333},"    '@nuxtjs\u002Fbetter-auth'",[237,746,652],{"class":476},[237,748,749],{"class":239,"line":265},[237,750,664],{"class":476},[237,752,753],{"class":239,"line":271},[237,754,553],{"class":476},[756,757,760,762,763,766,767,770,771,774],"callout",{":external":758,"to":759},"true","https:\u002F\u002Fhub.nuxt.com\u002Fdocs\u002Fguides\u002Fci-cd#d1-migrations-in-cicd",[580,761],{"name":681,":unlinked":758}," skips build-time migrations for ",[580,764],{"name":765,":unlinked":758},"cloudflare-d1",". Run them before deployment with ",[234,768,769],{},"wrangler d1 migrations apply"," or a credentialed ",[234,772,773],{},"npx nuxt db migrate"," step.",[218,776,778],{"id":777},"common-issues","Common Issues",[310,780,782],{"id":781},"singular-auth-secret-must-be-at-least-32-characters","\"Singular auth secret must be at least 32 characters\"",[214,784,785,786,341,788,790,791,793],{},"Your ",[234,787,340],{},[234,789,344],{}," is too short. Generate a new one using the command above. This error is raised when auth initializes at runtime. ",[234,792,340],{}," remains the recommended variable.",[310,795,797],{"id":796},"an-auth-secret-is-required-in-production","\"An auth secret is required in production\"",[214,799,800,801,379,803,379,805,384,807,809,810,413],{},"The deployed server runtime could not resolve an auth secret. Set ",[234,802,340],{},[234,804,344],{},[234,806,348],{},[234,808,352],{}," in ",[234,811,610],{},[310,813,815],{"id":814},"siteurl-required-in-production","\"siteUrl required in production\"",[214,817,818,819,821,822,401,824,405,826,828,829,831],{},"Set ",[234,820,396],{}," to your production domain for Cloudflare Workers, custom domains, and hosts without a supported platform URL variable. For platform domains, the module can use ",[234,823,400],{},[234,825,404],{},[234,827,408],{}," (Netlify) when available at runtime. Cloudflare Workers does not supply ",[234,830,404],{},"; configure the URL in the Worker's runtime variables.",[310,833,835],{"id":834},"oauth-redirects-fail","OAuth Redirects Fail",[214,837,838],{},"Ensure your OAuth provider's authorized redirect URIs include:",[363,840,841,846,851],{},[368,842,843],{},[234,844,845],{},"https:\u002F\u002Fyour-app.com\u002Fapi\u002Fauth\u002Fcallback\u002Fgoogle",[368,847,848],{},[234,849,850],{},"https:\u002F\u002Fyour-app.com\u002Fapi\u002Fauth\u002Fcallback\u002Fgithub",[368,852,853],{},"(Replace with your domain and providers)",[214,855,856,857,860,861,864,865,868],{},"Include ",[234,858,859],{},"app.baseURL"," when your Nuxt app runs below a base path. For ",[234,862,863],{},"app.baseURL: '\u002Fapp\u002F'",", the Google callback is ",[234,866,867],{},"https:\u002F\u002Fyour-app.com\u002Fapp\u002Fapi\u002Fauth\u002Fcallback\u002Fgoogle","; other providers use the same prefix.",[218,870,125],{"id":871},"devtools",[214,873,874,875,877,878,881,882,885],{},"DevTools are automatically disabled in production (",[234,876,436],{},"). The ",[234,879,880],{},"\u002Fapi\u002F_better-auth\u002F*"," endpoints and ",[234,883,884],{},"\u002F__better-auth-devtools"," page are not registered.",[887,888,889],"style",{},"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);}html pre.shiki code .siqUp, html code.shiki .siqUp{--shiki-light:#4078F2;--shiki-default:#FE4450;--shiki-dark:#FE4450}html pre.shiki code .s3ZNE, html code.shiki .s3ZNE{--shiki-light:#986801;--shiki-default:#F97E72;--shiki-dark:#F97E72}html pre.shiki code .sPAZv, html code.shiki .sPAZv{--shiki-light:#50A14F;--shiki-default:#FF8B39;--shiki-dark:#FF8B39}html pre.shiki code .sqe1H, html code.shiki .sqe1H{--shiki-light:#A626A4;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .sKg8T, html code.shiki .sKg8T{--shiki-light:#E45649;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .sfT9l, html code.shiki .sfT9l{--shiki-light:#4078F2;--shiki-default:#36F9F6;--shiki-dark:#36F9F6}html pre.shiki code .s17Py, html code.shiki .s17Py{--shiki-light:#383A42;--shiki-default:#BBBBBB;--shiki-dark:#BBBBBB}html pre.shiki code .sgisi, html code.shiki .sgisi{--shiki-light:#383A42;--shiki-light-font-style:inherit;--shiki-default:#FF7EDB;--shiki-default-font-style:italic;--shiki-dark:#FF7EDB;--shiki-dark-font-style:italic}html pre.shiki code .s6Rhl, html code.shiki .s6Rhl{--shiki-light:#986801;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}html pre.shiki code .sQBpM, html code.shiki .sQBpM{--shiki-light:#0184BC;--shiki-default:#FFFFFFEE;--shiki-dark:#FFFFFFEE}html pre.shiki code .sYvLG, html code.shiki .sYvLG{--shiki-light:#E45649;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}html pre.shiki code .sVnqq, html code.shiki .sVnqq{--shiki-light:#0184BC;--shiki-default:#B6B1B1;--shiki-dark:#B6B1B1}html pre.shiki code .st7cf, html code.shiki .st7cf{--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-default:#848BBD;--shiki-default-font-style:italic;--shiki-dark:#848BBD;--shiki-dark-font-style:italic}",{"title":232,"searchDepth":246,"depth":246,"links":891},[892,895,902,903,909],{"id":220,"depth":246,"text":221,"children":893},[894],{"id":312,"depth":252,"text":313},{"id":356,"depth":246,"text":357,"children":896},[897,898,899,900,901],{"id":360,"depth":252,"text":361},{"id":440,"depth":252,"text":56},{"id":556,"depth":252,"text":557},{"id":574,"depth":252,"text":575},{"id":586,"depth":252,"text":587},{"id":674,"depth":246,"text":675},{"id":777,"depth":246,"text":778,"children":904},[905,906,907,908],{"id":781,"depth":252,"text":782},{"id":796,"depth":252,"text":797},{"id":814,"depth":252,"text":815},{"id":834,"depth":252,"text":835},{"id":871,"depth":246,"text":125},"Checklist and best practices for deploying Nuxt Better Auth in production.","md",null,{},{"title":112,"description":910},"u4ixNXXBdeXuAxTqILF5K34xgHWLm7CrFBX3YMbuzyM",[917,919],{"title":108,"path":109,"stem":110,"description":918,"children":-1},"Mock reactive sessions in Nuxt component tests and create real sessions for end-to-end tests.",{"title":121,"path":122,"stem":123,"description":920,"children":-1},"Automatic database setup with schema generation and Drizzle ORM integration.",1791073729064]