[{"data":1,"prerenderedAt":806},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-client-setup":152,"-getting-started-client-setup-surround":801},[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":23,"body":154,"description":794,"extension":795,"links":796,"meta":797,"navigation":798,"path":24,"seo":799,"stem":25,"__hash__":800},"docs/1.getting-started/3.client-setup.md",{"type":155,"value":156,"toc":785},"minimark",[157,216,220,225,236,242,343,351,355,362,445,449,454,530,535,539,545,743,747,750,781],[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 the client auth config for @onmax/nuxt-better-auth.\n\n- Create `app/auth.config.ts` with a default export using `defineClientAuth` from `@onmax/nuxt-better-auth/config`\n- Object syntax: `defineClientAuth({})` or function syntax: `defineClientAuth(({ siteUrl }) => ({}))`\n- Add client plugin equivalents for every server plugin (e.g. `adminClient()` from `better-auth/client/plugins`)\n- The module calls the factory with the correct `baseURL` at runtime\n- `useUserSession()` is auto-imported and provides `user`, `session`, `loggedIn`, `ready`, `signIn`, `signUp`, `signOut`\n","Prompt","txt","",[169,170,171,179,186,192,198,204,210],"code",{"__ignoreMap":167},[172,173,176],"span",{"class":174,"line":175},"line",1,[172,177,178],{},"Set up the client auth config for @onmax/nuxt-better-auth.\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],{},"- Create `app/auth.config.ts` with a default export using `defineClientAuth` from `@onmax/nuxt-better-auth/config`\n",[172,193,195],{"class":174,"line":194},4,[172,196,197],{},"- Object syntax: `defineClientAuth({})` or function syntax: `defineClientAuth(({ siteUrl }) => ({}))`\n",[172,199,201],{"class":174,"line":200},5,[172,202,203],{},"- Add client plugin equivalents for every server plugin (e.g. `adminClient()` from `better-auth/client/plugins`)\n",[172,205,207],{"class":174,"line":206},6,[172,208,209],{},"- The module calls the factory with the correct `baseURL` at runtime\n",[172,211,213],{"class":174,"line":212},7,[172,214,215],{},"- `useUserSession()` is auto-imported and provides `user`, `session`, `loggedIn`, `ready`, `signIn`, `signUp`, `signOut`\n",[217,218,219],"p",{},"Use this page when the server config exists and you want to wire the Better Auth client into your Nuxt app.",[221,222,224],"h2",{"id":223},"create-the-client-config","Create the Client Config",[217,226,227,228,231,232,235],{},"Create ",[169,229,230],{},"app/auth.config.ts"," with a default export using ",[169,233,234],{},"defineClientAuth",".",[217,237,238,239,241],{},"The ",[169,240,234],{}," helper supports two syntaxes: an object for simple configurations, or a function when you need access to context like the resolved site URL.",[161,243,247],{"className":244,"code":245,"filename":230,"language":246,"meta":167,"style":167},"language-ts shiki shiki-themes one-light synthwave-84 synthwave-84","import { defineClientAuth } from '@onmax/nuxt-better-auth/config'\n\n// Object syntax (simplest)\nexport default defineClientAuth({})\n\n// Function syntax (access context)\nexport default defineClientAuth(({ siteUrl }) => ({\n  // siteUrl contains the resolved base URL\n}))\n","ts",[169,248,249,272,276,282,298,302,307,331,337],{"__ignoreMap":167},[172,250,251,255,259,262,265,268],{"class":174,"line":175},[172,252,254],{"class":253},"sqe1H","import",[172,256,258],{"class":257},"s17Py"," { ",[172,260,234],{"class":261},"sYvLG",[172,263,264],{"class":257}," } ",[172,266,267],{"class":253},"from",[172,269,271],{"class":270},"sPAZv"," '@onmax/nuxt-better-auth/config'\n",[172,273,274],{"class":174,"line":181},[172,275,185],{"emptyLinePlaceholder":184},[172,277,278],{"class":174,"line":188},[172,279,281],{"class":280},"st7cf","// Object syntax (simplest)\n",[172,283,284,287,291,295],{"class":174,"line":194},[172,285,286],{"class":253},"export",[172,288,290],{"class":289},"sKg8T"," default",[172,292,294],{"class":293},"sfT9l"," defineClientAuth",[172,296,297],{"class":257},"({})\n",[172,299,300],{"class":174,"line":200},[172,301,185],{"emptyLinePlaceholder":184},[172,303,304],{"class":174,"line":206},[172,305,306],{"class":280},"// Function syntax (access context)\n",[172,308,309,311,313,315,318,322,325,328],{"class":174,"line":212},[172,310,286],{"class":253},[172,312,290],{"class":289},[172,314,294],{"class":293},[172,316,317],{"class":257},"(({ ",[172,319,321],{"class":320},"sgisi","siteUrl",[172,323,324],{"class":257}," }) ",[172,326,327],{"class":253},"=>",[172,329,330],{"class":257}," ({\n",[172,332,334],{"class":174,"line":333},8,[172,335,336],{"class":280},"  // siteUrl contains the resolved base URL\n",[172,338,340],{"class":174,"line":339},9,[172,341,342],{"class":257},"}))\n",[344,345,346,347,350],"note",{},"The helper creates a factory function that the module calls with the correct ",[169,348,349],{},"baseURL"," at runtime.",[221,352,354],{"id":353},"using-plugins","Using Plugins",[217,356,357,358,361],{},"If you added a plugin in your server config (",[169,359,360],{},"server/auth.config.ts","), make sure to add its client equivalent here.",[161,363,365],{"className":244,"code":364,"filename":230,"language":246,"meta":167,"style":167},"import { defineClientAuth } from '@onmax/nuxt-better-auth/config'\nimport { adminClient } from 'better-auth/client/plugins'\n\nexport default defineClientAuth({\n  plugins: [\n    adminClient() // Must match the server plugin\n  ]\n})\n",[169,366,367,381,397,401,412,424,435,440],{"__ignoreMap":167},[172,368,369,371,373,375,377,379],{"class":174,"line":175},[172,370,254],{"class":253},[172,372,258],{"class":257},[172,374,234],{"class":261},[172,376,264],{"class":257},[172,378,267],{"class":253},[172,380,271],{"class":270},[172,382,383,385,387,390,392,394],{"class":174,"line":181},[172,384,254],{"class":253},[172,386,258],{"class":257},[172,388,389],{"class":261},"adminClient",[172,391,264],{"class":257},[172,393,267],{"class":253},[172,395,396],{"class":270}," 'better-auth/client/plugins'\n",[172,398,399],{"class":174,"line":188},[172,400,185],{"emptyLinePlaceholder":184},[172,402,403,405,407,409],{"class":174,"line":194},[172,404,286],{"class":253},[172,406,290],{"class":289},[172,408,294],{"class":293},[172,410,411],{"class":257},"({\n",[172,413,414,417,421],{"class":174,"line":200},[172,415,416],{"class":261},"  plugins",[172,418,420],{"class":419},"sVnqq",":",[172,422,423],{"class":257}," [\n",[172,425,426,429,432],{"class":174,"line":206},[172,427,428],{"class":293},"    adminClient",[172,430,431],{"class":257},"() ",[172,433,434],{"class":280},"// Must match the server plugin\n",[172,436,437],{"class":174,"line":212},[172,438,439],{"class":257},"  ]\n",[172,441,442],{"class":174,"line":333},[172,443,444],{"class":257},"})\n",[221,446,448],{"id":447},"common-plugin-combinations","Common Plugin Combinations",[450,451,453],"h3",{"id":452},"admin-two-factor","Admin + Two Factor",[161,455,457],{"className":244,"code":456,"filename":230,"language":246,"meta":167,"style":167},"import { defineClientAuth } from '@onmax/nuxt-better-auth/config'\nimport { adminClient, twoFactorClient } from 'better-auth/client/plugins'\n\nexport default defineClientAuth({\n  plugins: [adminClient(), twoFactorClient()]\n})\n",[169,458,459,473,493,497,507,526],{"__ignoreMap":167},[172,460,461,463,465,467,469,471],{"class":174,"line":175},[172,462,254],{"class":253},[172,464,258],{"class":257},[172,466,234],{"class":261},[172,468,264],{"class":257},[172,470,267],{"class":253},[172,472,271],{"class":270},[172,474,475,477,479,481,484,487,489,491],{"class":174,"line":181},[172,476,254],{"class":253},[172,478,258],{"class":257},[172,480,389],{"class":261},[172,482,483],{"class":257},", ",[172,485,486],{"class":261},"twoFactorClient",[172,488,264],{"class":257},[172,490,267],{"class":253},[172,492,396],{"class":270},[172,494,495],{"class":174,"line":188},[172,496,185],{"emptyLinePlaceholder":184},[172,498,499,501,503,505],{"class":174,"line":194},[172,500,286],{"class":253},[172,502,290],{"class":289},[172,504,294],{"class":293},[172,506,411],{"class":257},[172,508,509,511,513,516,518,521,523],{"class":174,"line":200},[172,510,416],{"class":261},[172,512,420],{"class":419},[172,514,515],{"class":257}," [",[172,517,389],{"class":293},[172,519,520],{"class":257},"(), ",[172,522,486],{"class":293},[172,524,525],{"class":257},"()]\n",[172,527,528],{"class":174,"line":206},[172,529,444],{"class":257},[531,532],"read-more",{"title":533,"to":534},"All Better Auth plugins","https://www.better-auth.com/docs/plugins",[221,536,538],{"id":537},"use-the-client-in-your-app","Use the client in your app",[217,540,541,544],{},[169,542,543],{},"useUserSession()"," is auto-imported in pages and components.",[161,546,551],{"className":547,"code":548,"filename":549,"language":550,"meta":167,"style":167},"language-vue shiki shiki-themes one-light synthwave-84 synthwave-84","\u003Cscript setup lang=\"ts\">\ndefinePageMeta({ auth: 'guest' })\n\nconst { signIn } = useUserSession()\n\nasync function login(email: string, password: string) {\n  await signIn.email(\n    { email, password },\n    { onSuccess: () => navigateTo('/app') },\n  )\n}\n\u003C/script>\n","pages/login.vue","vue",[169,552,553,580,600,604,626,630,666,682,696,721,727,733],{"__ignoreMap":167},[172,554,555,559,563,567,570,574,577],{"class":174,"line":175},[172,556,558],{"class":557},"sL9le","\u003C",[172,560,562],{"class":561},"stweg","script",[172,564,566],{"class":565},"s0frj"," setup",[172,568,569],{"class":565}," lang",[172,571,573],{"class":572},"sNM9w","=",[172,575,576],{"class":270},"\"ts\"",[172,578,579],{"class":557},">\n",[172,581,582,585,589,592,594,597],{"class":174,"line":181},[172,583,584],{"class":293},"definePageMeta",[172,586,588],{"class":587},"sEEOt","({ ",[172,590,591],{"class":261},"auth",[172,593,420],{"class":419},[172,595,596],{"class":270}," 'guest'",[172,598,599],{"class":587}," })\n",[172,601,602],{"class":174,"line":188},[172,603,185],{"emptyLinePlaceholder":184},[172,605,606,609,611,615,617,620,623],{"class":174,"line":194},[172,607,608],{"class":253},"const",[172,610,258],{"class":587},[172,612,614],{"class":613},"s6Rhl","signIn",[172,616,264],{"class":587},[172,618,573],{"class":619},"sQBpM",[172,621,622],{"class":293}," useUserSession",[172,624,625],{"class":587},"()\n",[172,627,628],{"class":174,"line":200},[172,629,185],{"emptyLinePlaceholder":184},[172,631,632,635,638,641,644,647,650,654,656,659,661,663],{"class":174,"line":206},[172,633,634],{"class":253},"async",[172,636,637],{"class":253}," function",[172,639,640],{"class":293}," login",[172,642,643],{"class":587},"(",[172,645,646],{"class":320},"email",[172,648,420],{"class":649},"sn-Jc",[172,651,653],{"class":652},"sr8De"," string",[172,655,483],{"class":587},[172,657,658],{"class":320},"password",[172,660,420],{"class":649},[172,662,653],{"class":652},[172,664,665],{"class":587},") {\n",[172,667,668,671,675,677,679],{"class":174,"line":212},[172,669,670],{"class":253},"  await",[172,672,674],{"class":673},"svFNh"," signIn",[172,676,235],{"class":587},[172,678,646],{"class":293},[172,680,681],{"class":587},"(\n",[172,683,684,687,689,691,693],{"class":174,"line":333},[172,685,686],{"class":587},"    { ",[172,688,646],{"class":673},[172,690,483],{"class":587},[172,692,658],{"class":673},[172,694,695],{"class":587}," },\n",[172,697,698,700,703,705,708,710,713,715,718],{"class":174,"line":339},[172,699,686],{"class":587},[172,701,702],{"class":293},"onSuccess",[172,704,420],{"class":419},[172,706,707],{"class":587}," () ",[172,709,327],{"class":253},[172,711,712],{"class":293}," navigateTo",[172,714,643],{"class":587},[172,716,717],{"class":270},"'/app'",[172,719,720],{"class":587},") },\n",[172,722,724],{"class":174,"line":723},10,[172,725,726],{"class":587},"  )\n",[172,728,730],{"class":174,"line":729},11,[172,731,732],{"class":587},"}\n",[172,734,736,739,741],{"class":174,"line":735},12,[172,737,738],{"class":557},"\u003C/",[172,740,562],{"class":561},[172,742,579],{"class":557},[221,744,746],{"id":745},"verify-the-result","Verify the result",[217,748,749],{},"Confirm all of the following:",[751,752,753,759,765,768],"ul",{},[754,755,756,758],"li",{},[169,757,543],{}," is available without a manual import",[754,760,761,764],{},[169,762,763],{},"client"," is available on the browser after hydration",[754,766,767],{},"client plugins are registered on both server and client when required by Better Auth",[754,769,770,771,483,774,777,778],{},"sign-in and sign-out update ",[169,772,773],{},"user",[169,775,776],{},"session",", and ",[169,779,780],{},"loggedIn",[782,783,784],"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 .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}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 .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 .sVnqq, html code.shiki .sVnqq{--shiki-light:#0184BC;--shiki-default:#B6B1B1;--shiki-dark:#B6B1B1}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 .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 .svFNh, html code.shiki .svFNh{--shiki-light:#383A42;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}",{"title":167,"searchDepth":181,"depth":181,"links":786},[787,788,789,792,793],{"id":223,"depth":181,"text":224},{"id":353,"depth":181,"text":354},{"id":447,"depth":181,"text":448,"children":790},[791],{"id":452,"depth":188,"text":453},{"id":537,"depth":181,"text":538},{"id":745,"depth":181,"text":746},"Configure the client-side authentication client.","md",null,{},{"icon":26},{"title":23,"description":794},"OYKbRpULii14i0F4LYtqUaxEbk0e2e-nx3kXudHf7sg",[802,804],{"title":18,"path":19,"stem":20,"description":803,"icon":21,"children":-1},"Configure the module options and your Better Auth server instance.",{"title":28,"path":29,"stem":30,"description":805,"icon":31,"children":-1},"Learn how the module automatically infers types from your configuration.",1777450760655]