[{"data":1,"prerenderedAt":3426},["ShallowReactive",2],{"navigation_docs":3,"-api-composables":208,"-api-composables-surround":3421},[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":142,"body":210,"description":3415,"extension":3416,"links":3417,"meta":3418,"navigation":372,"path":143,"seo":3419,"stem":144,"__hash__":3420},"docs\u002F5.api\u002F1.composables.md",{"type":211,"value":212,"toc":3389},"minimark",[213,217,221,233,266,271,278,436,440,529,533,536,574,603,656,660,666,671,701,704,740,753,759,811,821,941,944,951,989,993,1001,1112,1121,1125,1134,1157,1191,1199,1204,1207,1221,1234,1239,1278,1284,1292,1311,1322,1328,1331,1345,1349,1392,1397,1400,1425,1448,1454,1468,1472,1476,1479,1496,1506,1622,1632,1700,1703,1707,1710,1776,1783,1786,1811,1873,1877,1880,2051,2061,2087,2091,2101,2201,2207,2211,2217,2335,2338,2389,2392,2402,2588,2595,2627,2642,2657,2660,2780,2783,2803,2813,2817,2833,2847,2853,3004,3007,3016,3144,3160,3163,3167,3178,3325,3335,3355,3365,3369,3385],[214,215,216],"p",{},"Use this page when you need exact behavior for the client-side composables exposed by the module.",[218,219,220],"note",{},"These composables are auto-imported in Vue files. No import statement is needed in pages, components, plugins, middleware, or stores inside your Nuxt app.",[214,222,223,224,228,229,232],{},"Only the public composables exported by ",[225,226,227],"code",{},"@nuxtjs\u002Fbetter-auth\u002Fcomposables"," are registered as auto-imports. The deprecated ",[225,230,231],{},"useUserSessionState"," alias remains available.",[214,234,235,236,239,240,239,243,246,247,250,251,254,255,258,259,262,263,265],{},"Internal helpers ",[225,237,238],{},"getAuthRuntimeFlags",", ",[225,241,242],{},"useRawAuthClient",[225,244,245],{},"useAuthActionNamespaces",", and ",[225,248,249],{},"matchesUser"," are no longer auto-imported. Use ",[225,252,253],{},"useAuthClient"," for the configured client and ",[225,256,257],{},"useSignIn"," or ",[225,260,261],{},"useSignUp"," for authentication actions. Applications that used ",[225,264,249],{}," should keep their matching logic in application code.",[267,268,270],"h2",{"id":269},"quick-start","Quick Start",[214,272,273,274,277],{},"Use ",[225,275,276],{},"useUserSession()"," in pages and components to access the current session and session lifecycle actions.",[279,280,286],"pre",{"className":281,"code":282,"filename":283,"language":284,"meta":285,"style":285},"language-vue shiki shiki-themes one-light synthwave-84 synthwave-84","\u003Cscript setup lang=\"ts\">\nconst { user, loggedIn, signOut } = useUserSession()\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cbutton v-if=\"loggedIn\" @click=\"signOut()\">\n    Sign out {{ user?.email }}\n  \u003C\u002Fbutton>\n\u003C\u002Ftemplate>\n","pages\u002Fapp.vue","vue","",[225,287,288,319,357,367,374,384,411,417,427],{"__ignoreMap":285},[289,290,293,297,301,305,308,312,316],"span",{"class":291,"line":292},"line",1,[289,294,296],{"class":295},"sL9le","\u003C",[289,298,300],{"class":299},"stweg","script",[289,302,304],{"class":303},"s0frj"," setup",[289,306,307],{"class":303}," lang",[289,309,311],{"class":310},"sNM9w","=",[289,313,315],{"class":314},"sPAZv","\"ts\"",[289,317,318],{"class":295},">\n",[289,320,322,326,330,334,336,339,341,344,347,350,354],{"class":291,"line":321},2,[289,323,325],{"class":324},"sqe1H","const",[289,327,329],{"class":328},"sEEOt"," { ",[289,331,333],{"class":332},"s6Rhl","user",[289,335,239],{"class":328},[289,337,338],{"class":332},"loggedIn",[289,340,239],{"class":328},[289,342,343],{"class":332},"signOut",[289,345,346],{"class":328}," } ",[289,348,311],{"class":349},"sQBpM",[289,351,353],{"class":352},"sfT9l"," useUserSession",[289,355,356],{"class":328},"()\n",[289,358,360,363,365],{"class":291,"line":359},3,[289,361,362],{"class":295},"\u003C\u002F",[289,364,300],{"class":299},[289,366,318],{"class":295},[289,368,370],{"class":291,"line":369},4,[289,371,373],{"emptyLinePlaceholder":372},true,"\n",[289,375,377,379,382],{"class":291,"line":376},5,[289,378,296],{"class":295},[289,380,381],{"class":299},"template",[289,383,318],{"class":295},[289,385,387,390,393,396,398,401,404,406,409],{"class":291,"line":386},6,[289,388,389],{"class":295},"  \u003C",[289,391,392],{"class":299},"button",[289,394,395],{"class":303}," v-if",[289,397,311],{"class":310},[289,399,400],{"class":314},"\"loggedIn\"",[289,402,403],{"class":303}," @click",[289,405,311],{"class":310},[289,407,408],{"class":314},"\"signOut()\"",[289,410,318],{"class":295},[289,412,414],{"class":291,"line":413},7,[289,415,416],{"class":328},"    Sign out {{ user?.email }}\n",[289,418,420,423,425],{"class":291,"line":419},8,[289,421,422],{"class":295},"  \u003C\u002F",[289,424,392],{"class":299},[289,426,318],{"class":295},[289,428,430,432,434],{"class":291,"line":429},9,[289,431,362],{"class":295},[289,433,381],{"class":299},[289,435,318],{"class":295},[267,437,439],{"id":438},"choosing-an-api","Choosing an API",[441,442,443,456],"table",{},[444,445,446],"thead",{},[447,448,449,453],"tr",{},[450,451,452],"th",{},"Use case",[450,454,455],{},"Composable",[457,458,459,469,479,489,499,509,519],"tbody",{},[447,460,461,465],{},[462,463,464],"td",{},"Pages, components, and setup stores that need auth state and session lifecycle actions",[462,466,467],{},[225,468,276],{},[447,470,471,474],{},[462,472,473],{},"Direct Better Auth client access",[462,475,476],{},[225,477,478],{},"useAuthClient()",[447,480,481,484],{},[462,482,483],{},"Sign-in forms that need loading, error, and success state",[462,485,486],{},[225,487,488],{},"useSignIn()",[447,490,491,494],{},[462,492,493],{},"Sign-up forms that need loading, error, and success state",[462,495,496],{},[225,497,498],{},"useSignUp()",[447,500,501,504],{},[462,502,503],{},"Sign-out buttons that need loading, error, and success state",[462,505,506],{},[225,507,508],{},"useSignOut()",[447,510,511,514],{},[462,512,513],{},"Better Auth plugin\u002Fclient methods that need loading, error, and success state",[462,515,516],{},[225,517,518],{},"useAuthClientAction()",[447,520,521,524],{},[462,522,523],{},"Custom auth endpoints that create or change the current session",[462,525,526],{},[225,527,528],{},"runWithSessionRefresh()",[267,530,532],{"id":531},"useusersession","useUserSession",[214,534,535],{},"The primary composable for accessing authentication state. It is safe to return directly from Pinia setup stores because it only exposes session state and session lifecycle actions.",[279,537,542],{"className":538,"code":539,"filename":540,"language":541,"meta":285,"style":285},"language-ts shiki shiki-themes one-light synthwave-84 synthwave-84","const { loggedIn, user, session, signOut } = useUserSession()\n","pages\u002Flogin.vue","ts",[225,543,544],{"__ignoreMap":285},[289,545,546,548,551,553,555,557,559,562,564,566,568,570,572],{"class":291,"line":292},[289,547,325],{"class":324},[289,549,329],{"class":550},"s17Py",[289,552,338],{"class":332},[289,554,239],{"class":550},[289,556,333],{"class":332},[289,558,239],{"class":550},[289,560,561],{"class":332},"session",[289,563,239],{"class":550},[289,565,343],{"class":332},[289,567,346],{"class":550},[289,569,311],{"class":349},[289,571,353],{"class":352},[289,573,356],{"class":550},[575,576,577,585,589,593,599],"field-group",{},[578,579,581,584],"field",{"name":338,"type":580},"ComputedRef\u003Cboolean>",[225,582,583],{},"true"," if the user is currently authenticated.",[578,586,588],{"name":333,"type":587},"Ref\u003CAuthUser | null>","The current user object, inferred from your config.",[578,590,592],{"name":561,"type":591},"Ref\u003CClientAuthSession | null>","The current session object.",[578,594,596,598],{"name":595,"type":580},"ready",[225,597,583],{}," when initial session resolution is complete (from SSR hydration or client fetch).",[578,600,602],{"name":343,"type":601},"(options?: SignOutOptions) => Promise\u003Cvoid>","Signs out and clears local session state.",[218,604,605,608],{},[214,606,607],{},"For SSR-safe auth access:",[609,610,611,629,638],"ul",{},[612,613,273,614,239,616,239,618,239,620,246,622,625,626,628],"li",{},[225,615,333],{},[225,617,561],{},[225,619,338],{},[225,621,595],{},[225,623,624],{},"fetchSession"," from ",[225,627,276],{},".",[612,630,273,631,258,634,637],{},[225,632,633],{},"useAuthRequestFetch()",[225,635,636],{},"useAuthAsyncData()"," for auth-bound data in pages.",[612,639,640,641,239,644,647,648,651,652,655],{},"Use server helpers like ",[225,642,643],{},"serverAuth(event)",[225,645,646],{},"getUserSession(event)",", or ",[225,649,650],{},"requireUserSession(event)"," in ",[225,653,654],{},"server\u002F"," handlers.",[267,657,659],{"id":658},"pinia-setup-stores","Pinia setup stores",[214,661,662,663,665],{},"Return ",[225,664,276],{}," directly when you want auth state in a Pinia setup store or another shared state container.",[667,668,670],"h3",{"id":669},"client-session-type","Client session type",[214,672,673,676,677,680,681,625,684,687,688,690,691,693,694,697,698,700],{},[225,674,675],{},"useUserSession().session"," uses ",[225,678,679],{},"ClientAuthSession",", which omits ",[225,682,683],{},"token",[225,685,686],{},"AuthSession",". The module already removes the token from client state. Update explicit client-side ",[225,689,686],{}," annotations to ",[225,692,679],{}," imported from ",[225,695,696],{},"#nuxt-better-auth",". Server helpers continue to return the full ",[225,699,686],{},", including its token.",[214,702,703],{},"It returns:",[609,705,706,710,714,718,722,726,731,735],{},[612,707,708],{},[225,709,333],{},[612,711,712],{},[225,713,561],{},[612,715,716],{},[225,717,338],{},[612,719,720],{},[225,721,595],{},[612,723,724],{},[225,725,624],{},[612,727,728],{},[225,729,730],{},"waitForSession",[612,732,733],{},[225,734,343],{},[612,736,737],{},[225,738,739],{},"updateUser",[214,741,742,743,239,746,647,749,752],{},"It does not return ",[225,744,745],{},"client",[225,747,748],{},"signIn",[225,750,751],{},"signUp",". Those values are runtime Better Auth client namespaces, not auth state. Keep them in components or action composables instead of storing them in hydrated state.",[214,754,755,758],{},[225,756,757],{},"useUserSessionState()"," remains as a deprecated alias for the same store-safe shape.",[279,760,763],{"className":538,"code":761,"filename":762,"language":541,"meta":285,"style":285},"export const useUserStore = defineStore('user', () => {\n  return useUserSession()\n})\n","app\u002Fstores\u002Fuser.ts",[225,764,765,797,806],{"__ignoreMap":285},[289,766,767,770,773,776,779,782,785,788,791,794],{"class":291,"line":292},[289,768,769],{"class":324},"export",[289,771,772],{"class":324}," const",[289,774,775],{"class":332}," useUserStore",[289,777,778],{"class":349}," =",[289,780,781],{"class":352}," defineStore",[289,783,784],{"class":550},"(",[289,786,787],{"class":314},"'user'",[289,789,790],{"class":550},", () ",[289,792,793],{"class":324},"=>",[289,795,796],{"class":550}," {\n",[289,798,799,802,804],{"class":291,"line":321},[289,800,801],{"class":324},"  return",[289,803,353],{"class":352},[289,805,356],{"class":550},[289,807,808],{"class":291,"line":359},[289,809,810],{"class":550},"})\n",[214,812,813,814,239,816,647,818,820],{},"Keep sign-in and sign-up flows in components. Use ",[225,815,488],{},[225,817,498],{},[225,819,518],{}," when the UI needs loading, error, and success state:",[279,822,824],{"className":281,"code":823,"filename":540,"language":284,"meta":285,"style":285},"\u003Cscript setup lang=\"ts\">\nconst signInEmail = useSignIn('email')\n\nasync function submit(email: string, password: string) {\n  await signInEmail.execute({ email, password })\n}\n\u003C\u002Fscript>\n",[225,825,826,842,862,866,903,928,933],{"__ignoreMap":285},[289,827,828,830,832,834,836,838,840],{"class":291,"line":292},[289,829,296],{"class":295},[289,831,300],{"class":299},[289,833,304],{"class":303},[289,835,307],{"class":303},[289,837,311],{"class":310},[289,839,315],{"class":314},[289,841,318],{"class":295},[289,843,844,846,849,851,854,856,859],{"class":291,"line":321},[289,845,325],{"class":324},[289,847,848],{"class":332}," signInEmail",[289,850,778],{"class":349},[289,852,853],{"class":352}," useSignIn",[289,855,784],{"class":328},[289,857,858],{"class":314},"'email'",[289,860,861],{"class":328},")\n",[289,863,864],{"class":291,"line":359},[289,865,373],{"emptyLinePlaceholder":372},[289,867,868,871,874,877,879,883,887,891,893,896,898,900],{"class":291,"line":369},[289,869,870],{"class":324},"async",[289,872,873],{"class":324}," function",[289,875,876],{"class":352}," submit",[289,878,784],{"class":328},[289,880,882],{"class":881},"sgisi","email",[289,884,886],{"class":885},"sn-Jc",":",[289,888,890],{"class":889},"sr8De"," string",[289,892,239],{"class":328},[289,894,895],{"class":881},"password",[289,897,886],{"class":885},[289,899,890],{"class":889},[289,901,902],{"class":328},") {\n",[289,904,905,908,911,913,916,919,921,923,925],{"class":291,"line":376},[289,906,907],{"class":324},"  await",[289,909,848],{"class":910},"svFNh",[289,912,628],{"class":328},[289,914,915],{"class":352},"execute",[289,917,918],{"class":328},"({ ",[289,920,882],{"class":910},[289,922,239],{"class":328},[289,924,895],{"class":910},[289,926,927],{"class":328}," })\n",[289,929,930],{"class":291,"line":386},[289,931,932],{"class":328},"}\n",[289,934,935,937,939],{"class":291,"line":413},[289,936,362],{"class":295},[289,938,300],{"class":299},[289,940,318],{"class":295},[267,942,253],{"id":943},"useauthclient",[214,945,946,947,950],{},"Returns the Vue-safe Better Auth client on the client runtime and ",[225,948,949],{},"null"," on the server runtime. Use this for direct client\u002Fplugin method access when you do not need action state.",[279,952,954],{"className":538,"code":953,"language":541,"meta":285,"style":285},"const client = useAuthClient()\nawait client?.sendVerificationEmail({ email })\n",[225,955,956,970],{"__ignoreMap":285},[289,957,958,960,963,965,968],{"class":291,"line":292},[289,959,325],{"class":324},[289,961,962],{"class":332}," client",[289,964,778],{"class":349},[289,966,967],{"class":352}," useAuthClient",[289,969,356],{"class":550},[289,971,972,975,977,980,983,985,987],{"class":291,"line":321},[289,973,974],{"class":324},"await",[289,976,962],{"class":910},[289,978,979],{"class":550},"?.",[289,981,982],{"class":352},"sendVerificationEmail",[289,984,918],{"class":550},[289,986,882],{"class":910},[289,988,927],{"class":550},[667,990,992],{"id":991},"promise-behavior","Promise Behavior",[214,994,995,996,1000],{},"Raw Better Auth client methods return a promise that resolves when the ",[997,998,999],"strong",{},"server responds",", not when local state updates.",[279,1002,1004],{"className":538,"code":1003,"language":541,"meta":285,"style":285},"\u002F\u002F This awaits the server response\nawait client.signIn.email({ email, password })\n\n\u002F\u002F Local state updates asynchronously after\n\u002F\u002F Use onSuccess callback for actions that depend on updated state\nawait client.signIn.email(\n  { email, password },\n  { onSuccess: () => navigateTo('\u002Fdashboard') }\n)\n",[225,1005,1006,1012,1037,1041,1046,1051,1068,1082,1108],{"__ignoreMap":285},[289,1007,1008],{"class":291,"line":292},[289,1009,1011],{"class":1010},"st7cf","\u002F\u002F This awaits the server response\n",[289,1013,1014,1016,1018,1020,1023,1025,1027,1029,1031,1033,1035],{"class":291,"line":321},[289,1015,974],{"class":324},[289,1017,962],{"class":910},[289,1019,628],{"class":550},[289,1021,748],{"class":1022},"sYvLG",[289,1024,628],{"class":550},[289,1026,882],{"class":352},[289,1028,918],{"class":550},[289,1030,882],{"class":910},[289,1032,239],{"class":550},[289,1034,895],{"class":910},[289,1036,927],{"class":550},[289,1038,1039],{"class":291,"line":359},[289,1040,373],{"emptyLinePlaceholder":372},[289,1042,1043],{"class":291,"line":369},[289,1044,1045],{"class":1010},"\u002F\u002F Local state updates asynchronously after\n",[289,1047,1048],{"class":291,"line":376},[289,1049,1050],{"class":1010},"\u002F\u002F Use onSuccess callback for actions that depend on updated state\n",[289,1052,1053,1055,1057,1059,1061,1063,1065],{"class":291,"line":386},[289,1054,974],{"class":324},[289,1056,962],{"class":910},[289,1058,628],{"class":550},[289,1060,748],{"class":1022},[289,1062,628],{"class":550},[289,1064,882],{"class":352},[289,1066,1067],{"class":550},"(\n",[289,1069,1070,1073,1075,1077,1079],{"class":291,"line":413},[289,1071,1072],{"class":550},"  { ",[289,1074,882],{"class":910},[289,1076,239],{"class":550},[289,1078,895],{"class":910},[289,1080,1081],{"class":550}," },\n",[289,1083,1084,1086,1089,1092,1095,1097,1100,1102,1105],{"class":291,"line":419},[289,1085,1072],{"class":550},[289,1087,1088],{"class":352},"onSuccess",[289,1090,886],{"class":1091},"sVnqq",[289,1093,1094],{"class":550}," () ",[289,1096,793],{"class":324},[289,1098,1099],{"class":352}," navigateTo",[289,1101,784],{"class":550},[289,1103,1104],{"class":314},"'\u002Fdashboard'",[289,1106,1107],{"class":550},") }\n",[289,1109,1110],{"class":291,"line":429},[289,1111,861],{"class":550},[214,1113,1114,1115,1117,1118,1120],{},"For form flows, prefer ",[225,1116,488],{}," and ",[225,1119,498],{}," because they normalize errors, sync session state, and apply configured redirects.",[267,1122,1124],{"id":1123},"usesignin-usesignup-redirects","useSignIn \u002F useSignUp redirects",[214,1126,1127,1128,1130,1131,1133],{},"If no ",[225,1129,1088],{}," callback is provided in method options, ",[225,1132,488],{}," will:",[609,1135,1136,1147,1154],{},[612,1137,1138,1139,1142,1143,1146],{},"navigate to ",[225,1140,1141],{},"route.query.redirect"," (or custom ",[225,1144,1145],{},"auth.redirectQueryKey",") when it is a local path",[612,1148,1149,1150,1153],{},"otherwise fallback to ",[225,1151,1152],{},"auth.redirects.authenticated"," when configured and an authenticated session is established",[612,1155,1156],{},"otherwise no automatic navigation",[279,1158,1160],{"className":538,"code":1159,"language":541,"meta":285,"style":285},"await useSignIn('email').execute({ email, password }) \u002F\u002F redirects to safe `?redirect=...` or auth.redirects.authenticated\n",[225,1161,1162],{"__ignoreMap":285},[289,1163,1164,1166,1168,1170,1172,1175,1177,1179,1181,1183,1185,1188],{"class":291,"line":292},[289,1165,974],{"class":324},[289,1167,853],{"class":352},[289,1169,784],{"class":550},[289,1171,858],{"class":314},[289,1173,1174],{"class":550},").",[289,1176,915],{"class":352},[289,1178,918],{"class":550},[289,1180,882],{"class":910},[289,1182,239],{"class":550},[289,1184,895],{"class":910},[289,1186,1187],{"class":550}," }) ",[289,1189,1190],{"class":1010},"\u002F\u002F redirects to safe `?redirect=...` or auth.redirects.authenticated\n",[214,1192,1193,1195,1196,1198],{},[225,1194,498],{}," follows the same redirect precedence:\nquery redirect > ",[225,1197,1152],{}," (only when authenticated) > no auto-redirect.",[667,1200,1202],{"id":1201},"signout",[225,1203,343],{},[214,1205,1206],{},"Signs the user out and clears the local session state.",[279,1208,1210],{"className":538,"code":1209,"language":541,"meta":285,"style":285},"await signOut()\n",[225,1211,1212],{"__ignoreMap":285},[289,1213,1214,1216,1219],{"class":291,"line":292},[289,1215,974],{"class":324},[289,1217,1218],{"class":352}," signOut",[289,1220,356],{"class":550},[214,1222,1223,1224,1227,1228,1231,1232,628],{},"If ",[225,1225,1226],{},"auth.redirects.logout"," is configured, ",[225,1229,1230],{},"signOut()"," will navigate there automatically (client-side), unless you provide ",[225,1233,1088],{},[214,1235,1236],{},[997,1237,1238],{},"Options",[279,1240,1242],{"className":538,"code":1241,"language":541,"meta":285,"style":285},"await signOut({\n  onSuccess: () => navigateTo('\u002F'),\n})\n",[225,1243,1244,1253,1274],{"__ignoreMap":285},[289,1245,1246,1248,1250],{"class":291,"line":292},[289,1247,974],{"class":324},[289,1249,1218],{"class":352},[289,1251,1252],{"class":550},"({\n",[289,1254,1255,1258,1260,1262,1264,1266,1268,1271],{"class":291,"line":321},[289,1256,1257],{"class":352},"  onSuccess",[289,1259,886],{"class":1091},[289,1261,1094],{"class":550},[289,1263,793],{"class":324},[289,1265,1099],{"class":352},[289,1267,784],{"class":550},[289,1269,1270],{"class":314},"'\u002F'",[289,1272,1273],{"class":550},"),\n",[289,1275,1276],{"class":291,"line":359},[289,1277,810],{"class":550},[667,1279,1281],{"id":1280},"waitforsession",[225,1282,1283],{},"waitForSession()",[214,1285,1286,1287,1289,1290,628],{},"Waits until ",[225,1288,338],{}," becomes true or five seconds pass. A signed-out session can already be ready, so this helper does not wait for ",[225,1291,595],{},[279,1293,1295],{"className":538,"code":1294,"language":541,"meta":285,"style":285},"await waitForSession()\n\u002F\u002F The user is logged in, or the five-second wait ended.\n",[225,1296,1297,1306],{"__ignoreMap":285},[289,1298,1299,1301,1304],{"class":291,"line":292},[289,1300,974],{"class":324},[289,1302,1303],{"class":352}," waitForSession",[289,1305,356],{"class":550},[289,1307,1308],{"class":291,"line":321},[289,1309,1310],{"class":1010},"\u002F\u002F The user is logged in, or the five-second wait ended.\n",[1312,1313,1314,1315,1318,1319,628],"tip",{},"The function always resolves and returns no value. Check ",[225,1316,1317],{},"loggedIn.value"," after awaiting it if the next action requires authentication. To perform a session lookup and wait for it to finish, use ",[225,1320,1321],{},"await fetchSession()",[1323,1324,1326],"h4",{"id":1325},"fetchsession",[225,1327,624],{},[214,1329,1330],{},"Manually triggers a session refresh. Useful if you've updated user data on the server via a side channel.",[279,1332,1334],{"className":538,"code":1333,"language":541,"meta":285,"style":285},"await fetchSession()\n",[225,1335,1336],{"__ignoreMap":285},[289,1337,1338,1340,1343],{"class":291,"line":292},[289,1339,974],{"class":324},[289,1341,1342],{"class":352}," fetchSession",[289,1344,356],{"class":550},[214,1346,1347],{},[997,1348,1238],{},[279,1350,1352],{"className":538,"code":1351,"language":541,"meta":285,"style":285},"await fetchSession({\n  headers, \u002F\u002F optional HeadersInit\n  force: true, \u002F\u002F disables Better Auth cookie cache for this fetch\n})\n",[225,1353,1354,1362,1372,1388],{"__ignoreMap":285},[289,1355,1356,1358,1360],{"class":291,"line":292},[289,1357,974],{"class":324},[289,1359,1342],{"class":352},[289,1361,1252],{"class":550},[289,1363,1364,1367,1369],{"class":291,"line":321},[289,1365,1366],{"class":910},"  headers",[289,1368,239],{"class":550},[289,1370,1371],{"class":1010},"\u002F\u002F optional HeadersInit\n",[289,1373,1374,1377,1379,1383,1385],{"class":291,"line":359},[289,1375,1376],{"class":1022},"  force",[289,1378,886],{"class":1091},[289,1380,1382],{"class":1381},"s3ZNE"," true",[289,1384,239],{"class":550},[289,1386,1387],{"class":1010},"\u002F\u002F disables Better Auth cookie cache for this fetch\n",[289,1389,1390],{"class":291,"line":369},[289,1391,810],{"class":550},[1323,1393,1395],{"id":1394},"updateuser",[225,1396,739],{},[214,1398,1399],{},"Updates the user on the server and optimistically patches local state. Local state reverts if the server call fails.",[214,1401,1402,1404,1405,1408,1409,239,1412,1415,1416,1419,1420,625,1422,1424],{},[225,1403,739],{}," accepts ",[225,1406,1407],{},"AuthUserUpdateInput",": ",[225,1410,1411],{},"name",[225,1413,1414],{},"image",", and input-enabled fields from your Better Auth configuration and client plugins. It no longer accepts user IDs, email verification status, admin roles, or custom fields declared with ",[225,1417,1418],{},"input: false",". Use Better Auth's dedicated email-change or admin actions for those operations. Import ",[225,1421,1407],{},[225,1423,696],{}," when annotating an update.",[279,1426,1428],{"className":538,"code":1427,"language":541,"meta":285,"style":285},"await updateUser({ name: 'New Name' })\n",[225,1429,1430],{"__ignoreMap":285},[289,1431,1432,1434,1437,1439,1441,1443,1446],{"class":291,"line":292},[289,1433,974],{"class":324},[289,1435,1436],{"class":352}," updateUser",[289,1438,918],{"class":550},[289,1440,1411],{"class":1022},[289,1442,886],{"class":1091},[289,1444,1445],{"class":314}," 'New Name'",[289,1447,927],{"class":550},[218,1449,1450,1451,1453],{},"During SSR, ",[225,1452,739],{}," only patches local state since no client is available.",[1312,1455,1456,1408,1459,1117,1461,1463,1464,1467],{},[997,1457,1458],{},"Reactivity",[225,1460,333],{},[225,1462,561],{}," are global states using ",[225,1465,1466],{},"useState",". Changes in one component are instantly reflected everywhere.",[1469,1470],"read-more",{"title":1471,"to":151},"BetterAuthState component",[267,1473,1475],{"id":1474},"useauthrequestfetch","useAuthRequestFetch",[214,1477,1478],{},"Returns Nuxt's request-scoped fetch function. On SSR it preserves request context (including cookies); on client it behaves like regular fetch.",[214,1480,1481,1483,1484,1487,1488,1491,1492,1495],{},[225,1482,633],{}," defaults to ",[225,1485,1486],{},"GET",". For endpoints that only allow ",[225,1489,1490],{},"POST"," (or another method), pass ",[225,1493,1494],{},"method"," explicitly to preserve response type inference.",[214,1497,1498,1499,1117,1502,1505],{},"When endpoint typing is enabled, ",[225,1500,1501],{},"useFetch('\u002Fapi\u002Fauth\u002F...')",[225,1503,1504],{},"useLazyFetch('\u002Fapi\u002Fauth\u002F...')"," infer payloads directly from your Better Auth config:",[279,1507,1509],{"className":538,"code":1508,"filename":283,"language":541,"meta":285,"style":285},"const { data: customerState } = await useFetch('\u002Fapi\u002Fauth\u002Fcustomer\u002Fstate')\ncustomerState.value?.activeSubscriptions[0]?.toUpperCase()\n\nconst { data: customerById } = await useLazyFetch('\u002Fapi\u002Fauth\u002Fcustomer\u002F123\u002Fstate')\ncustomerById.value?.customerId.toUpperCase()\n",[225,1510,1511,1542,1570,1574,1603],{"__ignoreMap":285},[289,1512,1513,1515,1517,1520,1522,1525,1527,1529,1532,1535,1537,1540],{"class":291,"line":292},[289,1514,325],{"class":324},[289,1516,329],{"class":550},[289,1518,1519],{"class":1022},"data",[289,1521,1408],{"class":550},[289,1523,1524],{"class":332},"customerState",[289,1526,346],{"class":550},[289,1528,311],{"class":349},[289,1530,1531],{"class":324}," await",[289,1533,1534],{"class":352}," useFetch",[289,1536,784],{"class":550},[289,1538,1539],{"class":314},"'\u002Fapi\u002Fauth\u002Fcustomer\u002Fstate'",[289,1541,861],{"class":550},[289,1543,1544,1546,1548,1551,1553,1556,1559,1562,1565,1568],{"class":291,"line":321},[289,1545,1524],{"class":910},[289,1547,628],{"class":550},[289,1549,1550],{"class":1022},"value",[289,1552,979],{"class":550},[289,1554,1555],{"class":1022},"activeSubscriptions",[289,1557,1558],{"class":550},"[",[289,1560,1561],{"class":1381},"0",[289,1563,1564],{"class":550},"]?.",[289,1566,1567],{"class":352},"toUpperCase",[289,1569,356],{"class":550},[289,1571,1572],{"class":291,"line":359},[289,1573,373],{"emptyLinePlaceholder":372},[289,1575,1576,1578,1580,1582,1584,1587,1589,1591,1593,1596,1598,1601],{"class":291,"line":369},[289,1577,325],{"class":324},[289,1579,329],{"class":550},[289,1581,1519],{"class":1022},[289,1583,1408],{"class":550},[289,1585,1586],{"class":332},"customerById",[289,1588,346],{"class":550},[289,1590,311],{"class":349},[289,1592,1531],{"class":324},[289,1594,1595],{"class":352}," useLazyFetch",[289,1597,784],{"class":550},[289,1599,1600],{"class":314},"'\u002Fapi\u002Fauth\u002Fcustomer\u002F123\u002Fstate'",[289,1602,861],{"class":550},[289,1604,1605,1607,1609,1611,1613,1616,1618,1620],{"class":291,"line":376},[289,1606,1586],{"class":910},[289,1608,628],{"class":550},[289,1610,1550],{"class":1022},[289,1612,979],{"class":550},[289,1614,1615],{"class":1022},"customerId",[289,1617,628],{"class":550},[289,1619,1567],{"class":352},[289,1621,356],{"class":550},[214,1623,1624,1625,1628,1629,1631],{},"Global ",[225,1626,1627],{},"$fetch"," is not augmented by this module; use ",[225,1630,633],{}," for typed auth endpoint payloads with request-scoped cookies.",[279,1633,1635],{"className":538,"code":1634,"filename":283,"language":541,"meta":285,"style":285},"const requestFetch = useAuthRequestFetch()\nconst state = await requestFetch('\u002Fapi\u002Fauth\u002Fcustomer\u002Fstate')\nconst postOnly = await requestFetch('\u002Fapi\u002Fauth\u002Fcustomer\u002Fpost-only', { method: 'POST' })\n",[225,1636,1637,1651,1670],{"__ignoreMap":285},[289,1638,1639,1641,1644,1646,1649],{"class":291,"line":292},[289,1640,325],{"class":324},[289,1642,1643],{"class":332}," requestFetch",[289,1645,778],{"class":349},[289,1647,1648],{"class":352}," useAuthRequestFetch",[289,1650,356],{"class":550},[289,1652,1653,1655,1658,1660,1662,1664,1666,1668],{"class":291,"line":321},[289,1654,325],{"class":324},[289,1656,1657],{"class":332}," state",[289,1659,778],{"class":349},[289,1661,1531],{"class":324},[289,1663,1643],{"class":352},[289,1665,784],{"class":550},[289,1667,1539],{"class":314},[289,1669,861],{"class":550},[289,1671,1672,1674,1677,1679,1681,1683,1685,1688,1691,1693,1695,1698],{"class":291,"line":359},[289,1673,325],{"class":324},[289,1675,1676],{"class":332}," postOnly",[289,1678,778],{"class":349},[289,1680,1531],{"class":324},[289,1682,1643],{"class":352},[289,1684,784],{"class":550},[289,1686,1687],{"class":314},"'\u002Fapi\u002Fauth\u002Fcustomer\u002Fpost-only'",[289,1689,1690],{"class":550},", { ",[289,1692,1494],{"class":1022},[289,1694,886],{"class":1091},[289,1696,1697],{"class":314}," 'POST'",[289,1699,927],{"class":550},[214,1701,1702],{},"Use this when you need low-level control and want to build your own data loader pattern.",[267,1704,1706],{"id":1705},"useauthasyncdata","useAuthAsyncData",[214,1708,1709],{},"SSR-safe helper for auth-bound data loading.",[279,1711,1713],{"className":538,"code":1712,"filename":283,"language":541,"meta":285,"style":285},"const { data: customerState, pending, error } = await useAuthAsyncData(\n  'customer-state',\n  requestFetch => requestFetch('\u002Fapi\u002Fauth\u002Fcustomer\u002Fstate'),\n)\n",[225,1714,1715,1748,1756,1772],{"__ignoreMap":285},[289,1716,1717,1719,1721,1723,1725,1727,1729,1732,1734,1737,1739,1741,1743,1746],{"class":291,"line":292},[289,1718,325],{"class":324},[289,1720,329],{"class":550},[289,1722,1519],{"class":1022},[289,1724,1408],{"class":550},[289,1726,1524],{"class":332},[289,1728,239],{"class":550},[289,1730,1731],{"class":332},"pending",[289,1733,239],{"class":550},[289,1735,1736],{"class":332},"error",[289,1738,346],{"class":550},[289,1740,311],{"class":349},[289,1742,1531],{"class":324},[289,1744,1745],{"class":352}," useAuthAsyncData",[289,1747,1067],{"class":550},[289,1749,1750,1753],{"class":291,"line":321},[289,1751,1752],{"class":314},"  'customer-state'",[289,1754,1755],{"class":550},",\n",[289,1757,1758,1761,1764,1766,1768,1770],{"class":291,"line":359},[289,1759,1760],{"class":881},"  requestFetch",[289,1762,1763],{"class":324}," =>",[289,1765,1643],{"class":352},[289,1767,784],{"class":550},[289,1769,1539],{"class":314},[289,1771,1273],{"class":550},[289,1773,1774],{"class":291,"line":369},[289,1775,861],{"class":550},[214,1777,1778,1779,1782],{},"When route typing is enabled, payload types for ",[225,1780,1781],{},"\u002Fapi\u002Fauth\u002F*"," endpoints are inferred automatically.",[214,1784,1785],{},"By default:",[609,1787,1788,1800,1806],{},[612,1789,1790,1793,1794,1796,1797,1799],{},[225,1791,1792],{},"requireAuth"," is ",[225,1795,583],{}," (unauthenticated users resolve to ",[225,1798,949],{}," without calling the endpoint).",[612,1801,1802,1483,1804,628],{},[225,1803,1519],{},[225,1805,949],{},[612,1807,1808,1809,628],{},"errors are exposed through ",[225,1810,1736],{},[279,1812,1814],{"className":538,"code":1813,"filename":283,"language":541,"meta":285,"style":285},"const { data } = await useAuthAsyncData(\n  'public-profile',\n  requestFetch => requestFetch('\u002Fapi\u002Fprofile\u002Fpublic'),\n  { requireAuth: false },\n)\n",[225,1815,1816,1834,1841,1856,1869],{"__ignoreMap":285},[289,1817,1818,1820,1822,1824,1826,1828,1830,1832],{"class":291,"line":292},[289,1819,325],{"class":324},[289,1821,329],{"class":550},[289,1823,1519],{"class":332},[289,1825,346],{"class":550},[289,1827,311],{"class":349},[289,1829,1531],{"class":324},[289,1831,1745],{"class":352},[289,1833,1067],{"class":550},[289,1835,1836,1839],{"class":291,"line":321},[289,1837,1838],{"class":314},"  'public-profile'",[289,1840,1755],{"class":550},[289,1842,1843,1845,1847,1849,1851,1854],{"class":291,"line":359},[289,1844,1760],{"class":881},[289,1846,1763],{"class":324},[289,1848,1643],{"class":352},[289,1850,784],{"class":550},[289,1852,1853],{"class":314},"'\u002Fapi\u002Fprofile\u002Fpublic'",[289,1855,1273],{"class":550},[289,1857,1858,1860,1862,1864,1867],{"class":291,"line":369},[289,1859,1072],{"class":550},[289,1861,1792],{"class":1022},[289,1863,886],{"class":1091},[289,1865,1866],{"class":1381}," false",[289,1868,1081],{"class":550},[289,1870,1871],{"class":291,"line":376},[289,1872,861],{"class":550},[267,1874,1876],{"id":1875},"useaction","useAction",[214,1878,1879],{},"Creates a reusable async action handle with normalized error state.",[279,1881,1884],{"className":538,"code":1882,"filename":1883,"language":541,"meta":285,"style":285},"const saveProfile = useAction(async (payload: { name: string }) => {\n  return await $fetch('\u002Fapi\u002Fprofile', { method: 'PATCH', body: payload })\n})\n\nawait saveProfile.execute({ name: 'Max' })\n\nif (saveProfile.status.value === 'error') {\n  console.error(saveProfile.error.value?.message)\n}\n","components\u002FProfileForm.vue",[225,1885,1886,1924,1959,1963,1967,1988,1992,2019,2047],{"__ignoreMap":285},[289,1887,1888,1890,1893,1895,1898,1900,1902,1905,1908,1910,1912,1914,1916,1918,1920,1922],{"class":291,"line":292},[289,1889,325],{"class":324},[289,1891,1892],{"class":332}," saveProfile",[289,1894,778],{"class":349},[289,1896,1897],{"class":352}," useAction",[289,1899,784],{"class":550},[289,1901,870],{"class":324},[289,1903,1904],{"class":550}," (",[289,1906,1907],{"class":881},"payload",[289,1909,886],{"class":885},[289,1911,329],{"class":550},[289,1913,1411],{"class":910},[289,1915,886],{"class":885},[289,1917,890],{"class":889},[289,1919,1187],{"class":550},[289,1921,793],{"class":324},[289,1923,796],{"class":550},[289,1925,1926,1928,1930,1933,1935,1938,1940,1942,1944,1947,1949,1952,1954,1957],{"class":291,"line":321},[289,1927,801],{"class":324},[289,1929,1531],{"class":324},[289,1931,1932],{"class":352}," $fetch",[289,1934,784],{"class":550},[289,1936,1937],{"class":314},"'\u002Fapi\u002Fprofile'",[289,1939,1690],{"class":550},[289,1941,1494],{"class":1022},[289,1943,886],{"class":1091},[289,1945,1946],{"class":314}," 'PATCH'",[289,1948,239],{"class":550},[289,1950,1951],{"class":1022},"body",[289,1953,886],{"class":1091},[289,1955,1956],{"class":910}," payload",[289,1958,927],{"class":550},[289,1960,1961],{"class":291,"line":359},[289,1962,810],{"class":550},[289,1964,1965],{"class":291,"line":369},[289,1966,373],{"emptyLinePlaceholder":372},[289,1968,1969,1971,1973,1975,1977,1979,1981,1983,1986],{"class":291,"line":376},[289,1970,974],{"class":324},[289,1972,1892],{"class":910},[289,1974,628],{"class":550},[289,1976,915],{"class":352},[289,1978,918],{"class":550},[289,1980,1411],{"class":1022},[289,1982,886],{"class":1091},[289,1984,1985],{"class":314}," 'Max'",[289,1987,927],{"class":550},[289,1989,1990],{"class":291,"line":386},[289,1991,373],{"emptyLinePlaceholder":372},[289,1993,1994,1997,1999,2002,2004,2007,2009,2011,2014,2017],{"class":291,"line":413},[289,1995,1996],{"class":324},"if",[289,1998,1904],{"class":550},[289,2000,2001],{"class":910},"saveProfile",[289,2003,628],{"class":550},[289,2005,2006],{"class":1022},"status",[289,2008,628],{"class":550},[289,2010,1550],{"class":1022},[289,2012,2013],{"class":885}," ===",[289,2015,2016],{"class":314}," 'error'",[289,2018,902],{"class":550},[289,2020,2021,2024,2026,2028,2030,2032,2034,2036,2038,2040,2042,2045],{"class":291,"line":419},[289,2022,2023],{"class":910},"  console",[289,2025,628],{"class":550},[289,2027,1736],{"class":352},[289,2029,784],{"class":550},[289,2031,2001],{"class":910},[289,2033,628],{"class":550},[289,2035,1736],{"class":1022},[289,2037,628],{"class":550},[289,2039,1550],{"class":1022},[289,2041,979],{"class":550},[289,2043,2044],{"class":1022},"message",[289,2046,861],{"class":550},[289,2048,2049],{"class":291,"line":429},[289,2050,932],{"class":550},[214,2052,2053,2055,2056,2058,2059,886],{},[225,2054,1876],{}," returns the same handle shape as ",[225,2057,257],{},"\u002F",[225,2060,261],{},[575,2062,2063,2067,2075,2079],{},[578,2064,2066],{"name":915,"type":2065},"(...args) => Promise\u003Cvoid>","Executes the action and never throws.",[578,2068,2070,2071,2074],{"name":2006,"type":2069},"'idle' | 'pending' | 'success' | 'error'","Current status of the latest ",[225,2072,2073],{},"execute()"," call.",[578,2076,2078],{"name":1519,"type":2077},"any | null","Last successful result.",[578,2080,2082,2083,2086],{"name":1736,"type":2081},"AuthActionError | null","Normalized error from thrown errors or ",[225,2084,2085],{},"{ error }"," responses.",[267,2088,2090],{"id":2089},"runwithsessionrefresh","runWithSessionRefresh",[214,2092,2093,2094,2096,2097,1117,2099,628],{},"Runs a custom auth action, then refreshes ",[225,2095,276],{}," state after the action succeeds. Use it for custom Better Auth endpoints that create, replace, or update the current session outside ",[225,2098,488],{},[225,2100,498],{},[279,2102,2104],{"className":538,"code":2103,"filename":540,"language":541,"meta":285,"style":285},"const submitCustomLogin = useAction((body: { token: string }) =>\n  runWithSessionRefresh(() =>\n    $fetch('\u002Fapi\u002Fauth\u002Fsign-in\u002Fcustom', { method: 'POST', body }),\n  ),\n)\n\nawait submitCustomLogin.execute({ token })\n",[225,2105,2106,2137,2147,2172,2177,2181,2185],{"__ignoreMap":285},[289,2107,2108,2110,2113,2115,2117,2120,2122,2124,2126,2128,2130,2132,2134],{"class":291,"line":292},[289,2109,325],{"class":324},[289,2111,2112],{"class":332}," submitCustomLogin",[289,2114,778],{"class":349},[289,2116,1897],{"class":352},[289,2118,2119],{"class":550},"((",[289,2121,1951],{"class":881},[289,2123,886],{"class":885},[289,2125,329],{"class":550},[289,2127,683],{"class":910},[289,2129,886],{"class":885},[289,2131,890],{"class":889},[289,2133,1187],{"class":550},[289,2135,2136],{"class":324},"=>\n",[289,2138,2139,2142,2145],{"class":291,"line":321},[289,2140,2141],{"class":352},"  runWithSessionRefresh",[289,2143,2144],{"class":550},"(() ",[289,2146,2136],{"class":324},[289,2148,2149,2152,2154,2157,2159,2161,2163,2165,2167,2169],{"class":291,"line":359},[289,2150,2151],{"class":352},"    $fetch",[289,2153,784],{"class":550},[289,2155,2156],{"class":314},"'\u002Fapi\u002Fauth\u002Fsign-in\u002Fcustom'",[289,2158,1690],{"class":550},[289,2160,1494],{"class":1022},[289,2162,886],{"class":1091},[289,2164,1697],{"class":314},[289,2166,239],{"class":550},[289,2168,1951],{"class":910},[289,2170,2171],{"class":550}," }),\n",[289,2173,2174],{"class":291,"line":369},[289,2175,2176],{"class":550},"  ),\n",[289,2178,2179],{"class":291,"line":376},[289,2180,861],{"class":550},[289,2182,2183],{"class":291,"line":386},[289,2184,373],{"emptyLinePlaceholder":372},[289,2186,2187,2189,2191,2193,2195,2197,2199],{"class":291,"line":413},[289,2188,974],{"class":324},[289,2190,2112],{"class":910},[289,2192,628],{"class":550},[289,2194,915],{"class":352},[289,2196,918],{"class":550},[289,2198,683],{"class":910},[289,2200,927],{"class":550},[214,2202,2203,2204,2206],{},"The helper returns the callback result. It skips the session refresh when the callback throws or returns a Better Auth ",[225,2205,2085],{}," result.",[267,2208,2210],{"id":2209},"useauthclientaction","useAuthClientAction",[214,2212,2213,2214,2216],{},"Wraps plugin\u002Fclient methods from ",[225,2215,478],{}," in the same action handle pattern.",[279,2218,2221],{"className":538,"code":2219,"filename":2220,"language":541,"meta":285,"style":285},"const checkout = useAuthClientAction((client) => client.checkout)\n\nawait checkout.execute({ slug: 'pro' })\n\nif (checkout.status.value === 'error') {\n  console.error(checkout.error.value?.message)\n}\n","pages\u002Fpricing.vue",[225,2222,2223,2253,2257,2279,2283,2305,2331],{"__ignoreMap":285},[289,2224,2225,2227,2230,2232,2235,2237,2239,2242,2244,2246,2248,2251],{"class":291,"line":292},[289,2226,325],{"class":324},[289,2228,2229],{"class":332}," checkout",[289,2231,778],{"class":349},[289,2233,2234],{"class":352}," useAuthClientAction",[289,2236,2119],{"class":550},[289,2238,745],{"class":881},[289,2240,2241],{"class":550},") ",[289,2243,793],{"class":324},[289,2245,962],{"class":910},[289,2247,628],{"class":550},[289,2249,2250],{"class":1022},"checkout",[289,2252,861],{"class":550},[289,2254,2255],{"class":291,"line":321},[289,2256,373],{"emptyLinePlaceholder":372},[289,2258,2259,2261,2263,2265,2267,2269,2272,2274,2277],{"class":291,"line":359},[289,2260,974],{"class":324},[289,2262,2229],{"class":910},[289,2264,628],{"class":550},[289,2266,915],{"class":352},[289,2268,918],{"class":550},[289,2270,2271],{"class":1022},"slug",[289,2273,886],{"class":1091},[289,2275,2276],{"class":314}," 'pro'",[289,2278,927],{"class":550},[289,2280,2281],{"class":291,"line":369},[289,2282,373],{"emptyLinePlaceholder":372},[289,2284,2285,2287,2289,2291,2293,2295,2297,2299,2301,2303],{"class":291,"line":376},[289,2286,1996],{"class":324},[289,2288,1904],{"class":550},[289,2290,2250],{"class":910},[289,2292,628],{"class":550},[289,2294,2006],{"class":1022},[289,2296,628],{"class":550},[289,2298,1550],{"class":1022},[289,2300,2013],{"class":885},[289,2302,2016],{"class":314},[289,2304,902],{"class":550},[289,2306,2307,2309,2311,2313,2315,2317,2319,2321,2323,2325,2327,2329],{"class":291,"line":386},[289,2308,2023],{"class":910},[289,2310,628],{"class":550},[289,2312,1736],{"class":352},[289,2314,784],{"class":550},[289,2316,2250],{"class":910},[289,2318,628],{"class":550},[289,2320,1736],{"class":1022},[289,2322,628],{"class":550},[289,2324,1550],{"class":1022},[289,2326,979],{"class":550},[289,2328,2044],{"class":1022},[289,2330,861],{"class":550},[289,2332,2333],{"class":291,"line":413},[289,2334,932],{"class":550},[214,2336,2337],{},"Nested methods are supported via selector functions:",[279,2339,2342],{"className":538,"code":2340,"filename":2341,"language":541,"meta":285,"style":285},"const openPortal = useAuthClientAction((client) => client.customer.portal)\nawait openPortal.execute()\n","pages\u002Fapp\u002Findex.vue",[225,2343,2344,2377],{"__ignoreMap":285},[289,2345,2346,2348,2351,2353,2355,2357,2359,2361,2363,2365,2367,2370,2372,2375],{"class":291,"line":292},[289,2347,325],{"class":324},[289,2349,2350],{"class":332}," openPortal",[289,2352,778],{"class":349},[289,2354,2234],{"class":352},[289,2356,2119],{"class":550},[289,2358,745],{"class":881},[289,2360,2241],{"class":550},[289,2362,793],{"class":324},[289,2364,962],{"class":910},[289,2366,628],{"class":550},[289,2368,2369],{"class":1022},"customer",[289,2371,628],{"class":550},[289,2373,2374],{"class":1022},"portal",[289,2376,861],{"class":550},[289,2378,2379,2381,2383,2385,2387],{"class":291,"line":321},[289,2380,974],{"class":324},[289,2382,2350],{"class":910},[289,2384,628],{"class":550},[289,2386,915],{"class":352},[289,2388,356],{"class":550},[267,2390,257],{"id":2391},"usesignin",[214,2393,2394,2395,2398,2399,628],{},"Returns a keyed action handle for Better Auth ",[225,2396,2397],{},"signIn.*",". Each method handle exposes template-friendly async state, similar to composables like ",[225,2400,2401],{},"useFetch",[279,2403,2405],{"className":538,"code":2404,"filename":540,"language":541,"meta":285,"style":285},"const { execute, data, status, error } = useSignIn('email')\n\nawait execute(\n  { email, password, rememberMe },\n  {\n    onSuccess: () => navigateTo('\u002Fapp'),\n    onError: (ctx) => console.error(ctx.error),\n  },\n)\n\nif (status.value === 'error') {\n  console.error(error.value?.message)\n}\n",[225,2406,2407,2439,2443,2452,2469,2474,2494,2527,2532,2536,2541,2560,2583],{"__ignoreMap":285},[289,2408,2409,2411,2413,2415,2417,2419,2421,2423,2425,2427,2429,2431,2433,2435,2437],{"class":291,"line":292},[289,2410,325],{"class":324},[289,2412,329],{"class":550},[289,2414,915],{"class":332},[289,2416,239],{"class":550},[289,2418,1519],{"class":332},[289,2420,239],{"class":550},[289,2422,2006],{"class":332},[289,2424,239],{"class":550},[289,2426,1736],{"class":332},[289,2428,346],{"class":550},[289,2430,311],{"class":349},[289,2432,853],{"class":352},[289,2434,784],{"class":550},[289,2436,858],{"class":314},[289,2438,861],{"class":550},[289,2440,2441],{"class":291,"line":321},[289,2442,373],{"emptyLinePlaceholder":372},[289,2444,2445,2447,2450],{"class":291,"line":359},[289,2446,974],{"class":324},[289,2448,2449],{"class":352}," execute",[289,2451,1067],{"class":550},[289,2453,2454,2456,2458,2460,2462,2464,2467],{"class":291,"line":369},[289,2455,1072],{"class":550},[289,2457,882],{"class":910},[289,2459,239],{"class":550},[289,2461,895],{"class":910},[289,2463,239],{"class":550},[289,2465,2466],{"class":910},"rememberMe",[289,2468,1081],{"class":550},[289,2470,2471],{"class":291,"line":376},[289,2472,2473],{"class":550},"  {\n",[289,2475,2476,2479,2481,2483,2485,2487,2489,2492],{"class":291,"line":386},[289,2477,2478],{"class":352},"    onSuccess",[289,2480,886],{"class":1091},[289,2482,1094],{"class":550},[289,2484,793],{"class":324},[289,2486,1099],{"class":352},[289,2488,784],{"class":550},[289,2490,2491],{"class":314},"'\u002Fapp'",[289,2493,1273],{"class":550},[289,2495,2496,2499,2501,2503,2506,2508,2510,2513,2515,2517,2519,2521,2523,2525],{"class":291,"line":413},[289,2497,2498],{"class":352},"    onError",[289,2500,886],{"class":1091},[289,2502,1904],{"class":550},[289,2504,2505],{"class":881},"ctx",[289,2507,2241],{"class":550},[289,2509,793],{"class":324},[289,2511,2512],{"class":910}," console",[289,2514,628],{"class":550},[289,2516,1736],{"class":352},[289,2518,784],{"class":550},[289,2520,2505],{"class":910},[289,2522,628],{"class":550},[289,2524,1736],{"class":1022},[289,2526,1273],{"class":550},[289,2528,2529],{"class":291,"line":419},[289,2530,2531],{"class":550},"  },\n",[289,2533,2534],{"class":291,"line":429},[289,2535,861],{"class":550},[289,2537,2539],{"class":291,"line":2538},10,[289,2540,373],{"emptyLinePlaceholder":372},[289,2542,2544,2546,2548,2550,2552,2554,2556,2558],{"class":291,"line":2543},11,[289,2545,1996],{"class":324},[289,2547,1904],{"class":550},[289,2549,2006],{"class":910},[289,2551,628],{"class":550},[289,2553,1550],{"class":1022},[289,2555,2013],{"class":885},[289,2557,2016],{"class":314},[289,2559,902],{"class":550},[289,2561,2563,2565,2567,2569,2571,2573,2575,2577,2579,2581],{"class":291,"line":2562},12,[289,2564,2023],{"class":910},[289,2566,628],{"class":550},[289,2568,1736],{"class":352},[289,2570,784],{"class":550},[289,2572,1736],{"class":910},[289,2574,628],{"class":550},[289,2576,1550],{"class":1022},[289,2578,979],{"class":550},[289,2580,2044],{"class":1022},[289,2582,861],{"class":550},[289,2584,2586],{"class":291,"line":2585},13,[289,2587,932],{"class":550},[214,2589,2590,2591,2594],{},"For OAuth sign-in, use the ",[225,2592,2593],{},"social"," key and pass the provider in the payload:",[279,2596,2598],{"className":538,"code":2597,"filename":540,"language":541,"meta":285,"style":285},"await useSignIn('social').execute({ provider: 'github' })\n",[225,2599,2600],{"__ignoreMap":285},[289,2601,2602,2604,2606,2608,2611,2613,2615,2617,2620,2622,2625],{"class":291,"line":292},[289,2603,974],{"class":324},[289,2605,853],{"class":352},[289,2607,784],{"class":550},[289,2609,2610],{"class":314},"'social'",[289,2612,1174],{"class":550},[289,2614,915],{"class":352},[289,2616,918],{"class":550},[289,2618,2619],{"class":1022},"provider",[289,2621,886],{"class":1091},[289,2623,2624],{"class":314}," 'github'",[289,2626,927],{"class":550},[214,2628,2629,2630,2633,2634,2637,2638,2641],{},"Provider keys are inferred from ",[225,2631,2632],{},"server\u002Fauth.config.ts"," ",[225,2635,2636],{},"socialProviders"," keys.\nWhen ",[225,2639,2640],{},"callbackURL"," is omitted, the module auto-fills it using the same safe redirect order as other auth flows:",[609,2643,2644,2650,2654],{},[612,2645,2646,2647,2649],{},"safe query redirect (",[225,2648,1145],{},")",[612,2651,2652],{},[225,2653,1152],{},[612,2655,2656],{},"otherwise no fallback callback URL",[214,2658,2659],{},"Use renaming to avoid collisions when you use multiple methods in the same scope:",[279,2661,2663],{"className":538,"code":2662,"filename":540,"language":541,"meta":285,"style":285},"const {\n  execute: loginWithEmail,\n  status: statusEmail,\n  error: errorEmail,\n} = useSignIn('email')\n\nconst {\n  execute: loginWithPasskey,\n  status: statusPasskey,\n  error: errorPasskey,\n} = useSignIn('passkey')\n",[225,2664,2665,2671,2683,2695,2707,2722,2726,2732,2743,2754,2765],{"__ignoreMap":285},[289,2666,2667,2669],{"class":291,"line":292},[289,2668,325],{"class":324},[289,2670,796],{"class":550},[289,2672,2673,2676,2678,2681],{"class":291,"line":321},[289,2674,2675],{"class":1022},"  execute",[289,2677,1408],{"class":550},[289,2679,2680],{"class":332},"loginWithEmail",[289,2682,1755],{"class":550},[289,2684,2685,2688,2690,2693],{"class":291,"line":359},[289,2686,2687],{"class":1022},"  status",[289,2689,1408],{"class":550},[289,2691,2692],{"class":332},"statusEmail",[289,2694,1755],{"class":550},[289,2696,2697,2700,2702,2705],{"class":291,"line":369},[289,2698,2699],{"class":1022},"  error",[289,2701,1408],{"class":550},[289,2703,2704],{"class":332},"errorEmail",[289,2706,1755],{"class":550},[289,2708,2709,2712,2714,2716,2718,2720],{"class":291,"line":376},[289,2710,2711],{"class":550},"} ",[289,2713,311],{"class":349},[289,2715,853],{"class":352},[289,2717,784],{"class":550},[289,2719,858],{"class":314},[289,2721,861],{"class":550},[289,2723,2724],{"class":291,"line":386},[289,2725,373],{"emptyLinePlaceholder":372},[289,2727,2728,2730],{"class":291,"line":413},[289,2729,325],{"class":324},[289,2731,796],{"class":550},[289,2733,2734,2736,2738,2741],{"class":291,"line":419},[289,2735,2675],{"class":1022},[289,2737,1408],{"class":550},[289,2739,2740],{"class":332},"loginWithPasskey",[289,2742,1755],{"class":550},[289,2744,2745,2747,2749,2752],{"class":291,"line":429},[289,2746,2687],{"class":1022},[289,2748,1408],{"class":550},[289,2750,2751],{"class":332},"statusPasskey",[289,2753,1755],{"class":550},[289,2755,2756,2758,2760,2763],{"class":291,"line":2538},[289,2757,2699],{"class":1022},[289,2759,1408],{"class":550},[289,2761,2762],{"class":332},"errorPasskey",[289,2764,1755],{"class":550},[289,2766,2767,2769,2771,2773,2775,2778],{"class":291,"line":2543},[289,2768,2711],{"class":550},[289,2770,311],{"class":349},[289,2772,853],{"class":352},[289,2774,784],{"class":550},[289,2776,2777],{"class":314},"'passkey'",[289,2779,861],{"class":550},[214,2781,2782],{},"Each method returns an action handle:",[575,2784,2785,2788,2792,2798],{},[578,2786,2787],{"name":915,"type":2065},"Calls the underlying Better Auth method and never throws.",[578,2789,2070,2790,2074],{"name":2006,"type":2069},[225,2791,2073],{},[578,2793,2794,2795,2797],{"name":1519,"type":2077},"Last successful result. Cleared on each new ",[225,2796,2073],{}," and on errors.",[578,2799,2800,2801,1174],{"name":1736,"type":2081},"Normalized error for the latest call (cleared on new ",[225,2802,2073],{},[218,2804,2805,2806,2808,2809,1117,2811,628],{},"Each sign-in method has independent state. When you call ",[225,2807,2073],{}," multiple times, only the latest call updates ",[225,2810,2006],{},[225,2812,1736],{},[667,2814,2816],{"id":2815},"error-state-and-promise-behavior","Error state and promise behavior",[214,2818,273,2819,239,2821,246,2823,2825,2826,2829,2830,2832],{},[225,2820,2006],{},[225,2822,1519],{},[225,2824,1736],{}," as your source of truth. The action handle always sets ",[225,2827,2828],{},"status='error'"," and populates normalized ",[225,2831,1736],{}," when a sign-in attempt fails.",[218,2834,2835,2836,2838,2839,1117,2841,246,2843,2846],{},"Better Auth methods can signal failure by throwing or by resolving to a ",[225,2837,2085],{}," result. In both cases, the action handle updates ",[225,2840,2006],{},[225,2842,1736],{},[225,2844,2845],{},"await execute()"," always resolves.",[1323,2848,2850,2851,2649],{"id":2849},"recommended-flow-execute","Recommended flow (",[225,2852,915],{},[279,2854,2856],{"className":538,"code":2855,"filename":540,"language":541,"meta":285,"style":285},"const { execute, data, status, error } = useSignIn('email')\n\nawait execute({ email, password })\n\nif (status.value === 'error') {\n  console.error(error.value?.message)\n}\n\nif (status.value === 'success') {\n  console.log(data.value)\n}\n",[225,2857,2858,2890,2894,2910,2914,2932,2954,2958,2962,2981,3000],{"__ignoreMap":285},[289,2859,2860,2862,2864,2866,2868,2870,2872,2874,2876,2878,2880,2882,2884,2886,2888],{"class":291,"line":292},[289,2861,325],{"class":324},[289,2863,329],{"class":550},[289,2865,915],{"class":332},[289,2867,239],{"class":550},[289,2869,1519],{"class":332},[289,2871,239],{"class":550},[289,2873,2006],{"class":332},[289,2875,239],{"class":550},[289,2877,1736],{"class":332},[289,2879,346],{"class":550},[289,2881,311],{"class":349},[289,2883,853],{"class":352},[289,2885,784],{"class":550},[289,2887,858],{"class":314},[289,2889,861],{"class":550},[289,2891,2892],{"class":291,"line":321},[289,2893,373],{"emptyLinePlaceholder":372},[289,2895,2896,2898,2900,2902,2904,2906,2908],{"class":291,"line":359},[289,2897,974],{"class":324},[289,2899,2449],{"class":352},[289,2901,918],{"class":550},[289,2903,882],{"class":910},[289,2905,239],{"class":550},[289,2907,895],{"class":910},[289,2909,927],{"class":550},[289,2911,2912],{"class":291,"line":369},[289,2913,373],{"emptyLinePlaceholder":372},[289,2915,2916,2918,2920,2922,2924,2926,2928,2930],{"class":291,"line":376},[289,2917,1996],{"class":324},[289,2919,1904],{"class":550},[289,2921,2006],{"class":910},[289,2923,628],{"class":550},[289,2925,1550],{"class":1022},[289,2927,2013],{"class":885},[289,2929,2016],{"class":314},[289,2931,902],{"class":550},[289,2933,2934,2936,2938,2940,2942,2944,2946,2948,2950,2952],{"class":291,"line":386},[289,2935,2023],{"class":910},[289,2937,628],{"class":550},[289,2939,1736],{"class":352},[289,2941,784],{"class":550},[289,2943,1736],{"class":910},[289,2945,628],{"class":550},[289,2947,1550],{"class":1022},[289,2949,979],{"class":550},[289,2951,2044],{"class":1022},[289,2953,861],{"class":550},[289,2955,2956],{"class":291,"line":413},[289,2957,932],{"class":550},[289,2959,2960],{"class":291,"line":419},[289,2961,373],{"emptyLinePlaceholder":372},[289,2963,2964,2966,2968,2970,2972,2974,2976,2979],{"class":291,"line":429},[289,2965,1996],{"class":324},[289,2967,1904],{"class":550},[289,2969,2006],{"class":910},[289,2971,628],{"class":550},[289,2973,1550],{"class":1022},[289,2975,2013],{"class":885},[289,2977,2978],{"class":314}," 'success'",[289,2980,902],{"class":550},[289,2982,2983,2985,2987,2990,2992,2994,2996,2998],{"class":291,"line":2538},[289,2984,2023],{"class":910},[289,2986,628],{"class":550},[289,2988,2989],{"class":352},"log",[289,2991,784],{"class":550},[289,2993,1519],{"class":910},[289,2995,628],{"class":550},[289,2997,1550],{"class":1022},[289,2999,861],{"class":550},[289,3001,3002],{"class":291,"line":2543},[289,3003,932],{"class":550},[267,3005,261],{"id":3006},"usesignup",[214,3008,3009,3010,3012,3013,628],{},"Same API as ",[225,3011,257],{},", but wraps Better Auth ",[225,3014,3015],{},"signUp.*",[279,3017,3020],{"className":538,"code":3018,"filename":3019,"language":541,"meta":285,"style":285},"const { execute, data, status, error } = useSignUp('email')\n\nawait execute(\n  { email, password, name },\n  {\n    onSuccess: () => navigateTo('\u002Fwelcome'),\n    onError: (ctx) => console.error(ctx.error),\n  },\n)\n","pages\u002Fsignup.vue",[225,3021,3022,3055,3059,3067,3083,3087,3106,3136,3140],{"__ignoreMap":285},[289,3023,3024,3026,3028,3030,3032,3034,3036,3038,3040,3042,3044,3046,3049,3051,3053],{"class":291,"line":292},[289,3025,325],{"class":324},[289,3027,329],{"class":550},[289,3029,915],{"class":332},[289,3031,239],{"class":550},[289,3033,1519],{"class":332},[289,3035,239],{"class":550},[289,3037,2006],{"class":332},[289,3039,239],{"class":550},[289,3041,1736],{"class":332},[289,3043,346],{"class":550},[289,3045,311],{"class":349},[289,3047,3048],{"class":352}," useSignUp",[289,3050,784],{"class":550},[289,3052,858],{"class":314},[289,3054,861],{"class":550},[289,3056,3057],{"class":291,"line":321},[289,3058,373],{"emptyLinePlaceholder":372},[289,3060,3061,3063,3065],{"class":291,"line":359},[289,3062,974],{"class":324},[289,3064,2449],{"class":352},[289,3066,1067],{"class":550},[289,3068,3069,3071,3073,3075,3077,3079,3081],{"class":291,"line":369},[289,3070,1072],{"class":550},[289,3072,882],{"class":910},[289,3074,239],{"class":550},[289,3076,895],{"class":910},[289,3078,239],{"class":550},[289,3080,1411],{"class":910},[289,3082,1081],{"class":550},[289,3084,3085],{"class":291,"line":376},[289,3086,2473],{"class":550},[289,3088,3089,3091,3093,3095,3097,3099,3101,3104],{"class":291,"line":386},[289,3090,2478],{"class":352},[289,3092,886],{"class":1091},[289,3094,1094],{"class":550},[289,3096,793],{"class":324},[289,3098,1099],{"class":352},[289,3100,784],{"class":550},[289,3102,3103],{"class":314},"'\u002Fwelcome'",[289,3105,1273],{"class":550},[289,3107,3108,3110,3112,3114,3116,3118,3120,3122,3124,3126,3128,3130,3132,3134],{"class":291,"line":413},[289,3109,2498],{"class":352},[289,3111,886],{"class":1091},[289,3113,1904],{"class":550},[289,3115,2505],{"class":881},[289,3117,2241],{"class":550},[289,3119,793],{"class":324},[289,3121,2512],{"class":910},[289,3123,628],{"class":550},[289,3125,1736],{"class":352},[289,3127,784],{"class":550},[289,3129,2505],{"class":910},[289,3131,628],{"class":550},[289,3133,1736],{"class":1022},[289,3135,1273],{"class":550},[289,3137,3138],{"class":291,"line":419},[289,3139,2531],{"class":550},[289,3141,3142],{"class":291,"line":429},[289,3143,861],{"class":550},[214,3145,3146,3148,3149,239,3151,239,3153,239,3155,3157,3158,628],{},[225,3147,261],{}," returns the same action handle shape (",[225,3150,915],{},[225,3152,2006],{},[225,3154,1519],{},[225,3156,1736],{},") and follows the same error normalization semantics as ",[225,3159,257],{},[1469,3161],{"title":3162,"to":84},"OAuth Providers guide",[267,3164,3166],{"id":3165},"usesignout","useSignOut",[214,3168,3169,3170,3173,3174,1117,3176,628],{},"Wraps ",[225,3171,3172],{},"useUserSession().signOut()"," with the same action handle shape as ",[225,3175,488],{},[225,3177,498],{},[279,3179,3182],{"className":281,"code":3180,"filename":3181,"language":284,"meta":285,"style":285},"\u003Cscript setup lang=\"ts\">\nconst { execute: signOut, status, error } = useSignOut()\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cbutton :disabled=\"status === 'pending'\" @click=\"signOut()\">\n    {{ status === 'pending' ? 'Signing out…' : 'Sign out' }}\n  \u003C\u002Fbutton>\n  \u003Cp v-if=\"error\" role=\"alert\">{{ error.message }}\u003C\u002Fp>\n\u003C\u002Ftemplate>\n","components\u002FSignOutButton.vue",[225,3183,3184,3200,3229,3237,3241,3249,3271,3276,3284,3317],{"__ignoreMap":285},[289,3185,3186,3188,3190,3192,3194,3196,3198],{"class":291,"line":292},[289,3187,296],{"class":295},[289,3189,300],{"class":299},[289,3191,304],{"class":303},[289,3193,307],{"class":303},[289,3195,311],{"class":310},[289,3197,315],{"class":314},[289,3199,318],{"class":295},[289,3201,3202,3204,3206,3208,3210,3212,3214,3216,3218,3220,3222,3224,3227],{"class":291,"line":321},[289,3203,325],{"class":324},[289,3205,329],{"class":328},[289,3207,915],{"class":1022},[289,3209,1408],{"class":328},[289,3211,343],{"class":332},[289,3213,239],{"class":328},[289,3215,2006],{"class":332},[289,3217,239],{"class":328},[289,3219,1736],{"class":332},[289,3221,346],{"class":328},[289,3223,311],{"class":349},[289,3225,3226],{"class":352}," useSignOut",[289,3228,356],{"class":328},[289,3230,3231,3233,3235],{"class":291,"line":359},[289,3232,362],{"class":295},[289,3234,300],{"class":299},[289,3236,318],{"class":295},[289,3238,3239],{"class":291,"line":369},[289,3240,373],{"emptyLinePlaceholder":372},[289,3242,3243,3245,3247],{"class":291,"line":376},[289,3244,296],{"class":295},[289,3246,381],{"class":299},[289,3248,318],{"class":295},[289,3250,3251,3253,3255,3258,3260,3263,3265,3267,3269],{"class":291,"line":386},[289,3252,389],{"class":295},[289,3254,392],{"class":299},[289,3256,3257],{"class":303}," :disabled",[289,3259,311],{"class":310},[289,3261,3262],{"class":314},"\"status === 'pending'\"",[289,3264,403],{"class":303},[289,3266,311],{"class":310},[289,3268,408],{"class":314},[289,3270,318],{"class":295},[289,3272,3273],{"class":291,"line":413},[289,3274,3275],{"class":328},"    {{ status === 'pending' ? 'Signing out…' : 'Sign out' }}\n",[289,3277,3278,3280,3282],{"class":291,"line":419},[289,3279,422],{"class":295},[289,3281,392],{"class":299},[289,3283,318],{"class":295},[289,3285,3286,3288,3290,3292,3294,3297,3300,3302,3305,3308,3311,3313,3315],{"class":291,"line":429},[289,3287,389],{"class":295},[289,3289,214],{"class":299},[289,3291,395],{"class":303},[289,3293,311],{"class":310},[289,3295,3296],{"class":314},"\"error\"",[289,3298,3299],{"class":303}," role",[289,3301,311],{"class":310},[289,3303,3304],{"class":314},"\"alert\"",[289,3306,3307],{"class":295},">",[289,3309,3310],{"class":328},"{{ error.message }}",[289,3312,362],{"class":295},[289,3314,214],{"class":299},[289,3316,318],{"class":295},[289,3318,3319,3321,3323],{"class":291,"line":2538},[289,3320,362],{"class":295},[289,3322,381],{"class":299},[289,3324,318],{"class":295},[214,3326,3327,3328,3330,3331,3334],{},"On success, it clears the local session and follows ",[225,3329,1226],{}," when configured. Pass ",[225,3332,3333],{},"execute({ onSuccess })"," to run your own callback instead of the configured redirect. The action stays pending until the callback completes.",[214,3336,3337,3338,3340,3341,1117,3344,3346,3347,3349,3350,258,3352,3354],{},"On a failed sign-out request, ",[225,3339,2006],{}," becomes ",[225,3342,3343],{},"'error'",[225,3345,1736],{}," contains the normalized error. The session remains intact, and neither the success callback nor redirect runs. As with the other action composables, ",[225,3348,2073],{}," resolves after capturing errors; read ",[225,3351,2006],{},[225,3353,1736],{}," to determine the outcome. Concurrent calls share the existing sign-out request.",[214,3356,3357,3358,3360,3361,3364],{},"Create the composable during setup; call ",[225,3359,2073],{}," only on the client. Signing out an anonymous user does not delete their account. Use the anonymous plugin's ",[225,3362,3363],{},"deleteAnonymousUser"," method explicitly when that is your application's policy.",[267,3366,3368],{"id":3367},"related-pages","Related pages",[609,3370,3371,3376,3381],{},[612,3372,3373],{},[3374,3375,52],"a",{"href":53},[612,3377,3378],{},[3374,3379,3380],{"href":147},"Server utilities",[612,3382,3383],{},[3374,3384,150],{"href":151},[3386,3387,3388],"style",{},"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 .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 .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 .sfT9l, html code.shiki .sfT9l{--shiki-light:#4078F2;--shiki-default:#36F9F6;--shiki-dark:#36F9F6}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 .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 .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}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 .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 .s3ZNE, html code.shiki .s3ZNE{--shiki-light:#986801;--shiki-default:#F97E72;--shiki-dark:#F97E72}",{"title":285,"searchDepth":321,"depth":321,"links":3390},[3391,3392,3393,3394,3397,3400,3404,3405,3406,3407,3408,3409,3412,3413,3414],{"id":269,"depth":321,"text":270},{"id":438,"depth":321,"text":439},{"id":531,"depth":321,"text":532},{"id":658,"depth":321,"text":659,"children":3395},[3396],{"id":669,"depth":359,"text":670},{"id":943,"depth":321,"text":253,"children":3398},[3399],{"id":991,"depth":359,"text":992},{"id":1123,"depth":321,"text":1124,"children":3401},[3402,3403],{"id":1201,"depth":359,"text":343},{"id":1280,"depth":359,"text":1283},{"id":1474,"depth":321,"text":1475},{"id":1705,"depth":321,"text":1706},{"id":1875,"depth":321,"text":1876},{"id":2089,"depth":321,"text":2090},{"id":2209,"depth":321,"text":2210},{"id":2391,"depth":321,"text":257,"children":3410},[3411],{"id":2815,"depth":359,"text":2816},{"id":3006,"depth":321,"text":261},{"id":3165,"depth":321,"text":3166},{"id":3367,"depth":321,"text":3368},"API reference for client-side composables.","md",null,{},{"title":142,"description":3415},"-S4G2aFlatg0LHBWPRibafiDZ3Rf8biuW3wj3W4qMmU",[3422,3424],{"title":133,"path":134,"stem":135,"description":3423,"children":-1},"Translate authentication errors with @nuxtjs\u002Fi18n.",{"title":146,"path":147,"stem":148,"description":3425,"children":-1},"API reference for server-side helpers available in Nitro event handlers.",1791215142598]