[{"data":1,"prerenderedAt":679},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-type-augmentation":152,"-getting-started-type-augmentation-surround":674},[4,42,68,110,131],{"title":5,"path":6,"stem":7,"children":8,"icon":11},"Getting Started","/getting-started","1.getting-started/0.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","/getting-started/installation","1.getting-started/1.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Configuration","/getting-started/configuration","1.getting-started/2.configuration","i-lucide-settings",{"title":23,"path":24,"stem":25,"icon":26},"Client Setup","/getting-started/client-setup","1.getting-started/3.client-setup","i-lucide-monitor",{"title":28,"path":29,"stem":30,"icon":31},"Type Augmentation","/getting-started/type-augmentation","1.getting-started/4.type-augmentation","i-lucide-type",{"title":33,"path":34,"stem":35,"icon":36},"Schema Generation (NuxtHub)","/getting-started/schema-generation","1.getting-started/5.schema-generation","i-lucide-database",{"title":38,"path":39,"stem":40,"icon":41},"How It Works","/getting-started/how-it-works","1.getting-started/6.how-it-works","i-lucide-workflow",{"title":43,"path":44,"stem":45,"children":46,"page":67},"Core Concepts","/core-concepts","2.core-concepts",[47,51,55,59,63],{"title":48,"path":49,"stem":50},"serverAuth()","/core-concepts/server-auth","2.core-concepts/1.server-auth",{"title":52,"path":53,"stem":54},"Sessions","/core-concepts/sessions","2.core-concepts/2.sessions",{"title":56,"path":57,"stem":58},"Route Protection","/core-concepts/route-protection","2.core-concepts/3.route-protection",{"title":60,"path":61,"stem":62},"Auto‑Imports and Aliases","/core-concepts/auto-imports-aliases","2.core-concepts/4.auto-imports-aliases",{"title":64,"path":65,"stem":66},"Security & Caveats","/core-concepts/security-caveats","2.core-concepts/5.security-caveats",false,{"title":69,"path":70,"stem":71,"children":72,"page":67},"Guides","/guides","3.guides",[73,77,81,85,89,94,98,102,106],{"title":74,"path":75,"stem":76},"Role‑Based Access","/guides/role-based-access","3.guides/1.role-based-access",{"title":78,"path":79,"stem":80},"OAuth Providers","/guides/oauth-providers","3.guides/2.oauth-providers",{"title":82,"path":83,"stem":84},"Custom Database","/guides/custom-database","3.guides/3.custom-database",{"title":86,"path":87,"stem":88},"Database-less Mode","/guides/database-less-mode","3.guides/4.database-less-mode",{"title":90,"path":91,"stem":92,"icon":93},"External Auth Backend","/guides/external-auth-backend","3.guides/5.external-auth-backend","i-lucide-server",{"title":95,"path":96,"stem":97},"Migrating from nuxt-auth-utils","/guides/migrate-from-nuxt-auth-utils","3.guides/6.migrate-from-nuxt-auth-utils",{"title":99,"path":100,"stem":101},"Two-Factor Authentication (TOTP + Backup Codes)","/guides/two-factor-auth","3.guides/7.two-factor-auth",{"title":103,"path":104,"stem":105},"Testing","/guides/testing","3.guides/8.testing",{"title":107,"path":108,"stem":109},"Production Deployment","/guides/production-deployment","3.guides/9.production-deployment",{"title":111,"path":112,"stem":113,"children":114,"page":67},"Integrations","/integrations","4.integrations",[115,119,123,127],{"title":116,"path":117,"stem":118},"NuxtHub","/integrations/nuxthub","4.integrations/1.nuxthub",{"title":120,"path":121,"stem":122},"DevTools","/integrations/devtools","4.integrations/2.devtools",{"title":124,"path":125,"stem":126},"Convex","/integrations/convex","4.integrations/3.convex",{"title":128,"path":129,"stem":130},"i18n","/integrations/i18n","4.integrations/4.i18n",{"title":132,"path":133,"stem":134,"children":135,"page":67},"API Reference","/api","5.api",[136,140,144,148],{"title":137,"path":138,"stem":139},"Composables","/api/composables","5.api/1.composables",{"title":141,"path":142,"stem":143},"Server Utilities","/api/server-utils","5.api/2.server-utils",{"title":145,"path":146,"stem":147},"Components","/api/components","5.api/3.components",{"title":149,"path":150,"stem":151},"Types","/api/types","5.api/4.types",{"id":153,"title":28,"body":154,"description":667,"extension":668,"links":669,"meta":670,"navigation":671,"path":29,"seo":672,"stem":30,"__hash__":673},"docs/1.getting-started/4.type-augmentation.md",{"type":155,"value":156,"toc":662},"minimark",[157,233,237,242,245,258,261,267,274,362,369,487,491,494,509,571,587,623,627,632,658],[158,159,160],"code-collapse",{},[161,162,168],"pre",{"className":163,"code":164,"filename":165,"language":166,"meta":167,"style":167},"language-txt shiki shiki-themes one-light synthwave-84 synthwave-84","Set up type augmentation for @onmax/nuxt-better-auth plugins.\n\n- Types are automatically inferred from plugins in `server/auth.config.ts` — no extra config needed\n- For manual augmentation, create `nuxt-better-auth.d.ts` next to `nuxt.config.ts`\n- Import `#nuxt-better-auth` and declare module to extend `AuthUser` or `AuthSession` interfaces\n- If types don't update: restart TS server, run `npx nuxi prepare`, check config for syntax errors\n- Ensure `.d.ts` files are included by TypeScript (`tsconfig.json` include or `/// \u003Creference>`)\n\nRead more: https://better-auth.nuxt.dev/raw/getting-started/type-augmentation.md\nSource: https://github.com/nuxt-modules/better-auth\n","Prompt","txt","",[169,170,171,179,186,192,198,204,210,216,221,227],"code",{"__ignoreMap":167},[172,173,176],"span",{"class":174,"line":175},"line",1,[172,177,178],{},"Set up type augmentation for @onmax/nuxt-better-auth plugins.\n",[172,180,182],{"class":174,"line":181},2,[172,183,185],{"emptyLinePlaceholder":184},true,"\n",[172,187,189],{"class":174,"line":188},3,[172,190,191],{},"- Types are automatically inferred from plugins in `server/auth.config.ts` — no extra config needed\n",[172,193,195],{"class":174,"line":194},4,[172,196,197],{},"- For manual augmentation, create `nuxt-better-auth.d.ts` next to `nuxt.config.ts`\n",[172,199,201],{"class":174,"line":200},5,[172,202,203],{},"- Import `#nuxt-better-auth` and declare module to extend `AuthUser` or `AuthSession` interfaces\n",[172,205,207],{"class":174,"line":206},6,[172,208,209],{},"- If types don't update: restart TS server, run `npx nuxi prepare`, check config for syntax errors\n",[172,211,213],{"class":174,"line":212},7,[172,214,215],{},"- Ensure `.d.ts` files are included by TypeScript (`tsconfig.json` include or `/// \u003Creference>`)\n",[172,217,219],{"class":174,"line":218},8,[172,220,185],{"emptyLinePlaceholder":184},[172,222,224],{"class":174,"line":223},9,[172,225,226],{},"Read more: https://better-auth.nuxt.dev/raw/getting-started/type-augmentation.md\n",[172,228,230],{"class":174,"line":229},10,[172,231,232],{},"Source: https://github.com/nuxt-modules/better-auth\n",[234,235,236],"p",{},"When you add Better Auth plugins that extend the user or session objects, TypeScript needs to know about these new fields. The module automatically infers types from your configuration, but you can also augment types manually.",[238,239,241],"h2",{"id":240},"automatic-type-inference","Automatic Type Inference",[234,243,244],{},"Types are automatically inferred when you:",[246,247,248,255],"ul",{},[249,250,251,252],"li",{},"Add plugins to ",[169,253,254],{},"server/auth.config.ts",[249,256,257],{},"Use the module's type exports",[234,259,260],{},"No additional configuration is needed for most cases.",[234,262,263],{},[264,265,266],"strong",{},"Example:",[234,268,269,270,273],{},"If you add the ",[169,271,272],{},"admin"," plugin:",[161,275,279],{"className":276,"code":277,"filename":254,"language":278,"meta":167,"style":167},"language-ts shiki shiki-themes one-light synthwave-84 synthwave-84","import { admin } from 'better-auth/plugins'\nimport { defineServerAuth } from '@onmax/nuxt-better-auth/config'\n\nexport default defineServerAuth({\n  plugins: [admin()]\n})\n","ts",[169,280,281,304,320,324,340,357],{"__ignoreMap":167},[172,282,283,287,291,294,297,300],{"class":174,"line":175},[172,284,286],{"class":285},"sqe1H","import",[172,288,290],{"class":289},"s17Py"," { ",[172,292,272],{"class":293},"sYvLG",[172,295,296],{"class":289}," } ",[172,298,299],{"class":285},"from",[172,301,303],{"class":302},"sPAZv"," 'better-auth/plugins'\n",[172,305,306,308,310,313,315,317],{"class":174,"line":181},[172,307,286],{"class":285},[172,309,290],{"class":289},[172,311,312],{"class":293},"defineServerAuth",[172,314,296],{"class":289},[172,316,299],{"class":285},[172,318,319],{"class":302}," '@onmax/nuxt-better-auth/config'\n",[172,321,322],{"class":174,"line":188},[172,323,185],{"emptyLinePlaceholder":184},[172,325,326,329,333,337],{"class":174,"line":194},[172,327,328],{"class":285},"export",[172,330,332],{"class":331},"sKg8T"," default",[172,334,336],{"class":335},"sfT9l"," defineServerAuth",[172,338,339],{"class":289},"({\n",[172,341,342,345,349,352,354],{"class":174,"line":200},[172,343,344],{"class":293},"  plugins",[172,346,348],{"class":347},"sVnqq",":",[172,350,351],{"class":289}," [",[172,353,272],{"class":335},[172,355,356],{"class":289},"()]\n",[172,358,359],{"class":174,"line":206},[172,360,361],{"class":289},"})\n",[234,363,364,365,368],{},"You can immediately access the ",[169,366,367],{},"role"," property in your Vue components:",[161,370,374],{"className":371,"code":372,"language":373,"meta":167,"style":167},"language-vue shiki shiki-themes one-light synthwave-84 synthwave-84","\u003Cscript setup lang=\"ts\">\nconst { user } = useUserSession()\n\n// user.value.role is fully typed!\nif (user.value?.role === 'admin') {\n  // ...\n}\n\u003C/script>\n","vue",[169,375,376,403,426,430,436,468,473,478],{"__ignoreMap":167},[172,377,378,382,386,390,393,397,400],{"class":174,"line":175},[172,379,381],{"class":380},"sL9le","\u003C",[172,383,385],{"class":384},"stweg","script",[172,387,389],{"class":388},"s0frj"," setup",[172,391,392],{"class":388}," lang",[172,394,396],{"class":395},"sNM9w","=",[172,398,399],{"class":302},"\"ts\"",[172,401,402],{"class":380},">\n",[172,404,405,408,411,415,417,420,423],{"class":174,"line":181},[172,406,407],{"class":285},"const",[172,409,290],{"class":410},"sEEOt",[172,412,414],{"class":413},"s6Rhl","user",[172,416,296],{"class":410},[172,418,396],{"class":419},"sQBpM",[172,421,422],{"class":335}," useUserSession",[172,424,425],{"class":410},"()\n",[172,427,428],{"class":174,"line":188},[172,429,185],{"emptyLinePlaceholder":184},[172,431,432],{"class":174,"line":194},[172,433,435],{"class":434},"st7cf","// user.value.role is fully typed!\n",[172,437,438,441,444,447,450,453,456,458,462,465],{"class":174,"line":200},[172,439,440],{"class":285},"if",[172,442,443],{"class":410}," (",[172,445,414],{"class":446},"svFNh",[172,448,449],{"class":410},".",[172,451,452],{"class":293},"value",[172,454,455],{"class":410},"?.",[172,457,367],{"class":293},[172,459,461],{"class":460},"sn-Jc"," ===",[172,463,464],{"class":302}," 'admin'",[172,466,467],{"class":410},") {\n",[172,469,470],{"class":174,"line":206},[172,471,472],{"class":434},"  // ...\n",[172,474,475],{"class":174,"line":212},[172,476,477],{"class":410},"}\n",[172,479,480,483,485],{"class":174,"line":218},[172,481,482],{"class":380},"\u003C/",[172,484,385],{"class":384},[172,486,402],{"class":380},[238,488,490],{"id":489},"manual-type-augmentation","Manual Type Augmentation",[234,492,493],{},"Manually extend types when automatic inference doesn't work:",[234,495,496,497,500,501,504,505,508],{},"Create a file next to ",[169,498,499],{},"nuxt.config.ts",", for example ",[169,502,503],{},"nuxt-better-auth.d.ts"," (or ",[169,506,507],{},"nuxt.d.ts","):",[161,510,512],{"className":276,"code":511,"filename":503,"language":278,"meta":167,"style":167},"import '#nuxt-better-auth'\n\ndeclare module '#nuxt-better-auth' {\n  interface AuthUser {\n    customField?: string\n  }\n}\n",[169,513,514,521,525,539,550,562,567],{"__ignoreMap":167},[172,515,516,518],{"class":174,"line":175},[172,517,286],{"class":285},[172,519,520],{"class":302}," '#nuxt-better-auth'\n",[172,522,523],{"class":174,"line":181},[172,524,185],{"emptyLinePlaceholder":184},[172,526,527,530,533,536],{"class":174,"line":188},[172,528,529],{"class":285},"declare",[172,531,532],{"class":285}," module",[172,534,535],{"class":302}," '#nuxt-better-auth'",[172,537,538],{"class":289}," {\n",[172,540,541,544,548],{"class":174,"line":194},[172,542,543],{"class":285},"  interface",[172,545,547],{"class":546},"s8RlJ"," AuthUser",[172,549,538],{"class":289},[172,551,552,555,558],{"class":174,"line":200},[172,553,554],{"class":446},"    customField",[172,556,557],{"class":460},"?:",[172,559,561],{"class":560},"sr8De"," string\n",[172,563,564],{"class":174,"line":206},[172,565,566],{"class":289},"  }\n",[172,568,569],{"class":174,"line":212},[172,570,477],{"class":289},[572,573,574,575,578,579,582,583,586],"note",{},"The ",[169,576,577],{},"#nuxt-better-auth"," virtual module exports ",[169,580,581],{},"AuthUser"," and ",[169,584,585],{},"AuthSession"," interfaces that reflect your current configuration.",[588,589,590,597,620],"tip",{},[234,591,592,593,596],{},"If you prefer putting declaration files under ",[169,594,595],{},"types/",", make sure they are included by TypeScript in your project:",[246,598,599,610],{},[249,600,601,602,605,606,609],{},"Add them to ",[169,603,604],{},"tsconfig.json"," ",[169,607,608],{},"include",", or",[249,611,612,613,615,616,619],{},"Reference them from a root ",[169,614,507],{}," file (e.g. ",[169,617,618],{},"/// \u003Creference path=\"./types/auth.d.ts\" />",").",[234,621,622],{},"Otherwise, Nuxt/TypeScript may not pick them up and your augmentation will have no effect.",[238,624,626],{"id":625},"troubleshooting","Troubleshooting",[234,628,629],{},[264,630,631],{},"Types not updating?",[633,634,635,638,645,651],"ol",{},[249,636,637],{},"Restart your IDE's TypeScript server",[249,639,640,641,644],{},"Run ",[169,642,643],{},"npx nuxi prepare"," to regenerate types",[249,646,647,648,650],{},"Check that your ",[169,649,254],{}," has no syntax errors",[249,652,653,654,657],{},"Ensure your augmentation ",[169,655,656],{},".d.ts"," file is included by TypeScript (see note above)",[659,660,661],"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 .sqe1H, html code.shiki .sqe1H{--shiki-light:#A626A4;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .s17Py, html code.shiki .s17Py{--shiki-light:#383A42;--shiki-default:#BBBBBB;--shiki-dark:#BBBBBB}html pre.shiki code .sYvLG, html code.shiki .sYvLG{--shiki-light:#E45649;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}html pre.shiki code .sPAZv, html code.shiki .sPAZv{--shiki-light:#50A14F;--shiki-default:#FF8B39;--shiki-dark:#FF8B39}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 .sVnqq, html code.shiki .sVnqq{--shiki-light:#0184BC;--shiki-default:#B6B1B1;--shiki-dark:#B6B1B1}html pre.shiki code .s8RlJ, html code.shiki .s8RlJ{--shiki-light:#C18401;--shiki-default:#FE4450;--shiki-dark:#FE4450}html pre.shiki code .svFNh, html code.shiki .svFNh{--shiki-light:#383A42;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}html pre.shiki code .sn-Jc, html code.shiki .sn-Jc{--shiki-light:#0184BC;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .sr8De, html code.shiki .sr8De{--shiki-light:#0184BC;--shiki-default:#FE4450;--shiki-dark:#FE4450}html pre.shiki code .sL9le, html code.shiki .sL9le{--shiki-light:#383A42;--shiki-default:#36F9F6;--shiki-dark:#36F9F6}html pre.shiki code .stweg, html code.shiki .stweg{--shiki-light:#E45649;--shiki-default:#72F1B8;--shiki-dark:#72F1B8}html pre.shiki code .s0frj, html code.shiki .s0frj{--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-default:#FEDE5D;--shiki-default-font-style:italic;--shiki-dark:#FEDE5D;--shiki-dark-font-style:italic}html pre.shiki code .sNM9w, html code.shiki .sNM9w{--shiki-light:#383A42;--shiki-default:#B6B1B1;--shiki-dark:#B6B1B1}html pre.shiki code .sEEOt, html code.shiki .sEEOt{--shiki-light:#383A42;--shiki-default:#FFFFFFEE;--shiki-dark:#FFFFFFEE}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 .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":167,"searchDepth":181,"depth":181,"links":663},[664,665,666],{"id":240,"depth":181,"text":241},{"id":489,"depth":181,"text":490},{"id":625,"depth":181,"text":626},"Learn how the module automatically infers types from your configuration.","md",null,{},{"icon":31},{"title":28,"description":667},"hhfmBzlzfDpkoE4mv6hLvVKGJfOoVYwOy8yCzXuVozc",[675,677],{"title":23,"path":24,"stem":25,"description":676,"icon":26,"children":-1},"Configure the client-side authentication client.",{"title":33,"path":34,"stem":35,"description":678,"icon":36,"children":-1},"Auto-generate Drizzle ORM schemas for Better Auth tables when using NuxtHub.",1774609702652]