[{"data":1,"prerenderedAt":797},["ShallowReactive",2],{"navigation_docs":3,"-guides-production-deployment":152,"-guides-production-deployment-surround":792},[4,42,68,110,131],{"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,81,85,89,94,98,102,106],{"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},"OAuth Providers","\u002Fguides\u002Foauth-providers","3.guides\u002F2.oauth-providers",{"title":82,"path":83,"stem":84},"Custom Database","\u002Fguides\u002Fcustom-database","3.guides\u002F3.custom-database",{"title":86,"path":87,"stem":88},"Database-less Mode","\u002Fguides\u002Fdatabase-less-mode","3.guides\u002F4.database-less-mode",{"title":90,"path":91,"stem":92,"icon":93},"External Auth Backend","\u002Fguides\u002Fexternal-auth-backend","3.guides\u002F5.external-auth-backend","i-lucide-server",{"title":95,"path":96,"stem":97},"Migrating from nuxt-auth-utils","\u002Fguides\u002Fmigrate-from-nuxt-auth-utils","3.guides\u002F6.migrate-from-nuxt-auth-utils",{"title":99,"path":100,"stem":101},"Two-Factor Authentication (TOTP + Backup Codes)","\u002Fguides\u002Ftwo-factor-auth","3.guides\u002F7.two-factor-auth",{"title":103,"path":104,"stem":105},"Testing","\u002Fguides\u002Ftesting","3.guides\u002F8.testing",{"title":107,"path":108,"stem":109},"Production Deployment","\u002Fguides\u002Fproduction-deployment","3.guides\u002F9.production-deployment",{"title":111,"path":112,"stem":113,"children":114,"page":67},"Integrations","\u002Fintegrations","4.integrations",[115,119,123,127],{"title":116,"path":117,"stem":118},"NuxtHub","\u002Fintegrations\u002Fnuxthub","4.integrations\u002F1.nuxthub",{"title":120,"path":121,"stem":122},"DevTools","\u002Fintegrations\u002Fdevtools","4.integrations\u002F2.devtools",{"title":124,"path":125,"stem":126},"Convex","\u002Fintegrations\u002Fconvex","4.integrations\u002F3.convex",{"title":128,"path":129,"stem":130},"i18n","\u002Fintegrations\u002Fi18n","4.integrations\u002F4.i18n",{"title":132,"path":133,"stem":134,"children":135,"page":67},"API Reference","\u002Fapi","5.api",[136,140,144,148],{"title":137,"path":138,"stem":139},"Composables","\u002Fapi\u002Fcomposables","5.api\u002F1.composables",{"title":141,"path":142,"stem":143},"Server Utilities","\u002Fapi\u002Fserver-utils","5.api\u002F2.server-utils",{"title":145,"path":146,"stem":147},"Components","\u002Fapi\u002Fcomponents","5.api\u002F3.components",{"title":149,"path":150,"stem":151},"Types","\u002Fapi\u002Ftypes","5.api\u002F4.types",{"id":153,"title":107,"body":154,"description":786,"extension":787,"links":788,"meta":789,"navigation":199,"path":108,"seo":790,"stem":109,"__hash__":791},"docs\u002F3.guides\u002F9.production-deployment.md",{"type":155,"value":156,"toc":766},"minimark",[157,161,166,169,253,258,279,298,302,306,366,369,380,482,486,497,500,504,507,511,518,592,595,599,602,622,675,679,683,694,698,713,717,723,727,730,745,748,762],[158,159,160],"p",{},"Use this guide when your auth flow works locally and you are preparing to ship it to a real environment.",[162,163,165],"h2",{"id":164},"environment-variables","Environment Variables",[158,167,168],{},"Production requires a singular or versioned auth secret at runtime:",[170,171,177],"pre",{"className":172,"code":173,"filename":174,"language":175,"meta":176,"style":176},"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# Optional: Auto-detected on Vercel\u002FCloudflare\u002FNetlify\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","",[178,179,180,188,194,201,207,213,218,224,230,235,241,247],"code",{"__ignoreMap":176},[181,182,185],"span",{"class":183,"line":184},"line",1,[181,186,187],{},"# Required: 32+ character secret for session encryption\n",[181,189,191],{"class":183,"line":190},2,[181,192,193],{},"NUXT_BETTER_AUTH_SECRET=\"your-32-character-secret-here-minimum\"\n",[181,195,197],{"class":183,"line":196},3,[181,198,200],{"emptyLinePlaceholder":199},true,"\n",[181,202,204],{"class":183,"line":203},4,[181,205,206],{},"# Alternative for non-destructive rotation\n",[181,208,210],{"class":183,"line":209},5,[181,211,212],{},"# BETTER_AUTH_SECRETS=\"2:current-secret-must-be-at-least-32-characters,1:previous-secret-must-be-at-least-32-characters\"\n",[181,214,216],{"class":183,"line":215},6,[181,217,200],{"emptyLinePlaceholder":199},[181,219,221],{"class":183,"line":220},7,[181,222,223],{},"# Optional: Auto-detected on Vercel\u002FCloudflare\u002FNetlify\n",[181,225,227],{"class":183,"line":226},8,[181,228,229],{},"NUXT_PUBLIC_SITE_URL=\"https:\u002F\u002Fyour-app.com\"\n",[181,231,233],{"class":183,"line":232},9,[181,234,200],{"emptyLinePlaceholder":199},[181,236,238],{"class":183,"line":237},10,[181,239,240],{},"# OAuth provider credentials (if using)\n",[181,242,244],{"class":183,"line":243},11,[181,245,246],{},"GOOGLE_CLIENT_ID=\"...\"\n",[181,248,250],{"class":183,"line":249},12,[181,251,252],{},"GOOGLE_CLIENT_SECRET=\"...\"\n",[254,255,257],"h3",{"id":256},"generate-a-secure-secret","Generate a Secure Secret",[170,259,263],{"className":260,"code":261,"language":262,"meta":176,"style":176},"language-bash shiki shiki-themes one-light synthwave-84 synthwave-84","node -e \"console.log(require('crypto').randomBytes(32).toString('hex'))\"\n","bash",[178,264,265],{"__ignoreMap":176},[181,266,267,271,275],{"class":183,"line":184},[181,268,270],{"class":269},"siqUp","node",[181,272,274],{"class":273},"s3ZNE"," -e",[181,276,278],{"class":277},"sPAZv"," \"console.log(require('crypto').randomBytes(32).toString('hex'))\"\n",[158,280,281,282,285,286,289,290,293,294,297],{},"Singular secrets must be at least 32 characters. Shorter ",[178,283,284],{},"NUXT_BETTER_AUTH_SECRET"," or ",[178,287,288],{},"BETTER_AUTH_SECRET"," values cause auth initialization to throw at runtime. Better Auth validates versioned ",[178,291,292],{},"BETTER_AUTH_SECRETS","\u002F",[178,295,296],{},"secrets"," entries and warns when the current key is too short.",[162,299,301],{"id":300},"security-checklist","Security Checklist",[254,303,305],{"id":304},"before-deploying","Before Deploying",[307,308,311,333,342,351,357],"ul",{"className":309},[310],"contains-task-list",[312,313,316,320,321,323,324,323,326,328,329,332],"li",{"className":314},[315],"task-list-item",[317,318],"input",{"disabled":199,"type":319},"checkbox"," ",[178,322,284],{},", ",[178,325,288],{},[178,327,292],{},", or ",[178,330,331],{},"defineServerAuth({ secrets })"," is configured",[312,334,336,320,338,341],{"className":335},[315],[317,337],{"disabled":199,"type":319},[178,339,340],{},"NUXT_PUBLIC_SITE_URL"," set (or using Vercel\u002FCloudflare\u002FNetlify auto-detection)",[312,343,345,320,347,350],{"className":344},[315],[317,346],{"disabled":199,"type":319},[178,348,349],{},"trustedOrigins"," includes every active frontend origin (primary domain and preview domain, if used)",[312,352,354,356],{"className":353},[315],[317,355],{"disabled":199,"type":319}," OAuth redirect URIs configured for production domain",[312,358,360,320,362,365],{"className":359},[315],[317,361],{"disabled":199,"type":319},[178,363,364],{},"NODE_ENV=production"," is set (disables devtools)",[254,367,56],{"id":368},"route-protection",[158,370,371,372,375,376,379],{},"Route rules and ",[178,373,374],{},"definePageMeta"," are for UX (redirects). Always protect API endpoints with ",[178,377,378],{},"requireUserSession",":",[170,381,386],{"className":382,"code":383,"filename":384,"language":385,"meta":176,"style":176},"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",[178,387,388,425,458,477],{"__ignoreMap":176},[181,389,390,394,398,402,406,409,412,416,419,422],{"class":183,"line":184},[181,391,393],{"class":392},"sqe1H","export",[181,395,397],{"class":396},"sKg8T"," default",[181,399,401],{"class":400},"sfT9l"," defineEventHandler",[181,403,405],{"class":404},"s17Py","(",[181,407,408],{"class":392},"async",[181,410,411],{"class":404}," (",[181,413,415],{"class":414},"sgisi","event",[181,417,418],{"class":404},") ",[181,420,421],{"class":392},"=>",[181,423,424],{"class":404}," {\n",[181,426,427,430,433,437,440,444,447,450,452,455],{"class":183,"line":190},[181,428,429],{"class":392},"  const",[181,431,432],{"class":404}," { ",[181,434,436],{"class":435},"s6Rhl","user",[181,438,439],{"class":404}," } ",[181,441,443],{"class":442},"sQBpM","=",[181,445,446],{"class":392}," await",[181,448,449],{"class":400}," requireUserSession",[181,451,405],{"class":404},[181,453,415],{"class":454},"sYvLG",[181,456,457],{"class":404},")\n",[181,459,460,463,465,468,471,474],{"class":183,"line":196},[181,461,462],{"class":392},"  return",[181,464,432],{"class":404},[181,466,467],{"class":454},"data",[181,469,379],{"class":470},"sVnqq",[181,472,473],{"class":277}," 'protected'",[181,475,476],{"class":404}," }\n",[181,478,479],{"class":183,"line":203},[181,480,481],{"class":404},"})\n",[254,483,485],{"id":484},"rate-limiting","Rate Limiting",[158,487,488,489,496],{},"Better Auth enables its ",[490,491,495],"a",{"href":492,"rel":493},"https:\u002F\u002Fwww.better-auth.com\u002Fdocs\u002Fconcepts\u002Frate-limit",[494],"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.",[158,498,499],{},"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.",[254,501,503],{"id":502},"separate-build-and-runtime-environments","Separate Build and Runtime Environments",[158,505,506],{},"Some platforms, including 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.",[254,508,510],{"id":509},"trusted-origins-for-preview-environments","Trusted Origins for Preview Environments",[158,512,513,514,517],{},"If your workflow uses preview URLs (for example, ",[178,515,516],{},"*.workers.dev","), include those origins in your Better Auth server config.",[170,519,522],{"className":382,"code":520,"filename":521,"language":385,"meta":176,"style":176},"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",[178,523,524,542,546,558,568,576,583,588],{"__ignoreMap":176},[181,525,526,529,531,534,536,539],{"class":183,"line":184},[181,527,528],{"class":392},"import",[181,530,432],{"class":404},[181,532,533],{"class":454},"defineServerAuth",[181,535,439],{"class":404},[181,537,538],{"class":392},"from",[181,540,541],{"class":277}," '@nuxtjs\u002Fbetter-auth\u002Fconfig'\n",[181,543,544],{"class":183,"line":190},[181,545,200],{"emptyLinePlaceholder":199},[181,547,548,550,552,555],{"class":183,"line":196},[181,549,393],{"class":392},[181,551,397],{"class":396},[181,553,554],{"class":400}," defineServerAuth",[181,556,557],{"class":404},"({\n",[181,559,560,563,565],{"class":183,"line":203},[181,561,562],{"class":454},"  trustedOrigins",[181,564,379],{"class":470},[181,566,567],{"class":404}," [\n",[181,569,570,573],{"class":183,"line":209},[181,571,572],{"class":277},"    'https:\u002F\u002Fyour-app.com'",[181,574,575],{"class":404},",\n",[181,577,578,581],{"class":183,"line":215},[181,579,580],{"class":277},"    'https:\u002F\u002Fyour-preview.workers.dev'",[181,582,575],{"class":404},[181,584,585],{"class":183,"line":220},[181,586,587],{"class":404},"  ],\n",[181,589,590],{"class":183,"line":226},[181,591,481],{"class":404},[158,593,594],{},"Without the preview origin, browser auth flows can fail because Better Auth rejects cookie-based requests from unknown origins.",[162,596,598],{"id":597},"nuxthub-deployment","NuxtHub Deployment",[158,600,601],{},"When deploying with NuxtHub:",[603,604,605,608,611],"ol",{},[312,606,607],{},"Database migrations run automatically during build",[312,609,610],{},"Set environment variables in your deployment platform",[312,612,613,614,617,618,621],{},"Ensure ",[178,615,616],{},"@nuxthub\u002Fcore"," is listed before ",[178,619,620],{},"@nuxtjs\u002Fbetter-auth"," in modules",[170,623,626],{"className":382,"code":624,"filename":625,"language":385,"meta":176,"style":176},"export default defineNuxtConfig({\n  modules: [\n    '@nuxthub\u002Fcore',  \u002F\u002F Must be first\n    '@nuxtjs\u002Fbetter-auth',\n  ],\n})\n","nuxt.config.ts",[178,627,628,639,648,660,667,671],{"__ignoreMap":176},[181,629,630,632,634,637],{"class":183,"line":184},[181,631,393],{"class":392},[181,633,397],{"class":396},[181,635,636],{"class":400}," defineNuxtConfig",[181,638,557],{"class":404},[181,640,641,644,646],{"class":183,"line":190},[181,642,643],{"class":454},"  modules",[181,645,379],{"class":470},[181,647,567],{"class":404},[181,649,650,653,656],{"class":183,"line":196},[181,651,652],{"class":277},"    '@nuxthub\u002Fcore'",[181,654,655],{"class":404},",  ",[181,657,659],{"class":658},"st7cf","\u002F\u002F Must be first\n",[181,661,662,665],{"class":183,"line":203},[181,663,664],{"class":277},"    '@nuxtjs\u002Fbetter-auth'",[181,666,575],{"class":404},[181,668,669],{"class":183,"line":209},[181,670,587],{"class":404},[181,672,673],{"class":183,"line":215},[181,674,481],{"class":404},[162,676,678],{"id":677},"common-issues","Common Issues",[254,680,682],{"id":681},"singular-auth-secret-must-be-at-least-32-characters","\"Singular auth secret must be at least 32 characters\"",[158,684,685,686,285,688,690,691,693],{},"Your ",[178,687,284],{},[178,689,288],{}," is too short. Generate a new one using the command above. This error is raised when auth initializes at runtime. ",[178,692,284],{}," remains the recommended variable.",[254,695,697],{"id":696},"an-auth-secret-is-required-in-production","\"An auth secret is required in production\"",[158,699,700,701,323,703,323,705,328,707,709,710,712],{},"The deployed server runtime could not resolve an auth secret. Set ",[178,702,284],{},[178,704,288],{},[178,706,292],{},[178,708,296],{}," in ",[178,711,533],{},".",[254,714,716],{"id":715},"siteurl-required-in-production","\"siteUrl required in production\"",[158,718,719,720,722],{},"The module auto-detects URLs on Vercel, Cloudflare Pages, and Netlify. For other platforms, set ",[178,721,340],{}," to your production domain.",[254,724,726],{"id":725},"oauth-redirects-fail","OAuth Redirects Fail",[158,728,729],{},"Ensure your OAuth provider's authorized redirect URIs include:",[307,731,732,737,742],{},[312,733,734],{},[178,735,736],{},"https:\u002F\u002Fyour-app.com\u002Fapi\u002Fauth\u002Fcallback\u002Fgoogle",[312,738,739],{},[178,740,741],{},"https:\u002F\u002Fyour-app.com\u002Fapi\u002Fauth\u002Fcallback\u002Fgithub",[312,743,744],{},"(Replace with your domain and providers)",[162,746,120],{"id":747},"devtools",[158,749,750,751,753,754,757,758,761],{},"DevTools are automatically disabled in production (",[178,752,364],{},"). The ",[178,755,756],{},"\u002Fapi\u002F_better-auth\u002F*"," endpoints and ",[178,759,760],{},"\u002F__better-auth-devtools"," page are not registered.",[763,764,765],"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":176,"searchDepth":190,"depth":190,"links":767},[768,771,778,779,785],{"id":164,"depth":190,"text":165,"children":769},[770],{"id":256,"depth":196,"text":257},{"id":300,"depth":190,"text":301,"children":772},[773,774,775,776,777],{"id":304,"depth":196,"text":305},{"id":368,"depth":196,"text":56},{"id":484,"depth":196,"text":485},{"id":502,"depth":196,"text":503},{"id":509,"depth":196,"text":510},{"id":597,"depth":190,"text":598},{"id":677,"depth":190,"text":678,"children":780},[781,782,783,784],{"id":681,"depth":196,"text":682},{"id":696,"depth":196,"text":697},{"id":715,"depth":196,"text":716},{"id":725,"depth":196,"text":726},{"id":747,"depth":190,"text":120},"Checklist and best practices for deploying Nuxt Better Auth in production.","md",null,{},{"title":107,"description":786},"vc2AKbPO7wFjZ_84pvfuqlhE3ixMwSJOarZVxsAxFg8",[793,795],{"title":103,"path":104,"stem":105,"description":794,"children":-1},"Mock authentication in tests.",{"title":116,"path":117,"stem":118,"description":796,"children":-1},"Automatic database setup with schema generation and Drizzle ORM integration.",1787743558584]