[{"data":1,"prerenderedAt":2627},["ShallowReactive",2],{"navigation_docs":3,"-api-composables":152,"-api-composables-surround":2622},[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":137,"body":154,"description":2616,"extension":2617,"links":2618,"meta":2619,"navigation":464,"path":138,"seo":2620,"stem":139,"__hash__":2621},"docs/5.api/1.composables.md",{"type":155,"value":156,"toc":2601},"minimark",[157,162,166,234,267,333,338,344,349,406,410,421,544,553,576,605,611,621,661,673,678,681,695,708,713,751,757,760,779,783,788,791,805,809,852,858,861,885,891,907,911,915,918,935,945,1063,1083,1152,1155,1159,1162,1228,1235,1238,1263,1325,1329,1332,1512,1523,1549,1553,1559,1678,1681,1732,1735,1744,1932,1939,1972,1987,2002,2005,2125,2128,2148,2158,2162,2178,2192,2198,2349,2438,2441,2450,2578,2594,2597],[158,159,161],"h2",{"id":160},"useusersession","useUserSession",[163,164,165],"p",{},"The primary composable for accessing authentication state. Returns reactive user, session, and auth client.",[167,168,174],"pre",{"className":169,"code":170,"filename":171,"language":172,"meta":173,"style":173},"language-ts shiki shiki-themes one-light synthwave-84 synthwave-84","const { loggedIn, user, session, client, signIn, signOut } = useUserSession()\n","pages/login.vue","ts","",[175,176,177],"code",{"__ignoreMap":173},[178,179,182,186,190,194,197,200,202,205,207,210,212,215,217,220,223,227,231],"span",{"class":180,"line":181},"line",1,[178,183,185],{"class":184},"sqe1H","const",[178,187,189],{"class":188},"s17Py"," { ",[178,191,193],{"class":192},"s6Rhl","loggedIn",[178,195,196],{"class":188},", ",[178,198,199],{"class":192},"user",[178,201,196],{"class":188},[178,203,204],{"class":192},"session",[178,206,196],{"class":188},[178,208,209],{"class":192},"client",[178,211,196],{"class":188},[178,213,214],{"class":192},"signIn",[178,216,196],{"class":188},[178,218,219],{"class":192},"signOut",[178,221,222],{"class":188}," } ",[178,224,226],{"class":225},"sQBpM","=",[178,228,230],{"class":229},"sfT9l"," useUserSession",[178,232,233],{"class":188},"()\n",[235,236,237,245,249,253,259],"field-group",{},[238,239,241,244],"field",{"name":193,"type":240},"ComputedRef\u003Cboolean>",[175,242,243],{},"true"," if the user is currently authenticated.",[238,246,248],{"name":199,"type":247},"Ref\u003CAuthUser | null>","The current user object, inferred from your config.",[238,250,252],{"name":204,"type":251},"Ref\u003CAuthSession | null>","The current session object.",[238,254,256,258],{"name":255,"type":240},"ready",[175,257,243],{}," when initial session resolution is complete (from SSR hydration or client fetch).",[238,260,262,263,266],{"name":209,"type":261},"AuthClient | null","Direct access to the Better Auth client instance. Available on client runtime; ",[175,264,265],{},"null"," during SSR/server runtime.",[268,269,270,279,282],"note",{},[163,271,272,275,276,278],{},[175,273,274],{},"useUserSession().client"," is browser-only. During SSR/server runtime it is ",[175,277,265],{},".",[163,280,281],{},"For SSR-safe auth access:",[283,284,285,305,315],"ul",{},[286,287,288,289,196,291,196,293,196,295,297,298,301,302,278],"li",{},"Use ",[175,290,199],{},[175,292,204],{},[175,294,193],{},[175,296,255],{},", and ",[175,299,300],{},"fetchSession"," from ",[175,303,304],{},"useUserSession()",[286,306,288,307,310,311,314],{},[175,308,309],{},"useAuthRequestFetch()"," or ",[175,312,313],{},"useAuthAsyncData()"," for auth-bound data in pages.",[286,316,317,318,196,321,324,325,328,329,332],{},"Use server helpers like ",[175,319,320],{},"serverAuth(event)",[175,322,323],{},"getUserSession(event)",", or ",[175,326,327],{},"requireUserSession(event)"," in ",[175,330,331],{},"server/"," handlers.",[334,335,337],"h3",{"id":336},"methods","Methods",[339,340,342],"h4",{"id":341},"signin",[175,343,214],{},[163,345,346,347,278],{},"Proxies Better Auth ",[175,348,214],{},[167,350,352],{"className":169,"code":351,"language":172,"meta":173,"style":173},"await signIn.email({\n  email: 'user@example.com',\n  password: 'password'\n})\n",[175,353,354,371,389,400],{"__ignoreMap":173},[178,355,356,359,363,365,368],{"class":180,"line":181},[178,357,358],{"class":184},"await",[178,360,362],{"class":361},"svFNh"," signIn",[178,364,278],{"class":188},[178,366,367],{"class":229},"email",[178,369,370],{"class":188},"({\n",[178,372,374,378,382,386],{"class":180,"line":373},2,[178,375,377],{"class":376},"sYvLG","  email",[178,379,381],{"class":380},"sVnqq",":",[178,383,385],{"class":384},"sPAZv"," 'user@example.com'",[178,387,388],{"class":188},",\n",[178,390,392,395,397],{"class":180,"line":391},3,[178,393,394],{"class":376},"  password",[178,396,381],{"class":380},[178,398,399],{"class":384}," 'password'\n",[178,401,403],{"class":180,"line":402},4,[178,404,405],{"class":188},"})\n",[334,407,409],{"id":408},"promise-behavior","Promise Behavior",[163,411,412,413,415,416,420],{},"Methods like ",[175,414,214],{}," return a promise that resolves when the ",[417,418,419],"strong",{},"server responds",", not when local state updates.",[167,422,424],{"className":169,"code":423,"language":172,"meta":173,"style":173},"// This awaits the server response\nawait client.signIn.email({ email, password })\n\n// Local state updates asynchronously after\n// Use onSuccess callback for actions that depend on updated state\nawait client.signIn.email(\n  { email, password },\n  { onSuccess: () => navigateTo('/dashboard') }\n)\n",[175,425,426,432,460,466,471,477,495,510,538],{"__ignoreMap":173},[178,427,428],{"class":180,"line":181},[178,429,431],{"class":430},"st7cf","// This awaits the server response\n",[178,433,434,436,439,441,443,445,447,450,452,454,457],{"class":180,"line":373},[178,435,358],{"class":184},[178,437,438],{"class":361}," client",[178,440,278],{"class":188},[178,442,214],{"class":376},[178,444,278],{"class":188},[178,446,367],{"class":229},[178,448,449],{"class":188},"({ ",[178,451,367],{"class":361},[178,453,196],{"class":188},[178,455,456],{"class":361},"password",[178,458,459],{"class":188}," })\n",[178,461,462],{"class":180,"line":391},[178,463,465],{"emptyLinePlaceholder":464},true,"\n",[178,467,468],{"class":180,"line":402},[178,469,470],{"class":430},"// Local state updates asynchronously after\n",[178,472,474],{"class":180,"line":473},5,[178,475,476],{"class":430},"// Use onSuccess callback for actions that depend on updated state\n",[178,478,480,482,484,486,488,490,492],{"class":180,"line":479},6,[178,481,358],{"class":184},[178,483,438],{"class":361},[178,485,278],{"class":188},[178,487,214],{"class":376},[178,489,278],{"class":188},[178,491,367],{"class":229},[178,493,494],{"class":188},"(\n",[178,496,498,501,503,505,507],{"class":180,"line":497},7,[178,499,500],{"class":188},"  { ",[178,502,367],{"class":361},[178,504,196],{"class":188},[178,506,456],{"class":361},[178,508,509],{"class":188}," },\n",[178,511,513,515,518,520,523,526,529,532,535],{"class":180,"line":512},8,[178,514,500],{"class":188},[178,516,517],{"class":229},"onSuccess",[178,519,381],{"class":380},[178,521,522],{"class":188}," () ",[178,524,525],{"class":184},"=>",[178,527,528],{"class":229}," navigateTo",[178,530,531],{"class":188},"(",[178,533,534],{"class":384},"'/dashboard'",[178,536,537],{"class":188},") }\n",[178,539,541],{"class":180,"line":540},9,[178,542,543],{"class":188},")\n",[163,545,546,547,549,550,552],{},"If no ",[175,548,517],{}," callback is provided in method options, ",[175,551,214],{}," will:",[283,554,555,566,573],{},[286,556,557,558,561,562,565],{},"navigate to ",[175,559,560],{},"route.query.redirect"," (or custom ",[175,563,564],{},"auth.redirectQueryKey",") when it is a local path",[286,567,568,569,572],{},"otherwise fallback to ",[175,570,571],{},"auth.redirects.authenticated"," when configured and an authenticated session is established",[286,574,575],{},"otherwise no automatic navigation",[167,577,579],{"className":169,"code":578,"language":172,"meta":173,"style":173},"await signIn.email({ email, password }) // redirects to safe `?redirect=...` or auth.redirects.authenticated\n",[175,580,581],{"__ignoreMap":173},[178,582,583,585,587,589,591,593,595,597,599,602],{"class":180,"line":181},[178,584,358],{"class":184},[178,586,362],{"class":361},[178,588,278],{"class":188},[178,590,367],{"class":229},[178,592,449],{"class":188},[178,594,367],{"class":361},[178,596,196],{"class":188},[178,598,456],{"class":361},[178,600,601],{"class":188}," }) ",[178,603,604],{"class":430},"// redirects to safe `?redirect=...` or auth.redirects.authenticated\n",[339,606,608],{"id":607},"signup",[175,609,610],{},"signUp",[163,612,346,613,615,616,618,619,278],{},[175,614,610],{}," with the same ",[175,617,517],{}," behavior as ",[175,620,214],{},[167,622,624],{"className":169,"code":623,"language":172,"meta":173,"style":173},"await signUp.email({\n  email: 'user@example.com',\n  password: 'password'\n})\n",[175,625,626,639,649,657],{"__ignoreMap":173},[178,627,628,630,633,635,637],{"class":180,"line":181},[178,629,358],{"class":184},[178,631,632],{"class":361}," signUp",[178,634,278],{"class":188},[178,636,367],{"class":229},[178,638,370],{"class":188},[178,640,641,643,645,647],{"class":180,"line":373},[178,642,377],{"class":376},[178,644,381],{"class":380},[178,646,385],{"class":384},[178,648,388],{"class":188},[178,650,651,653,655],{"class":180,"line":391},[178,652,394],{"class":376},[178,654,381],{"class":380},[178,656,399],{"class":384},[178,658,659],{"class":180,"line":402},[178,660,405],{"class":188},[163,662,663,664,666,667,669,670,672],{},"Like ",[175,665,214],{},", if no callback is provided, ",[175,668,610],{}," follows the same redirect precedence:\nquery redirect > ",[175,671,571],{}," (only when authenticated) > no auto-redirect.",[339,674,676],{"id":675},"signout",[175,677,219],{},[163,679,680],{},"Signs the user out and clears the local session state.",[167,682,684],{"className":169,"code":683,"language":172,"meta":173,"style":173},"await signOut()\n",[175,685,686],{"__ignoreMap":173},[178,687,688,690,693],{"class":180,"line":181},[178,689,358],{"class":184},[178,691,692],{"class":229}," signOut",[178,694,233],{"class":188},[163,696,697,698,701,702,705,706,278],{},"If ",[175,699,700],{},"auth.redirects.logout"," is configured, ",[175,703,704],{},"signOut()"," will navigate there automatically (client-side), unless you provide ",[175,707,517],{},[163,709,710],{},[417,711,712],{},"Options",[167,714,716],{"className":169,"code":715,"language":172,"meta":173,"style":173},"await signOut({\n  onSuccess: () => navigateTo('/'),\n})\n",[175,717,718,726,747],{"__ignoreMap":173},[178,719,720,722,724],{"class":180,"line":181},[178,721,358],{"class":184},[178,723,692],{"class":229},[178,725,370],{"class":188},[178,727,728,731,733,735,737,739,741,744],{"class":180,"line":373},[178,729,730],{"class":229},"  onSuccess",[178,732,381],{"class":380},[178,734,522],{"class":188},[178,736,525],{"class":184},[178,738,528],{"class":229},[178,740,531],{"class":188},[178,742,743],{"class":384},"'/'",[178,745,746],{"class":188},"),\n",[178,748,749],{"class":180,"line":391},[178,750,405],{"class":188},[334,752,754],{"id":753},"waitforsession",[175,755,756],{},"waitForSession()",[163,758,759],{},"Waits for session state to be ready. Resolves when user is logged in or after 5 second timeout.",[167,761,763],{"className":169,"code":762,"language":172,"meta":173,"style":173},"await waitForSession()\n// Session is now ready (or timed out)\n",[175,764,765,774],{"__ignoreMap":173},[178,766,767,769,772],{"class":180,"line":181},[178,768,358],{"class":184},[178,770,771],{"class":229}," waitForSession",[178,773,233],{"class":188},[178,775,776],{"class":180,"line":373},[178,777,778],{"class":430},"// Session is now ready (or timed out)\n",[780,781,782],"tip",{},"Use this when you need to ensure session state before proceeding. The function always resolves - it doesn't throw or return a value.",[339,784,786],{"id":785},"fetchsession",[175,787,300],{},[163,789,790],{},"Manually triggers a session refresh. Useful if you've updated user data on the server via a side channel.",[167,792,794],{"className":169,"code":793,"language":172,"meta":173,"style":173},"await fetchSession()\n",[175,795,796],{"__ignoreMap":173},[178,797,798,800,803],{"class":180,"line":181},[178,799,358],{"class":184},[178,801,802],{"class":229}," fetchSession",[178,804,233],{"class":188},[163,806,807],{},[417,808,712],{},[167,810,812],{"className":169,"code":811,"language":172,"meta":173,"style":173},"await fetchSession({\n  headers, // optional HeadersInit\n  force: true, // disables Better Auth cookie cache for this fetch\n})\n",[175,813,814,822,832,848],{"__ignoreMap":173},[178,815,816,818,820],{"class":180,"line":181},[178,817,358],{"class":184},[178,819,802],{"class":229},[178,821,370],{"class":188},[178,823,824,827,829],{"class":180,"line":373},[178,825,826],{"class":361},"  headers",[178,828,196],{"class":188},[178,830,831],{"class":430},"// optional HeadersInit\n",[178,833,834,837,839,843,845],{"class":180,"line":391},[178,835,836],{"class":376},"  force",[178,838,381],{"class":380},[178,840,842],{"class":841},"s3ZNE"," true",[178,844,196],{"class":188},[178,846,847],{"class":430},"// disables Better Auth cookie cache for this fetch\n",[178,849,850],{"class":180,"line":402},[178,851,405],{"class":188},[339,853,855],{"id":854},"updateuser",[175,856,857],{},"updateUser",[163,859,860],{},"Updates the user on the server and optimistically patches local state. Local state reverts if the server call fails.",[167,862,864],{"className":169,"code":863,"language":172,"meta":173,"style":173},"await updateUser({ name: 'New Name' })\n",[175,865,866],{"__ignoreMap":173},[178,867,868,870,873,875,878,880,883],{"class":180,"line":181},[178,869,358],{"class":184},[178,871,872],{"class":229}," updateUser",[178,874,449],{"class":188},[178,876,877],{"class":376},"name",[178,879,381],{"class":380},[178,881,882],{"class":384}," 'New Name'",[178,884,459],{"class":188},[268,886,887,888,890],{},"During SSR, ",[175,889,857],{}," only patches local state since no client is available.",[780,892,893,896,897,899,900,902,903,906],{},[417,894,895],{},"Reactivity",": ",[175,898,199],{}," and ",[175,901,204],{}," are global states using ",[175,904,905],{},"useState",". Changes in one component are instantly reflected everywhere.",[908,909],"read-more",{"title":910,"to":146},"BetterAuthState component",[158,912,914],{"id":913},"useauthrequestfetch","useAuthRequestFetch",[163,916,917],{},"Returns Nuxt's request-scoped fetch function. On SSR it preserves request context (including cookies); on client it behaves like regular fetch.",[163,919,920,922,923,926,927,930,931,934],{},[175,921,309],{}," defaults to ",[175,924,925],{},"GET",". For endpoints that only allow ",[175,928,929],{},"POST"," (or another method), pass ",[175,932,933],{},"method"," explicitly to preserve response type inference.",[163,936,937,938,899,941,944],{},"When endpoint typing is enabled, ",[175,939,940],{},"useFetch('/api/auth/...')",[175,942,943],{},"useLazyFetch('/api/auth/...')"," infer payloads directly from your Better Auth config:",[167,946,949],{"className":169,"code":947,"filename":948,"language":172,"meta":173,"style":173},"const { data: customerState } = await useFetch('/api/auth/customer/state')\ncustomerState.value?.activeSubscriptions[0]?.toUpperCase()\n\nconst { data: customerById } = await useLazyFetch('/api/auth/customer/123/state')\ncustomerById.value?.customerId.toUpperCase()\n","pages/app.vue",[175,950,951,982,1011,1015,1044],{"__ignoreMap":173},[178,952,953,955,957,960,962,965,967,969,972,975,977,980],{"class":180,"line":181},[178,954,185],{"class":184},[178,956,189],{"class":188},[178,958,959],{"class":376},"data",[178,961,896],{"class":188},[178,963,964],{"class":192},"customerState",[178,966,222],{"class":188},[178,968,226],{"class":225},[178,970,971],{"class":184}," await",[178,973,974],{"class":229}," useFetch",[178,976,531],{"class":188},[178,978,979],{"class":384},"'/api/auth/customer/state'",[178,981,543],{"class":188},[178,983,984,986,988,991,994,997,1000,1003,1006,1009],{"class":180,"line":373},[178,985,964],{"class":361},[178,987,278],{"class":188},[178,989,990],{"class":376},"value",[178,992,993],{"class":188},"?.",[178,995,996],{"class":376},"activeSubscriptions",[178,998,999],{"class":188},"[",[178,1001,1002],{"class":841},"0",[178,1004,1005],{"class":188},"]?.",[178,1007,1008],{"class":229},"toUpperCase",[178,1010,233],{"class":188},[178,1012,1013],{"class":180,"line":391},[178,1014,465],{"emptyLinePlaceholder":464},[178,1016,1017,1019,1021,1023,1025,1028,1030,1032,1034,1037,1039,1042],{"class":180,"line":402},[178,1018,185],{"class":184},[178,1020,189],{"class":188},[178,1022,959],{"class":376},[178,1024,896],{"class":188},[178,1026,1027],{"class":192},"customerById",[178,1029,222],{"class":188},[178,1031,226],{"class":225},[178,1033,971],{"class":184},[178,1035,1036],{"class":229}," useLazyFetch",[178,1038,531],{"class":188},[178,1040,1041],{"class":384},"'/api/auth/customer/123/state'",[178,1043,543],{"class":188},[178,1045,1046,1048,1050,1052,1054,1057,1059,1061],{"class":180,"line":473},[178,1047,1027],{"class":361},[178,1049,278],{"class":188},[178,1051,990],{"class":376},[178,1053,993],{"class":188},[178,1055,1056],{"class":376},"customerId",[178,1058,278],{"class":188},[178,1060,1008],{"class":229},[178,1062,233],{"class":188},[163,1064,1065,1066,1069,1070,1073,1074,1077,1078,899,1081,278],{},"Global ",[175,1067,1068],{},"$fetch"," keeps Nitro ",[175,1071,1072],{},"InternalApi"," response inference, but path autocomplete is best on ",[175,1075,1076],{},"useFetch","/",[175,1079,1080],{},"useLazyFetch",[175,1082,914],{},[167,1084,1086],{"className":169,"code":1085,"filename":948,"language":172,"meta":173,"style":173},"const requestFetch = useAuthRequestFetch()\nconst state = await requestFetch('/api/auth/customer/state')\nconst postOnly = await requestFetch('/api/auth/customer/post-only', { method: 'POST' })\n",[175,1087,1088,1103,1122],{"__ignoreMap":173},[178,1089,1090,1092,1095,1098,1101],{"class":180,"line":181},[178,1091,185],{"class":184},[178,1093,1094],{"class":192}," requestFetch",[178,1096,1097],{"class":225}," =",[178,1099,1100],{"class":229}," useAuthRequestFetch",[178,1102,233],{"class":188},[178,1104,1105,1107,1110,1112,1114,1116,1118,1120],{"class":180,"line":373},[178,1106,185],{"class":184},[178,1108,1109],{"class":192}," state",[178,1111,1097],{"class":225},[178,1113,971],{"class":184},[178,1115,1094],{"class":229},[178,1117,531],{"class":188},[178,1119,979],{"class":384},[178,1121,543],{"class":188},[178,1123,1124,1126,1129,1131,1133,1135,1137,1140,1143,1145,1147,1150],{"class":180,"line":391},[178,1125,185],{"class":184},[178,1127,1128],{"class":192}," postOnly",[178,1130,1097],{"class":225},[178,1132,971],{"class":184},[178,1134,1094],{"class":229},[178,1136,531],{"class":188},[178,1138,1139],{"class":384},"'/api/auth/customer/post-only'",[178,1141,1142],{"class":188},", { ",[178,1144,933],{"class":376},[178,1146,381],{"class":380},[178,1148,1149],{"class":384}," 'POST'",[178,1151,459],{"class":188},[163,1153,1154],{},"Use this when you need low-level control and want to build your own data loader pattern.",[158,1156,1158],{"id":1157},"useauthasyncdata","useAuthAsyncData",[163,1160,1161],{},"SSR-safe helper for auth-bound data loading.",[167,1163,1165],{"className":169,"code":1164,"filename":948,"language":172,"meta":173,"style":173},"const { data: customerState, pending, error } = await useAuthAsyncData(\n  'customer-state',\n  requestFetch => requestFetch('/api/auth/customer/state'),\n)\n",[175,1166,1167,1200,1207,1224],{"__ignoreMap":173},[178,1168,1169,1171,1173,1175,1177,1179,1181,1184,1186,1189,1191,1193,1195,1198],{"class":180,"line":181},[178,1170,185],{"class":184},[178,1172,189],{"class":188},[178,1174,959],{"class":376},[178,1176,896],{"class":188},[178,1178,964],{"class":192},[178,1180,196],{"class":188},[178,1182,1183],{"class":192},"pending",[178,1185,196],{"class":188},[178,1187,1188],{"class":192},"error",[178,1190,222],{"class":188},[178,1192,226],{"class":225},[178,1194,971],{"class":184},[178,1196,1197],{"class":229}," useAuthAsyncData",[178,1199,494],{"class":188},[178,1201,1202,1205],{"class":180,"line":373},[178,1203,1204],{"class":384},"  'customer-state'",[178,1206,388],{"class":188},[178,1208,1209,1213,1216,1218,1220,1222],{"class":180,"line":391},[178,1210,1212],{"class":1211},"sgisi","  requestFetch",[178,1214,1215],{"class":184}," =>",[178,1217,1094],{"class":229},[178,1219,531],{"class":188},[178,1221,979],{"class":384},[178,1223,746],{"class":188},[178,1225,1226],{"class":180,"line":402},[178,1227,543],{"class":188},[163,1229,1230,1231,1234],{},"When route typing is enabled, payload types for ",[175,1232,1233],{},"/api/auth/*"," endpoints are inferred automatically.",[163,1236,1237],{},"By default:",[283,1239,1240,1252,1258],{},[286,1241,1242,1245,1246,1248,1249,1251],{},[175,1243,1244],{},"requireAuth"," is ",[175,1247,243],{}," (unauthenticated users resolve to ",[175,1250,265],{}," without calling the endpoint).",[286,1253,1254,922,1256,278],{},[175,1255,959],{},[175,1257,265],{},[286,1259,1260,1261,278],{},"errors are exposed through ",[175,1262,1188],{},[167,1264,1266],{"className":169,"code":1265,"filename":948,"language":172,"meta":173,"style":173},"const { data } = await useAuthAsyncData(\n  'public-profile',\n  requestFetch => requestFetch('/api/profile/public'),\n  { requireAuth: false },\n)\n",[175,1267,1268,1286,1293,1308,1321],{"__ignoreMap":173},[178,1269,1270,1272,1274,1276,1278,1280,1282,1284],{"class":180,"line":181},[178,1271,185],{"class":184},[178,1273,189],{"class":188},[178,1275,959],{"class":192},[178,1277,222],{"class":188},[178,1279,226],{"class":225},[178,1281,971],{"class":184},[178,1283,1197],{"class":229},[178,1285,494],{"class":188},[178,1287,1288,1291],{"class":180,"line":373},[178,1289,1290],{"class":384},"  'public-profile'",[178,1292,388],{"class":188},[178,1294,1295,1297,1299,1301,1303,1306],{"class":180,"line":391},[178,1296,1212],{"class":1211},[178,1298,1215],{"class":184},[178,1300,1094],{"class":229},[178,1302,531],{"class":188},[178,1304,1305],{"class":384},"'/api/profile/public'",[178,1307,746],{"class":188},[178,1309,1310,1312,1314,1316,1319],{"class":180,"line":402},[178,1311,500],{"class":188},[178,1313,1244],{"class":376},[178,1315,381],{"class":380},[178,1317,1318],{"class":841}," false",[178,1320,509],{"class":188},[178,1322,1323],{"class":180,"line":473},[178,1324,543],{"class":188},[158,1326,1328],{"id":1327},"useaction","useAction",[163,1330,1331],{},"Creates a reusable async action handle with normalized error state.",[167,1333,1336],{"className":169,"code":1334,"filename":1335,"language":172,"meta":173,"style":173},"const saveProfile = useAction(async (payload: { name: string }) => {\n  return await $fetch('/api/profile', { 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/ProfileForm.vue",[175,1337,1338,1381,1417,1421,1425,1447,1451,1479,1507],{"__ignoreMap":173},[178,1339,1340,1342,1345,1347,1350,1352,1355,1358,1361,1364,1366,1368,1370,1374,1376,1378],{"class":180,"line":181},[178,1341,185],{"class":184},[178,1343,1344],{"class":192}," saveProfile",[178,1346,1097],{"class":225},[178,1348,1349],{"class":229}," useAction",[178,1351,531],{"class":188},[178,1353,1354],{"class":184},"async",[178,1356,1357],{"class":188}," (",[178,1359,1360],{"class":1211},"payload",[178,1362,381],{"class":1363},"sn-Jc",[178,1365,189],{"class":188},[178,1367,877],{"class":361},[178,1369,381],{"class":1363},[178,1371,1373],{"class":1372},"sr8De"," string",[178,1375,601],{"class":188},[178,1377,525],{"class":184},[178,1379,1380],{"class":188}," {\n",[178,1382,1383,1386,1388,1391,1393,1396,1398,1400,1402,1405,1407,1410,1412,1415],{"class":180,"line":373},[178,1384,1385],{"class":184},"  return",[178,1387,971],{"class":184},[178,1389,1390],{"class":229}," $fetch",[178,1392,531],{"class":188},[178,1394,1395],{"class":384},"'/api/profile'",[178,1397,1142],{"class":188},[178,1399,933],{"class":376},[178,1401,381],{"class":380},[178,1403,1404],{"class":384}," 'PATCH'",[178,1406,196],{"class":188},[178,1408,1409],{"class":376},"body",[178,1411,381],{"class":380},[178,1413,1414],{"class":361}," payload",[178,1416,459],{"class":188},[178,1418,1419],{"class":180,"line":391},[178,1420,405],{"class":188},[178,1422,1423],{"class":180,"line":402},[178,1424,465],{"emptyLinePlaceholder":464},[178,1426,1427,1429,1431,1433,1436,1438,1440,1442,1445],{"class":180,"line":473},[178,1428,358],{"class":184},[178,1430,1344],{"class":361},[178,1432,278],{"class":188},[178,1434,1435],{"class":229},"execute",[178,1437,449],{"class":188},[178,1439,877],{"class":376},[178,1441,381],{"class":380},[178,1443,1444],{"class":384}," 'Max'",[178,1446,459],{"class":188},[178,1448,1449],{"class":180,"line":479},[178,1450,465],{"emptyLinePlaceholder":464},[178,1452,1453,1456,1458,1461,1463,1466,1468,1470,1473,1476],{"class":180,"line":497},[178,1454,1455],{"class":184},"if",[178,1457,1357],{"class":188},[178,1459,1460],{"class":361},"saveProfile",[178,1462,278],{"class":188},[178,1464,1465],{"class":376},"status",[178,1467,278],{"class":188},[178,1469,990],{"class":376},[178,1471,1472],{"class":1363}," ===",[178,1474,1475],{"class":384}," 'error'",[178,1477,1478],{"class":188},") {\n",[178,1480,1481,1484,1486,1488,1490,1492,1494,1496,1498,1500,1502,1505],{"class":180,"line":512},[178,1482,1483],{"class":361},"  console",[178,1485,278],{"class":188},[178,1487,1188],{"class":229},[178,1489,531],{"class":188},[178,1491,1460],{"class":361},[178,1493,278],{"class":188},[178,1495,1188],{"class":376},[178,1497,278],{"class":188},[178,1499,990],{"class":376},[178,1501,993],{"class":188},[178,1503,1504],{"class":376},"message",[178,1506,543],{"class":188},[178,1508,1509],{"class":180,"line":540},[178,1510,1511],{"class":188},"}\n",[163,1513,1514,1516,1517,1077,1520,381],{},[175,1515,1328],{}," returns the same handle shape as ",[175,1518,1519],{},"useSignIn",[175,1521,1522],{},"useSignUp",[235,1524,1525,1529,1537,1541],{},[238,1526,1528],{"name":1435,"type":1527},"(...args) => Promise\u003Cvoid>","Executes the action and never throws.",[238,1530,1532,1533,1536],{"name":1465,"type":1531},"'idle' | 'pending' | 'success' | 'error'","Current status of the latest ",[175,1534,1535],{},"execute()"," call.",[238,1538,1540],{"name":959,"type":1539},"any | null","Last successful result.",[238,1542,1544,1545,1548],{"name":1188,"type":1543},"AuthActionError | null","Normalized error from thrown errors or ",[175,1546,1547],{},"{ error }"," responses.",[158,1550,1552],{"id":1551},"useauthclientaction","useAuthClientAction",[163,1554,1555,1556,1558],{},"Wraps plugin/client methods from ",[175,1557,274],{}," in the same action handle pattern.",[167,1560,1563],{"className":169,"code":1561,"filename":1562,"language":172,"meta":173,"style":173},"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/pricing.vue",[175,1564,1565,1596,1600,1622,1626,1648,1674],{"__ignoreMap":173},[178,1566,1567,1569,1572,1574,1577,1580,1582,1585,1587,1589,1591,1594],{"class":180,"line":181},[178,1568,185],{"class":184},[178,1570,1571],{"class":192}," checkout",[178,1573,1097],{"class":225},[178,1575,1576],{"class":229}," useAuthClientAction",[178,1578,1579],{"class":188},"((",[178,1581,209],{"class":1211},[178,1583,1584],{"class":188},") ",[178,1586,525],{"class":184},[178,1588,438],{"class":361},[178,1590,278],{"class":188},[178,1592,1593],{"class":376},"checkout",[178,1595,543],{"class":188},[178,1597,1598],{"class":180,"line":373},[178,1599,465],{"emptyLinePlaceholder":464},[178,1601,1602,1604,1606,1608,1610,1612,1615,1617,1620],{"class":180,"line":391},[178,1603,358],{"class":184},[178,1605,1571],{"class":361},[178,1607,278],{"class":188},[178,1609,1435],{"class":229},[178,1611,449],{"class":188},[178,1613,1614],{"class":376},"slug",[178,1616,381],{"class":380},[178,1618,1619],{"class":384}," 'pro'",[178,1621,459],{"class":188},[178,1623,1624],{"class":180,"line":402},[178,1625,465],{"emptyLinePlaceholder":464},[178,1627,1628,1630,1632,1634,1636,1638,1640,1642,1644,1646],{"class":180,"line":473},[178,1629,1455],{"class":184},[178,1631,1357],{"class":188},[178,1633,1593],{"class":361},[178,1635,278],{"class":188},[178,1637,1465],{"class":376},[178,1639,278],{"class":188},[178,1641,990],{"class":376},[178,1643,1472],{"class":1363},[178,1645,1475],{"class":384},[178,1647,1478],{"class":188},[178,1649,1650,1652,1654,1656,1658,1660,1662,1664,1666,1668,1670,1672],{"class":180,"line":479},[178,1651,1483],{"class":361},[178,1653,278],{"class":188},[178,1655,1188],{"class":229},[178,1657,531],{"class":188},[178,1659,1593],{"class":361},[178,1661,278],{"class":188},[178,1663,1188],{"class":376},[178,1665,278],{"class":188},[178,1667,990],{"class":376},[178,1669,993],{"class":188},[178,1671,1504],{"class":376},[178,1673,543],{"class":188},[178,1675,1676],{"class":180,"line":497},[178,1677,1511],{"class":188},[163,1679,1680],{},"Nested methods are supported via selector functions:",[167,1682,1685],{"className":169,"code":1683,"filename":1684,"language":172,"meta":173,"style":173},"const openPortal = useAuthClientAction((client) => client.customer.portal)\nawait openPortal.execute()\n","pages/app/index.vue",[175,1686,1687,1720],{"__ignoreMap":173},[178,1688,1689,1691,1694,1696,1698,1700,1702,1704,1706,1708,1710,1713,1715,1718],{"class":180,"line":181},[178,1690,185],{"class":184},[178,1692,1693],{"class":192}," openPortal",[178,1695,1097],{"class":225},[178,1697,1576],{"class":229},[178,1699,1579],{"class":188},[178,1701,209],{"class":1211},[178,1703,1584],{"class":188},[178,1705,525],{"class":184},[178,1707,438],{"class":361},[178,1709,278],{"class":188},[178,1711,1712],{"class":376},"customer",[178,1714,278],{"class":188},[178,1716,1717],{"class":376},"portal",[178,1719,543],{"class":188},[178,1721,1722,1724,1726,1728,1730],{"class":180,"line":373},[178,1723,358],{"class":184},[178,1725,1693],{"class":361},[178,1727,278],{"class":188},[178,1729,1435],{"class":229},[178,1731,233],{"class":188},[158,1733,1519],{"id":1734},"usesignin",[163,1736,1737,1738,1741,1742,278],{},"Returns a keyed action handle for ",[175,1739,1740],{},"useUserSession().signIn.*",". Each method handle exposes template-friendly async state, similar to composables like ",[175,1743,1076],{},[167,1745,1747],{"className":169,"code":1746,"filename":171,"language":172,"meta":173,"style":173},"const { execute, data, status, error } = useSignIn('email')\n\nawait execute(\n  { email, password, rememberMe },\n  {\n    onSuccess: () => navigateTo('/app'),\n    onError: (ctx) => console.error(ctx.error),\n  },\n)\n\nif (status.value === 'error') {\n  console.error(error.value?.message)\n}\n",[175,1748,1749,1783,1787,1796,1813,1818,1838,1871,1876,1880,1885,1904,1927],{"__ignoreMap":173},[178,1750,1751,1753,1755,1757,1759,1761,1763,1765,1767,1769,1771,1773,1776,1778,1781],{"class":180,"line":181},[178,1752,185],{"class":184},[178,1754,189],{"class":188},[178,1756,1435],{"class":192},[178,1758,196],{"class":188},[178,1760,959],{"class":192},[178,1762,196],{"class":188},[178,1764,1465],{"class":192},[178,1766,196],{"class":188},[178,1768,1188],{"class":192},[178,1770,222],{"class":188},[178,1772,226],{"class":225},[178,1774,1775],{"class":229}," useSignIn",[178,1777,531],{"class":188},[178,1779,1780],{"class":384},"'email'",[178,1782,543],{"class":188},[178,1784,1785],{"class":180,"line":373},[178,1786,465],{"emptyLinePlaceholder":464},[178,1788,1789,1791,1794],{"class":180,"line":391},[178,1790,358],{"class":184},[178,1792,1793],{"class":229}," execute",[178,1795,494],{"class":188},[178,1797,1798,1800,1802,1804,1806,1808,1811],{"class":180,"line":402},[178,1799,500],{"class":188},[178,1801,367],{"class":361},[178,1803,196],{"class":188},[178,1805,456],{"class":361},[178,1807,196],{"class":188},[178,1809,1810],{"class":361},"rememberMe",[178,1812,509],{"class":188},[178,1814,1815],{"class":180,"line":473},[178,1816,1817],{"class":188},"  {\n",[178,1819,1820,1823,1825,1827,1829,1831,1833,1836],{"class":180,"line":479},[178,1821,1822],{"class":229},"    onSuccess",[178,1824,381],{"class":380},[178,1826,522],{"class":188},[178,1828,525],{"class":184},[178,1830,528],{"class":229},[178,1832,531],{"class":188},[178,1834,1835],{"class":384},"'/app'",[178,1837,746],{"class":188},[178,1839,1840,1843,1845,1847,1850,1852,1854,1857,1859,1861,1863,1865,1867,1869],{"class":180,"line":497},[178,1841,1842],{"class":229},"    onError",[178,1844,381],{"class":380},[178,1846,1357],{"class":188},[178,1848,1849],{"class":1211},"ctx",[178,1851,1584],{"class":188},[178,1853,525],{"class":184},[178,1855,1856],{"class":361}," console",[178,1858,278],{"class":188},[178,1860,1188],{"class":229},[178,1862,531],{"class":188},[178,1864,1849],{"class":361},[178,1866,278],{"class":188},[178,1868,1188],{"class":376},[178,1870,746],{"class":188},[178,1872,1873],{"class":180,"line":512},[178,1874,1875],{"class":188},"  },\n",[178,1877,1878],{"class":180,"line":540},[178,1879,543],{"class":188},[178,1881,1883],{"class":180,"line":1882},10,[178,1884,465],{"emptyLinePlaceholder":464},[178,1886,1888,1890,1892,1894,1896,1898,1900,1902],{"class":180,"line":1887},11,[178,1889,1455],{"class":184},[178,1891,1357],{"class":188},[178,1893,1465],{"class":361},[178,1895,278],{"class":188},[178,1897,990],{"class":376},[178,1899,1472],{"class":1363},[178,1901,1475],{"class":384},[178,1903,1478],{"class":188},[178,1905,1907,1909,1911,1913,1915,1917,1919,1921,1923,1925],{"class":180,"line":1906},12,[178,1908,1483],{"class":361},[178,1910,278],{"class":188},[178,1912,1188],{"class":229},[178,1914,531],{"class":188},[178,1916,1188],{"class":361},[178,1918,278],{"class":188},[178,1920,990],{"class":376},[178,1922,993],{"class":188},[178,1924,1504],{"class":376},[178,1926,543],{"class":188},[178,1928,1930],{"class":180,"line":1929},13,[178,1931,1511],{"class":188},[163,1933,1934,1935,1938],{},"For OAuth sign-in, use the ",[175,1936,1937],{},"social"," key and pass the provider in the payload:",[167,1940,1942],{"className":169,"code":1941,"filename":171,"language":172,"meta":173,"style":173},"await useSignIn('social').execute({ provider: 'github' })\n",[175,1943,1944],{"__ignoreMap":173},[178,1945,1946,1948,1950,1952,1955,1958,1960,1962,1965,1967,1970],{"class":180,"line":181},[178,1947,358],{"class":184},[178,1949,1775],{"class":229},[178,1951,531],{"class":188},[178,1953,1954],{"class":384},"'social'",[178,1956,1957],{"class":188},").",[178,1959,1435],{"class":229},[178,1961,449],{"class":188},[178,1963,1964],{"class":376},"provider",[178,1966,381],{"class":380},[178,1968,1969],{"class":384}," 'github'",[178,1971,459],{"class":188},[163,1973,1974,1975,1978,1979,1982,1983,1986],{},"Provider keys are inferred from ",[175,1976,1977],{},"server/auth.config.ts"," ",[175,1980,1981],{},"socialProviders"," keys.\nWhen ",[175,1984,1985],{},"callbackURL"," is omitted, the module auto-fills it using the same safe redirect order as other auth flows:",[283,1988,1989,1995,1999],{},[286,1990,1991,1992,1994],{},"safe query redirect (",[175,1993,564],{},")",[286,1996,1997],{},[175,1998,571],{},[286,2000,2001],{},"otherwise no fallback callback URL",[163,2003,2004],{},"Use renaming to avoid collisions when you use multiple methods in the same scope:",[167,2006,2008],{"className":169,"code":2007,"filename":171,"language":172,"meta":173,"style":173},"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",[175,2009,2010,2016,2028,2040,2052,2067,2071,2077,2088,2099,2110],{"__ignoreMap":173},[178,2011,2012,2014],{"class":180,"line":181},[178,2013,185],{"class":184},[178,2015,1380],{"class":188},[178,2017,2018,2021,2023,2026],{"class":180,"line":373},[178,2019,2020],{"class":376},"  execute",[178,2022,896],{"class":188},[178,2024,2025],{"class":192},"loginWithEmail",[178,2027,388],{"class":188},[178,2029,2030,2033,2035,2038],{"class":180,"line":391},[178,2031,2032],{"class":376},"  status",[178,2034,896],{"class":188},[178,2036,2037],{"class":192},"statusEmail",[178,2039,388],{"class":188},[178,2041,2042,2045,2047,2050],{"class":180,"line":402},[178,2043,2044],{"class":376},"  error",[178,2046,896],{"class":188},[178,2048,2049],{"class":192},"errorEmail",[178,2051,388],{"class":188},[178,2053,2054,2057,2059,2061,2063,2065],{"class":180,"line":473},[178,2055,2056],{"class":188},"} ",[178,2058,226],{"class":225},[178,2060,1775],{"class":229},[178,2062,531],{"class":188},[178,2064,1780],{"class":384},[178,2066,543],{"class":188},[178,2068,2069],{"class":180,"line":479},[178,2070,465],{"emptyLinePlaceholder":464},[178,2072,2073,2075],{"class":180,"line":497},[178,2074,185],{"class":184},[178,2076,1380],{"class":188},[178,2078,2079,2081,2083,2086],{"class":180,"line":512},[178,2080,2020],{"class":376},[178,2082,896],{"class":188},[178,2084,2085],{"class":192},"loginWithPasskey",[178,2087,388],{"class":188},[178,2089,2090,2092,2094,2097],{"class":180,"line":540},[178,2091,2032],{"class":376},[178,2093,896],{"class":188},[178,2095,2096],{"class":192},"statusPasskey",[178,2098,388],{"class":188},[178,2100,2101,2103,2105,2108],{"class":180,"line":1882},[178,2102,2044],{"class":376},[178,2104,896],{"class":188},[178,2106,2107],{"class":192},"errorPasskey",[178,2109,388],{"class":188},[178,2111,2112,2114,2116,2118,2120,2123],{"class":180,"line":1887},[178,2113,2056],{"class":188},[178,2115,226],{"class":225},[178,2117,1775],{"class":229},[178,2119,531],{"class":188},[178,2121,2122],{"class":384},"'passkey'",[178,2124,543],{"class":188},[163,2126,2127],{},"Each method returns an action handle:",[235,2129,2130,2133,2137,2143],{},[238,2131,2132],{"name":1435,"type":1527},"Calls the underlying Better Auth method and never throws.",[238,2134,1532,2135,1536],{"name":1465,"type":1531},[175,2136,1535],{},[238,2138,2139,2140,2142],{"name":959,"type":1539},"Last successful result. Cleared on each new ",[175,2141,1535],{}," and on errors.",[238,2144,2145,2146,1957],{"name":1188,"type":1543},"Normalized error for the latest call (cleared on new ",[175,2147,1535],{},[268,2149,2150,2151,2153,2154,899,2156,278],{},"Each sign-in method has independent state. When you call ",[175,2152,1535],{}," multiple times, only the latest call updates ",[175,2155,1465],{},[175,2157,1188],{},[334,2159,2161],{"id":2160},"error-state-and-promise-behavior","Error state and promise behavior",[163,2163,288,2164,196,2166,297,2168,2170,2171,2174,2175,2177],{},[175,2165,1465],{},[175,2167,959],{},[175,2169,1188],{}," as your source of truth. The action handle always sets ",[175,2172,2173],{},"status='error'"," and populates normalized ",[175,2176,1188],{}," when a sign-in attempt fails.",[268,2179,2180,2181,2183,2184,899,2186,297,2188,2191],{},"Better Auth methods can signal failure by throwing or by resolving to a ",[175,2182,1547],{}," result. In both cases, the action handle updates ",[175,2185,1465],{},[175,2187,1188],{},[175,2189,2190],{},"await execute()"," always resolves.",[339,2193,2195,2196,1994],{"id":2194},"recommended-flow-execute","Recommended flow (",[175,2197,1435],{},[167,2199,2201],{"className":169,"code":2200,"filename":171,"language":172,"meta":173,"style":173},"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",[175,2202,2203,2235,2239,2255,2259,2277,2299,2303,2307,2326,2345],{"__ignoreMap":173},[178,2204,2205,2207,2209,2211,2213,2215,2217,2219,2221,2223,2225,2227,2229,2231,2233],{"class":180,"line":181},[178,2206,185],{"class":184},[178,2208,189],{"class":188},[178,2210,1435],{"class":192},[178,2212,196],{"class":188},[178,2214,959],{"class":192},[178,2216,196],{"class":188},[178,2218,1465],{"class":192},[178,2220,196],{"class":188},[178,2222,1188],{"class":192},[178,2224,222],{"class":188},[178,2226,226],{"class":225},[178,2228,1775],{"class":229},[178,2230,531],{"class":188},[178,2232,1780],{"class":384},[178,2234,543],{"class":188},[178,2236,2237],{"class":180,"line":373},[178,2238,465],{"emptyLinePlaceholder":464},[178,2240,2241,2243,2245,2247,2249,2251,2253],{"class":180,"line":391},[178,2242,358],{"class":184},[178,2244,1793],{"class":229},[178,2246,449],{"class":188},[178,2248,367],{"class":361},[178,2250,196],{"class":188},[178,2252,456],{"class":361},[178,2254,459],{"class":188},[178,2256,2257],{"class":180,"line":402},[178,2258,465],{"emptyLinePlaceholder":464},[178,2260,2261,2263,2265,2267,2269,2271,2273,2275],{"class":180,"line":473},[178,2262,1455],{"class":184},[178,2264,1357],{"class":188},[178,2266,1465],{"class":361},[178,2268,278],{"class":188},[178,2270,990],{"class":376},[178,2272,1472],{"class":1363},[178,2274,1475],{"class":384},[178,2276,1478],{"class":188},[178,2278,2279,2281,2283,2285,2287,2289,2291,2293,2295,2297],{"class":180,"line":479},[178,2280,1483],{"class":361},[178,2282,278],{"class":188},[178,2284,1188],{"class":229},[178,2286,531],{"class":188},[178,2288,1188],{"class":361},[178,2290,278],{"class":188},[178,2292,990],{"class":376},[178,2294,993],{"class":188},[178,2296,1504],{"class":376},[178,2298,543],{"class":188},[178,2300,2301],{"class":180,"line":497},[178,2302,1511],{"class":188},[178,2304,2305],{"class":180,"line":512},[178,2306,465],{"emptyLinePlaceholder":464},[178,2308,2309,2311,2313,2315,2317,2319,2321,2324],{"class":180,"line":540},[178,2310,1455],{"class":184},[178,2312,1357],{"class":188},[178,2314,1465],{"class":361},[178,2316,278],{"class":188},[178,2318,990],{"class":376},[178,2320,1472],{"class":1363},[178,2322,2323],{"class":384}," 'success'",[178,2325,1478],{"class":188},[178,2327,2328,2330,2332,2335,2337,2339,2341,2343],{"class":180,"line":1882},[178,2329,1483],{"class":361},[178,2331,278],{"class":188},[178,2333,2334],{"class":229},"log",[178,2336,531],{"class":188},[178,2338,959],{"class":361},[178,2340,278],{"class":188},[178,2342,990],{"class":376},[178,2344,543],{"class":188},[178,2346,2347],{"class":180,"line":1887},[178,2348,1511],{"class":188},[2350,2351,2352,2398,2432],"warning",{},[163,2353,2354,899,2357,2360,2361,899,2363,2365,2366,2369,2370,2373,2374,2377,2378,2381,2382,2384,2385,2388,2389,2391,2392,2381,2395,2397],{},[175,2355,2356],{},"useUserSignIn",[175,2358,2359],{},"useUserSignUp"," were renamed to ",[175,2362,1519],{},[175,2364,1522],{}," in alpha.\nThe API switched from map-style access (",[175,2367,2368],{},"useUserSignIn().email",") to keyed access (",[175,2371,2372],{},"useSignIn('email')",") in alpha.\nOAuth provider aliases (for example ",[175,2375,2376],{},"useSignIn('github')",") were removed. Use ",[175,2379,2380],{},"useSignIn('social').execute({ provider: 'github' })",".\n",[175,2383,1188],{}," changed from ",[175,2386,2387],{},"unknown | null"," to ",[175,2390,1543],{}," in alpha.\nThe message alias field was removed in alpha. Use ",[175,2393,2394],{},"error.value?.message",[175,2396,1535],{}," changed twice in alpha:",[283,2399,2400,2406,2415],{},[286,2401,2402,2403,2405],{},"old: ",[175,2404,2190],{}," could reject",[286,2407,2408,2409,2411,2412],{},"previous alpha: ",[175,2410,2190],{}," resolved ",[175,2413,2414],{},"{ ok: true, data } | { ok: false, error }",[286,2416,2417,2418,2420,2421,2424,2425,2427,2428,2427,2430],{},"new: ",[175,2419,2190],{}," resolves ",[175,2422,2423],{},"void",", and you read ",[175,2426,1465],{}," / ",[175,2429,959],{},[175,2431,1188],{},[163,2433,2434,2435,278],{},"If you relied on raw payloads, use ",[175,2436,2437],{},"error.raw",[158,2439,1522],{"id":2440},"usesignup",[163,2442,2443,2444,2446,2447,278],{},"Same API as ",[175,2445,1519],{},", but wraps ",[175,2448,2449],{},"useUserSession().signUp.*",[167,2451,2454],{"className":169,"code":2452,"filename":2453,"language":172,"meta":173,"style":173},"const { execute, data, status, error } = useSignUp('email')\n\nawait execute(\n  { email, password, name },\n  {\n    onSuccess: () => navigateTo('/welcome'),\n    onError: (ctx) => console.error(ctx.error),\n  },\n)\n","pages/signup.vue",[175,2455,2456,2489,2493,2501,2517,2521,2540,2570,2574],{"__ignoreMap":173},[178,2457,2458,2460,2462,2464,2466,2468,2470,2472,2474,2476,2478,2480,2483,2485,2487],{"class":180,"line":181},[178,2459,185],{"class":184},[178,2461,189],{"class":188},[178,2463,1435],{"class":192},[178,2465,196],{"class":188},[178,2467,959],{"class":192},[178,2469,196],{"class":188},[178,2471,1465],{"class":192},[178,2473,196],{"class":188},[178,2475,1188],{"class":192},[178,2477,222],{"class":188},[178,2479,226],{"class":225},[178,2481,2482],{"class":229}," useSignUp",[178,2484,531],{"class":188},[178,2486,1780],{"class":384},[178,2488,543],{"class":188},[178,2490,2491],{"class":180,"line":373},[178,2492,465],{"emptyLinePlaceholder":464},[178,2494,2495,2497,2499],{"class":180,"line":391},[178,2496,358],{"class":184},[178,2498,1793],{"class":229},[178,2500,494],{"class":188},[178,2502,2503,2505,2507,2509,2511,2513,2515],{"class":180,"line":402},[178,2504,500],{"class":188},[178,2506,367],{"class":361},[178,2508,196],{"class":188},[178,2510,456],{"class":361},[178,2512,196],{"class":188},[178,2514,877],{"class":361},[178,2516,509],{"class":188},[178,2518,2519],{"class":180,"line":473},[178,2520,1817],{"class":188},[178,2522,2523,2525,2527,2529,2531,2533,2535,2538],{"class":180,"line":479},[178,2524,1822],{"class":229},[178,2526,381],{"class":380},[178,2528,522],{"class":188},[178,2530,525],{"class":184},[178,2532,528],{"class":229},[178,2534,531],{"class":188},[178,2536,2537],{"class":384},"'/welcome'",[178,2539,746],{"class":188},[178,2541,2542,2544,2546,2548,2550,2552,2554,2556,2558,2560,2562,2564,2566,2568],{"class":180,"line":497},[178,2543,1842],{"class":229},[178,2545,381],{"class":380},[178,2547,1357],{"class":188},[178,2549,1849],{"class":1211},[178,2551,1584],{"class":188},[178,2553,525],{"class":184},[178,2555,1856],{"class":361},[178,2557,278],{"class":188},[178,2559,1188],{"class":229},[178,2561,531],{"class":188},[178,2563,1849],{"class":361},[178,2565,278],{"class":188},[178,2567,1188],{"class":376},[178,2569,746],{"class":188},[178,2571,2572],{"class":180,"line":512},[178,2573,1875],{"class":188},[178,2575,2576],{"class":180,"line":540},[178,2577,543],{"class":188},[163,2579,2580,2582,2583,196,2585,196,2587,196,2589,2591,2592,278],{},[175,2581,1522],{}," returns the same action handle shape (",[175,2584,1435],{},[175,2586,1465],{},[175,2588,959],{},[175,2590,1188],{},") and follows the same error normalization semantics as ",[175,2593,1519],{},[908,2595],{"title":2596,"to":79},"OAuth Providers guide",[2598,2599,2600],"style",{},"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 .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 .svFNh, html code.shiki .svFNh{--shiki-light:#383A42;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}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 .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 .s3ZNE, html code.shiki .s3ZNE{--shiki-light:#986801;--shiki-default:#F97E72;--shiki-dark:#F97E72}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}",{"title":173,"searchDepth":373,"depth":373,"links":2602},[2603,2608,2609,2610,2611,2612,2615],{"id":160,"depth":373,"text":161,"children":2604},[2605,2606,2607],{"id":336,"depth":391,"text":337},{"id":408,"depth":391,"text":409},{"id":753,"depth":391,"text":756},{"id":913,"depth":373,"text":914},{"id":1157,"depth":373,"text":1158},{"id":1327,"depth":373,"text":1328},{"id":1551,"depth":373,"text":1552},{"id":1734,"depth":373,"text":1519,"children":2613},[2614],{"id":2160,"depth":391,"text":2161},{"id":2440,"depth":373,"text":1522},"API reference for client-side composables.","md",null,{},{"title":137,"description":2616},"cYpkhE4SqCmx1gbDlULYPmBUn9YOz67aUJ0ChrnubwM",[2623,2625],{"title":128,"path":129,"stem":130,"description":2624,"children":-1},"Translate authentication errors with @nuxtjs/i18n.",{"title":141,"path":142,"stem":143,"description":2626,"children":-1},"API reference for server-side helpers available in Nitro event handlers.",1774189123336]