[{"data":1,"prerenderedAt":2058},["ShallowReactive",2],{"navigation_docs":3,"-api-server-utils":216,"-api-server-utils-surround":2053},[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,208,212],{"title":163,"path":159,"stem":160},"Overview",{"title":165,"path":166,"stem":167},"Better Auth CLI is not installed","\u002Ferrors\u002Fnuxt-auth-cli-missing","6.errors\u002Fnuxt-auth-cli-missing",{"title":169,"path":170,"stem":171},"Better Auth CLI version does not match better-auth","\u002Ferrors\u002Fnuxt-auth-cli-version-mismatch","6.errors\u002Fnuxt-auth-cli-version-mismatch",{"title":173,"path":174,"stem":175},"Auth configuration failed to load","\u002Ferrors\u002Fnuxt-auth-config-load-failed","6.errors\u002Fnuxt-auth-config-load-failed",{"title":177,"path":178,"stem":179},"Schema generator returned no code","\u002Ferrors\u002Fnuxt-auth-empty-schema","6.errors\u002Fnuxt-auth-empty-schema",{"title":181,"path":182,"stem":183},"Invalid server auth config export","\u002Ferrors\u002Fnuxt-auth-invalid-config-export","6.errors\u002Fnuxt-auth-invalid-config-export",{"title":185,"path":186,"stem":187},"Auth plugin path must be absolute","\u002Ferrors\u002Fnuxt-auth-invalid-plugin-source","6.errors\u002Fnuxt-auth-invalid-plugin-source",{"title":189,"path":190,"stem":191},"Missing auth configuration","\u002Ferrors\u002Fnuxt-auth-missing-config","6.errors\u002Fnuxt-auth-missing-config",{"title":193,"path":194,"stem":195},"NuxtHub database alias is missing","\u002Ferrors\u002Fnuxt-auth-missing-hub-db","6.errors\u002Fnuxt-auth-missing-hub-db",{"title":197,"path":198,"stem":199},"No database provider is enabled","\u002Ferrors\u002Fnuxt-auth-no-database-provider","6.errors\u002Fnuxt-auth-no-database-provider",{"title":201,"path":202,"stem":203},"Auth schema generation failed","\u002Ferrors\u002Fnuxt-auth-schema-generation-failed","6.errors\u002Fnuxt-auth-schema-generation-failed",{"title":205,"path":206,"stem":207},"Custom session storage is missing","\u002Ferrors\u002Fnuxt-auth-schema-storage-required","6.errors\u002Fnuxt-auth-schema-storage-required",{"title":209,"path":210,"stem":211},"Secondary storage in client-only mode","\u002Ferrors\u002Fnuxt-auth-storage-client-only","6.errors\u002Fnuxt-auth-storage-client-only",{"title":213,"path":214,"stem":215},"Unsupported database dialect","\u002Ferrors\u002Fnuxt-auth-unsupported-dialect","6.errors\u002Fnuxt-auth-unsupported-dialect",{"id":217,"title":146,"body":218,"description":2047,"extension":2048,"links":2049,"meta":2050,"navigation":396,"path":147,"seo":2051,"stem":148,"__hash__":2052},"docs\u002F5.api\u002F2.server-utils.md",{"type":219,"value":220,"toc":2029},"minimark",[221,225,248,262,267,270,478,481,544,555,559,572,676,680,683,759,768,773,789,793,799,872,879,895,899,915,1015,1021,1026,1030,1035,1042,1119,1132,1135,1141,1155,1364,1367,1371,1374,1496,1499,1503,1506,1596,1599,1605,1608,1618,1659,1682,1685,1697,1701,1706,1748,1753,1813,1817,2005,2009,2025],[222,223,224],"p",{},"Use this page when you need exact behavior for the auto-imported server helpers registered by the module.",[222,226,227,228,232,233,236,237,240,241,243,244,247],{},"Only the helpers documented here and ",[229,230,231],"code",{},"defineServerAuth"," are registered. The internal ",[229,234,235],{},"resolveCustomSecondaryStorageRequirement"," helper and ",[229,238,239],{},"HubSecondaryStorageMode"," type are no longer auto-imported. Configure custom storage through ",[229,242,231],{}," and ",[229,245,246],{},"auth.hubSecondaryStorage",".",[249,250,251,252,256,257,261],"warning",{},"These utilities are only available in ",[253,254,255],"strong",{},"full mode",". In ",[258,259,260],"a",{"href":96},"clientOnly mode",", there is no local auth server, so these utilities are not registered.",[263,264,266],"h2",{"id":265},"serverauth","serverAuth",[222,268,269],{},"Returns the initialized Better Auth instance (module-level singleton). Pass the event for accurate URL detection on first initialization.",[271,272,278],"pre",{"className":273,"code":274,"filename":275,"language":276,"meta":277,"style":277},"language-ts shiki shiki-themes one-light synthwave-84 synthwave-84","export default defineEventHandler(async (event) => {\n  const auth = serverAuth(event)\n  const session = await auth.api.getSession({ headers: event.headers })\n\n  if (!session) {\n    throw createError({ statusCode: 401 })\n  }\n\n  return { user: session.user }\n})\n","server\u002Fapi\u002Fadmin\u002Fusers.get.ts","ts","",[229,279,280,320,345,391,398,416,438,444,449,472],{"__ignoreMap":277},[281,282,285,289,293,297,301,304,307,311,314,317],"span",{"class":283,"line":284},"line",1,[281,286,288],{"class":287},"sqe1H","export",[281,290,292],{"class":291},"sKg8T"," default",[281,294,296],{"class":295},"sfT9l"," defineEventHandler",[281,298,300],{"class":299},"s17Py","(",[281,302,303],{"class":287},"async",[281,305,306],{"class":299}," (",[281,308,310],{"class":309},"sgisi","event",[281,312,313],{"class":299},") ",[281,315,316],{"class":287},"=>",[281,318,319],{"class":299}," {\n",[281,321,323,326,330,334,337,339,342],{"class":283,"line":322},2,[281,324,325],{"class":287},"  const",[281,327,329],{"class":328},"s6Rhl"," auth",[281,331,333],{"class":332},"sQBpM"," =",[281,335,336],{"class":295}," serverAuth",[281,338,300],{"class":299},[281,340,310],{"class":341},"sYvLG",[281,343,344],{"class":299},")\n",[281,346,348,350,353,355,358,361,363,366,368,371,374,377,381,384,386,388],{"class":283,"line":347},3,[281,349,325],{"class":287},[281,351,352],{"class":328}," session",[281,354,333],{"class":332},[281,356,357],{"class":287}," await",[281,359,329],{"class":360},"svFNh",[281,362,247],{"class":299},[281,364,365],{"class":341},"api",[281,367,247],{"class":299},[281,369,370],{"class":295},"getSession",[281,372,373],{"class":299},"({ ",[281,375,376],{"class":341},"headers",[281,378,380],{"class":379},"sVnqq",":",[281,382,383],{"class":360}," event",[281,385,247],{"class":299},[281,387,376],{"class":341},[281,389,390],{"class":299}," })\n",[281,392,394],{"class":283,"line":393},4,[281,395,397],{"emptyLinePlaceholder":396},true,"\n",[281,399,401,404,406,410,413],{"class":283,"line":400},5,[281,402,403],{"class":287},"  if",[281,405,306],{"class":299},[281,407,409],{"class":408},"sn-Jc","!",[281,411,412],{"class":341},"session",[281,414,415],{"class":299},") {\n",[281,417,419,422,425,427,430,432,436],{"class":283,"line":418},6,[281,420,421],{"class":287},"    throw",[281,423,424],{"class":295}," createError",[281,426,373],{"class":299},[281,428,429],{"class":341},"statusCode",[281,431,380],{"class":379},[281,433,435],{"class":434},"s3ZNE"," 401",[281,437,390],{"class":299},[281,439,441],{"class":283,"line":440},7,[281,442,443],{"class":299},"  }\n",[281,445,447],{"class":283,"line":446},8,[281,448,397],{"emptyLinePlaceholder":396},[281,450,452,455,458,461,463,465,467,469],{"class":283,"line":451},9,[281,453,454],{"class":287},"  return",[281,456,457],{"class":299}," { ",[281,459,460],{"class":341},"user",[281,462,380],{"class":379},[281,464,352],{"class":360},[281,466,247],{"class":299},[281,468,460],{"class":341},[281,470,471],{"class":299}," }\n",[281,473,475],{"class":283,"line":474},10,[281,476,477],{"class":299},"})\n",[222,479,480],{},"You can also pass query options to bypass cookie cache \u002F refresh behavior:",[271,482,484],{"className":273,"code":483,"language":276,"meta":277,"style":277},"await auth.api.getSession({\n  headers: event.headers,\n  query: { disableCookieCache: true },\n})\n",[229,485,486,504,520,540],{"__ignoreMap":277},[281,487,488,491,493,495,497,499,501],{"class":283,"line":284},[281,489,490],{"class":287},"await",[281,492,329],{"class":360},[281,494,247],{"class":299},[281,496,365],{"class":341},[281,498,247],{"class":299},[281,500,370],{"class":295},[281,502,503],{"class":299},"({\n",[281,505,506,509,511,513,515,517],{"class":283,"line":322},[281,507,508],{"class":341},"  headers",[281,510,380],{"class":379},[281,512,383],{"class":360},[281,514,247],{"class":299},[281,516,376],{"class":341},[281,518,519],{"class":299},",\n",[281,521,522,525,527,529,532,534,537],{"class":283,"line":347},[281,523,524],{"class":341},"  query",[281,526,380],{"class":379},[281,528,457],{"class":299},[281,530,531],{"class":341},"disableCookieCache",[281,533,380],{"class":379},[281,535,536],{"class":434}," true",[281,538,539],{"class":299}," },\n",[281,541,542],{"class":283,"line":393},[281,543,477],{"class":299},[545,546,547,548,551,552,554],"note",{},"Use ",[229,549,550],{},"serverAuth(event)"," in request handlers to access advanced Better Auth features not exposed by the helper wrappers. In non-request contexts, you can call ",[229,553,48],{}," without an event.",[263,556,558],{"id":557},"ensureserverauth","ensureServerAuth",[222,560,561,562,565,566,569,570,247],{},"Returns the same instance as ",[229,563,564],{},"serverAuth(event?)",", after waiting for the auth secret that the module derives from ",[229,567,568],{},"NUXT_APP_SECRET"," on Nuxt 4.6+. Use it in code that can run before the server has handled a request, such as a Nitro plugin or task at startup. When the secret is configured another way, or on older Nuxt versions, it behaves like ",[229,571,48],{},[271,573,576],{"className":273,"code":574,"filename":575,"language":276,"meta":277,"style":277},"export default defineNitroPlugin(async () => {\n  const auth = await ensureServerAuth()\n  await auth.api.signUpEmail({ body: { email: 'admin@example.com', password: 'change-me-please', name: 'Admin' } })\n})\n","server\u002Fplugins\u002Fseed.ts",[229,577,578,598,614,672],{"__ignoreMap":277},[281,579,580,582,584,587,589,591,594,596],{"class":283,"line":284},[281,581,288],{"class":287},[281,583,292],{"class":291},[281,585,586],{"class":295}," defineNitroPlugin",[281,588,300],{"class":299},[281,590,303],{"class":287},[281,592,593],{"class":299}," () ",[281,595,316],{"class":287},[281,597,319],{"class":299},[281,599,600,602,604,606,608,611],{"class":283,"line":322},[281,601,325],{"class":287},[281,603,329],{"class":328},[281,605,333],{"class":332},[281,607,357],{"class":287},[281,609,610],{"class":295}," ensureServerAuth",[281,612,613],{"class":299},"()\n",[281,615,616,619,621,623,625,627,630,632,635,637,639,642,644,648,651,654,656,659,661,664,666,669],{"class":283,"line":347},[281,617,618],{"class":287},"  await",[281,620,329],{"class":360},[281,622,247],{"class":299},[281,624,365],{"class":341},[281,626,247],{"class":299},[281,628,629],{"class":295},"signUpEmail",[281,631,373],{"class":299},[281,633,634],{"class":341},"body",[281,636,380],{"class":379},[281,638,457],{"class":299},[281,640,641],{"class":341},"email",[281,643,380],{"class":379},[281,645,647],{"class":646},"sPAZv"," 'admin@example.com'",[281,649,650],{"class":299},", ",[281,652,653],{"class":341},"password",[281,655,380],{"class":379},[281,657,658],{"class":646}," 'change-me-please'",[281,660,650],{"class":299},[281,662,663],{"class":341},"name",[281,665,380],{"class":379},[281,667,668],{"class":646}," 'Admin'",[281,670,671],{"class":299}," } })\n",[281,673,674],{"class":283,"line":393},[281,675,477],{"class":299},[263,677,679],{"id":678},"getusersession","getUserSession",[222,681,682],{},"Retrieves the current session from the request context without throwing an error if unauthenticated.",[271,684,687],{"className":273,"code":685,"filename":686,"language":276,"meta":277,"style":277},"export default defineEventHandler(async (event) => {\n  const session = await getUserSession(event)\n  \n  if (session) {\n    \u002F\u002F ...\n  }\n})\n","server\u002Fapi\u002Fexample.ts",[229,688,689,711,730,735,745,751,755],{"__ignoreMap":277},[281,690,691,693,695,697,699,701,703,705,707,709],{"class":283,"line":284},[281,692,288],{"class":287},[281,694,292],{"class":291},[281,696,296],{"class":295},[281,698,300],{"class":299},[281,700,303],{"class":287},[281,702,306],{"class":299},[281,704,310],{"class":309},[281,706,313],{"class":299},[281,708,316],{"class":287},[281,710,319],{"class":299},[281,712,713,715,717,719,721,724,726,728],{"class":283,"line":322},[281,714,325],{"class":287},[281,716,352],{"class":328},[281,718,333],{"class":332},[281,720,357],{"class":287},[281,722,723],{"class":295}," getUserSession",[281,725,300],{"class":299},[281,727,310],{"class":341},[281,729,344],{"class":299},[281,731,732],{"class":283,"line":347},[281,733,734],{"class":299},"  \n",[281,736,737,739,741,743],{"class":283,"line":393},[281,738,403],{"class":287},[281,740,306],{"class":299},[281,742,412],{"class":341},[281,744,415],{"class":299},[281,746,747],{"class":283,"line":400},[281,748,750],{"class":749},"st7cf","    \u002F\u002F ...\n",[281,752,753],{"class":283,"line":418},[281,754,443],{"class":299},[281,756,757],{"class":283,"line":440},[281,758,477],{"class":299},[222,760,761,763,764,767],{},[229,762,679],{}," does not create request-cache entries by itself. Use ",[229,765,766],{},"getRequestSession(event)"," when you need request-lifetime caching across middleware\u002Fhandlers.",[222,769,770],{},[253,771,772],{},"Returns:",[774,775,776,783],"ul",{},[777,778,779,782],"li",{},[229,780,781],{},"{ user: AuthUser, session: AuthSession }"," if authenticated.",[777,784,785,788],{},[229,786,787],{},"null"," if unauthenticated.",[263,790,792],{"id":791},"getrequestsession","getRequestSession",[222,794,795,796,247],{},"Retrieves the current session and memoizes it for the lifetime of the current request. In Nuxt and Nitro handlers, the helper stores the memoized value on ",[229,797,798],{},"event.context.requestSession",[271,800,802],{"className":273,"code":801,"filename":686,"language":276,"meta":277,"style":277},"export default defineEventHandler(async (event) => {\n  const requestSession = await getRequestSession(event)\n  const sameRequestSession = await getRequestSession(event) \u002F\u002F cached\n})\n",[229,803,804,826,846,868],{"__ignoreMap":277},[281,805,806,808,810,812,814,816,818,820,822,824],{"class":283,"line":284},[281,807,288],{"class":287},[281,809,292],{"class":291},[281,811,296],{"class":295},[281,813,300],{"class":299},[281,815,303],{"class":287},[281,817,306],{"class":299},[281,819,310],{"class":309},[281,821,313],{"class":299},[281,823,316],{"class":287},[281,825,319],{"class":299},[281,827,828,830,833,835,837,840,842,844],{"class":283,"line":322},[281,829,325],{"class":287},[281,831,832],{"class":328}," requestSession",[281,834,333],{"class":332},[281,836,357],{"class":287},[281,838,839],{"class":295}," getRequestSession",[281,841,300],{"class":299},[281,843,310],{"class":341},[281,845,344],{"class":299},[281,847,848,850,853,855,857,859,861,863,865],{"class":283,"line":347},[281,849,325],{"class":287},[281,851,852],{"class":328}," sameRequestSession",[281,854,333],{"class":332},[281,856,357],{"class":287},[281,858,839],{"class":295},[281,860,300],{"class":299},[281,862,310],{"class":341},[281,864,313],{"class":299},[281,866,867],{"class":749},"\u002F\u002F cached\n",[281,869,870],{"class":283,"line":393},[281,871,477],{"class":299},[222,873,874,875,878],{},"Use this helper when multiple handlers\u002Fmiddleware in the same request need session access without repeating ",[229,876,877],{},"auth.api.getSession()"," calls.",[545,880,881,883,884,887,888,891,892,247],{},[229,882,792],{}," stays type-compatible in projects that use narrowed ",[229,885,886],{},"h3"," typings where ",[229,889,890],{},"H3Event"," does not explicitly declare ",[229,893,894],{},"context",[263,896,898],{"id":897},"setrequestsession","setRequestSession",[222,900,901,902,905,906,650,908,910,911,914],{},"Supplies an ",[229,903,904],{},"AppSession | null"," to ",[229,907,792],{},[229,909,679],{},", and ",[229,912,913],{},"requireUserSession"," for the rest of the current request. Use it when trusted server code authenticates a request through another mechanism, such as a verified bearer token, and resolves the complete application session itself.",[271,916,919],{"className":273,"code":917,"filename":918,"language":276,"meta":277,"style":277},"export default defineEventHandler(async (event) => {\n  const claims = await verifyBearerToken(event)\n  const session = await resolveCurrentAppSession(claims)\n\n  setRequestSession(event, session)\n\n  \u002F\u002F Later middleware and handlers reuse the supplied value.\n})\n","server\u002Fmiddleware\u002Fbearer-session.ts",[229,920,921,943,963,983,987,1002,1006,1011],{"__ignoreMap":277},[281,922,923,925,927,929,931,933,935,937,939,941],{"class":283,"line":284},[281,924,288],{"class":287},[281,926,292],{"class":291},[281,928,296],{"class":295},[281,930,300],{"class":299},[281,932,303],{"class":287},[281,934,306],{"class":299},[281,936,310],{"class":309},[281,938,313],{"class":299},[281,940,316],{"class":287},[281,942,319],{"class":299},[281,944,945,947,950,952,954,957,959,961],{"class":283,"line":322},[281,946,325],{"class":287},[281,948,949],{"class":328}," claims",[281,951,333],{"class":332},[281,953,357],{"class":287},[281,955,956],{"class":295}," verifyBearerToken",[281,958,300],{"class":299},[281,960,310],{"class":341},[281,962,344],{"class":299},[281,964,965,967,969,971,973,976,978,981],{"class":283,"line":347},[281,966,325],{"class":287},[281,968,352],{"class":328},[281,970,333],{"class":332},[281,972,357],{"class":287},[281,974,975],{"class":295}," resolveCurrentAppSession",[281,977,300],{"class":299},[281,979,980],{"class":341},"claims",[281,982,344],{"class":299},[281,984,985],{"class":283,"line":393},[281,986,397],{"emptyLinePlaceholder":396},[281,988,989,992,994,996,998,1000],{"class":283,"line":400},[281,990,991],{"class":295},"  setRequestSession",[281,993,300],{"class":299},[281,995,310],{"class":341},[281,997,650],{"class":299},[281,999,412],{"class":341},[281,1001,344],{"class":299},[281,1003,1004],{"class":283,"line":418},[281,1005,397],{"emptyLinePlaceholder":396},[281,1007,1008],{"class":283,"line":440},[281,1009,1010],{"class":749},"  \u002F\u002F Later middleware and handlers reuse the supplied value.\n",[281,1012,1013],{"class":283,"line":446},[281,1014,477],{"class":299},[222,1016,1017,1018,1020],{},"The helper makes the supplied value authoritative immediately, so an older session lookup or refresh cannot overwrite it when that work settles. Pass ",[229,1019,787],{}," to cache an unauthenticated result for the current request.",[249,1022,1023,1025],{},[229,1024,898],{}," trusts the supplied value. Authenticate the request and enforce bearer-token audience and scope restrictions before calling it. The helper does not create, update, or clear a Better Auth session cookie.",[263,1027,1029],{"id":1028},"refreshsessioncookiecache","refreshSessionCookieCache",[222,1031,1032,1033,247],{},"Refreshes Better Auth's cached session cookie on the current response, then refreshes the request-cached session used by ",[229,1034,766],{},[222,1036,1037,1038,1041],{},"If Better Auth does not write a replacement cache cookie, such as for a session created with ",[229,1039,1040],{},"rememberMe: false",", the helper expires the stale cache cookies so subsequent requests load the updated data. The session token and remember-me preference are preserved.",[271,1043,1046],{"className":273,"code":1044,"filename":1045,"language":276,"meta":277,"style":277},"export default defineEventHandler(async (event) => {\n  await updateCurrentUserProfile(event)\n  await refreshSessionCookieCache(event)\n\n  return { ok: true }\n})\n","server\u002Fapi\u002Fprofile.patch.ts",[229,1047,1048,1070,1083,1096,1100,1115],{"__ignoreMap":277},[281,1049,1050,1052,1054,1056,1058,1060,1062,1064,1066,1068],{"class":283,"line":284},[281,1051,288],{"class":287},[281,1053,292],{"class":291},[281,1055,296],{"class":295},[281,1057,300],{"class":299},[281,1059,303],{"class":287},[281,1061,306],{"class":299},[281,1063,310],{"class":309},[281,1065,313],{"class":299},[281,1067,316],{"class":287},[281,1069,319],{"class":299},[281,1071,1072,1074,1077,1079,1081],{"class":283,"line":322},[281,1073,618],{"class":287},[281,1075,1076],{"class":295}," updateCurrentUserProfile",[281,1078,300],{"class":299},[281,1080,310],{"class":341},[281,1082,344],{"class":299},[281,1084,1085,1087,1090,1092,1094],{"class":283,"line":347},[281,1086,618],{"class":287},[281,1088,1089],{"class":295}," refreshSessionCookieCache",[281,1091,300],{"class":299},[281,1093,310],{"class":341},[281,1095,344],{"class":299},[281,1097,1098],{"class":283,"line":393},[281,1099,397],{"emptyLinePlaceholder":396},[281,1101,1102,1104,1106,1109,1111,1113],{"class":283,"line":400},[281,1103,454],{"class":287},[281,1105,457],{"class":299},[281,1107,1108],{"class":341},"ok",[281,1110,380],{"class":379},[281,1112,536],{"class":434},[281,1114,471],{"class":299},[281,1116,1117],{"class":283,"line":418},[281,1118,477],{"class":299},[222,1120,1121,1122,1124,1125,1127,1128,1131],{},"Use this helper after server-side code changes data returned by ",[229,1123,877],{}," or ",[229,1126,766],{},", such as user fields added through Better Auth's ",[229,1129,1130],{},"custom-session"," plugin.",[545,1133,1134],{},"This refreshes the cached session cookie. It does not update the session or user record; perform that update first.",[263,1136,1138,1139],{"id":1137},"session-enrichment-with-custom-session","Session Enrichment with ",[229,1140,1130],{},[222,1142,1143,1144,1146,1147,910,1150,1124,1152,1154],{},"Use Better Auth's ",[229,1145,1130],{}," plugin when your app needs computed fields in the session payload returned by server helpers. Define the enrichment in ",[229,1148,1149],{},"server\u002Fauth.config.ts",[229,1151,679],{},[229,1153,792],{}," will return the enriched shape.",[271,1156,1158],{"className":273,"code":1157,"filename":1149,"language":276,"meta":277,"style":277},"import { customSession } from 'better-auth\u002Fplugins'\nimport { defineServerAuth } from '@nuxtjs\u002Fbetter-auth\u002Fconfig'\n\nexport default defineServerAuth({\n  plugins: [\n    customSession(async ({ user, session }) => {\n      return {\n        user: {\n          ...user,\n          role: user.email?.endsWith('@company.com') ? 'member' : 'guest',\n        },\n        session: {\n          ...session,\n        },\n      }\n    }),\n  ],\n})\n",[229,1159,1160,1179,1194,1198,1209,1219,1244,1251,1260,1269,1311,1317,1327,1336,1341,1347,1353,1359],{"__ignoreMap":277},[281,1161,1162,1165,1167,1170,1173,1176],{"class":283,"line":284},[281,1163,1164],{"class":287},"import",[281,1166,457],{"class":299},[281,1168,1169],{"class":341},"customSession",[281,1171,1172],{"class":299}," } ",[281,1174,1175],{"class":287},"from",[281,1177,1178],{"class":646}," 'better-auth\u002Fplugins'\n",[281,1180,1181,1183,1185,1187,1189,1191],{"class":283,"line":322},[281,1182,1164],{"class":287},[281,1184,457],{"class":299},[281,1186,231],{"class":341},[281,1188,1172],{"class":299},[281,1190,1175],{"class":287},[281,1192,1193],{"class":646}," '@nuxtjs\u002Fbetter-auth\u002Fconfig'\n",[281,1195,1196],{"class":283,"line":347},[281,1197,397],{"emptyLinePlaceholder":396},[281,1199,1200,1202,1204,1207],{"class":283,"line":393},[281,1201,288],{"class":287},[281,1203,292],{"class":291},[281,1205,1206],{"class":295}," defineServerAuth",[281,1208,503],{"class":299},[281,1210,1211,1214,1216],{"class":283,"line":400},[281,1212,1213],{"class":341},"  plugins",[281,1215,380],{"class":379},[281,1217,1218],{"class":299}," [\n",[281,1220,1221,1224,1226,1228,1231,1233,1235,1237,1240,1242],{"class":283,"line":418},[281,1222,1223],{"class":295},"    customSession",[281,1225,300],{"class":299},[281,1227,303],{"class":287},[281,1229,1230],{"class":299}," ({ ",[281,1232,460],{"class":309},[281,1234,650],{"class":299},[281,1236,412],{"class":309},[281,1238,1239],{"class":299}," }) ",[281,1241,316],{"class":287},[281,1243,319],{"class":299},[281,1245,1246,1249],{"class":283,"line":440},[281,1247,1248],{"class":287},"      return",[281,1250,319],{"class":299},[281,1252,1253,1256,1258],{"class":283,"line":446},[281,1254,1255],{"class":341},"        user",[281,1257,380],{"class":379},[281,1259,319],{"class":299},[281,1261,1262,1265,1267],{"class":283,"line":451},[281,1263,1264],{"class":408},"          ...",[281,1266,460],{"class":341},[281,1268,519],{"class":299},[281,1270,1271,1274,1276,1279,1281,1284,1287,1290,1292,1295,1297,1300,1303,1306,1309],{"class":283,"line":474},[281,1272,1273],{"class":341},"          role",[281,1275,380],{"class":379},[281,1277,1278],{"class":360}," user",[281,1280,247],{"class":299},[281,1282,641],{"class":1283},"sjaJz",[281,1285,1286],{"class":299},"?.",[281,1288,1289],{"class":295},"endsWith",[281,1291,300],{"class":299},[281,1293,1294],{"class":646},"'@company.com'",[281,1296,313],{"class":299},[281,1298,1299],{"class":408},"?",[281,1301,1302],{"class":646}," 'member'",[281,1304,1305],{"class":408}," :",[281,1307,1308],{"class":646}," 'guest'",[281,1310,519],{"class":299},[281,1312,1314],{"class":283,"line":1313},11,[281,1315,1316],{"class":299},"        },\n",[281,1318,1320,1323,1325],{"class":283,"line":1319},12,[281,1321,1322],{"class":341},"        session",[281,1324,380],{"class":379},[281,1326,319],{"class":299},[281,1328,1330,1332,1334],{"class":283,"line":1329},13,[281,1331,1264],{"class":408},[281,1333,412],{"class":341},[281,1335,519],{"class":299},[281,1337,1339],{"class":283,"line":1338},14,[281,1340,1316],{"class":299},[281,1342,1344],{"class":283,"line":1343},15,[281,1345,1346],{"class":299},"      }\n",[281,1348,1350],{"class":283,"line":1349},16,[281,1351,1352],{"class":299},"    }),\n",[281,1354,1356],{"class":283,"line":1355},17,[281,1357,1358],{"class":299},"  ],\n",[281,1360,1362],{"class":283,"line":1361},18,[281,1363,477],{"class":299},[545,1365,1366],{},"This uses Better Auth's plugin API and does not require a module-specific option.",[263,1368,1370],{"id":1369},"createsession","createSession",[222,1372,1373],{},"Creates a Better Auth session for a user and returns the created session record. Use this helper in custom server-side authentication flows after your handler verifies the user identity.",[271,1375,1378],{"className":273,"code":1376,"filename":1377,"language":276,"meta":277,"style":277},"export default defineEventHandler(async (event) => {\n  const userId = await verifyCustomLoginAndReturnUserId(event)\n  const session = await createSession(event, userId)\n\n  return {\n    sessionId: session.id,\n    token: session.token,\n  }\n})\n","server\u002Fapi\u002Fcustom-auth.post.ts",[229,1379,1380,1402,1422,1446,1450,1456,1472,1488,1492],{"__ignoreMap":277},[281,1381,1382,1384,1386,1388,1390,1392,1394,1396,1398,1400],{"class":283,"line":284},[281,1383,288],{"class":287},[281,1385,292],{"class":291},[281,1387,296],{"class":295},[281,1389,300],{"class":299},[281,1391,303],{"class":287},[281,1393,306],{"class":299},[281,1395,310],{"class":309},[281,1397,313],{"class":299},[281,1399,316],{"class":287},[281,1401,319],{"class":299},[281,1403,1404,1406,1409,1411,1413,1416,1418,1420],{"class":283,"line":322},[281,1405,325],{"class":287},[281,1407,1408],{"class":328}," userId",[281,1410,333],{"class":332},[281,1412,357],{"class":287},[281,1414,1415],{"class":295}," verifyCustomLoginAndReturnUserId",[281,1417,300],{"class":299},[281,1419,310],{"class":341},[281,1421,344],{"class":299},[281,1423,1424,1426,1428,1430,1432,1435,1437,1439,1441,1444],{"class":283,"line":347},[281,1425,325],{"class":287},[281,1427,352],{"class":328},[281,1429,333],{"class":332},[281,1431,357],{"class":287},[281,1433,1434],{"class":295}," createSession",[281,1436,300],{"class":299},[281,1438,310],{"class":341},[281,1440,650],{"class":299},[281,1442,1443],{"class":341},"userId",[281,1445,344],{"class":299},[281,1447,1448],{"class":283,"line":393},[281,1449,397],{"emptyLinePlaceholder":396},[281,1451,1452,1454],{"class":283,"line":400},[281,1453,454],{"class":287},[281,1455,319],{"class":299},[281,1457,1458,1461,1463,1465,1467,1470],{"class":283,"line":418},[281,1459,1460],{"class":341},"    sessionId",[281,1462,380],{"class":379},[281,1464,352],{"class":360},[281,1466,247],{"class":299},[281,1468,1469],{"class":341},"id",[281,1471,519],{"class":299},[281,1473,1474,1477,1479,1481,1483,1486],{"class":283,"line":440},[281,1475,1476],{"class":341},"    token",[281,1478,380],{"class":379},[281,1480,352],{"class":360},[281,1482,247],{"class":299},[281,1484,1485],{"class":341},"token",[281,1487,519],{"class":299},[281,1489,1490],{"class":283,"line":446},[281,1491,443],{"class":299},[281,1493,1494],{"class":283,"line":451},[281,1495,477],{"class":299},[222,1497,1498],{},"Pair this helper with your preferred cookie strategy. When you also use the module cookie helper, you can set the returned token on the response after creating the session.",[263,1500,1502],{"id":1501},"setsessioncookie","setSessionCookie",[222,1504,1505],{},"Sets the Better Auth session token cookie on the current response. Use this helper in custom server-side authentication flows after you obtain or create a valid Better Auth session token.",[271,1507,1509],{"className":273,"code":1508,"filename":1377,"language":276,"meta":277,"style":277},"export default defineEventHandler(async (event) => {\n  const token = await verifyCustomLoginAndReturnSessionToken(event)\n\n  await setSessionCookie(event, token)\n\n  return { ok: true }\n})\n",[229,1510,1511,1533,1553,1557,1574,1578,1592],{"__ignoreMap":277},[281,1512,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531],{"class":283,"line":284},[281,1514,288],{"class":287},[281,1516,292],{"class":291},[281,1518,296],{"class":295},[281,1520,300],{"class":299},[281,1522,303],{"class":287},[281,1524,306],{"class":299},[281,1526,310],{"class":309},[281,1528,313],{"class":299},[281,1530,316],{"class":287},[281,1532,319],{"class":299},[281,1534,1535,1537,1540,1542,1544,1547,1549,1551],{"class":283,"line":322},[281,1536,325],{"class":287},[281,1538,1539],{"class":328}," token",[281,1541,333],{"class":332},[281,1543,357],{"class":287},[281,1545,1546],{"class":295}," verifyCustomLoginAndReturnSessionToken",[281,1548,300],{"class":299},[281,1550,310],{"class":341},[281,1552,344],{"class":299},[281,1554,1555],{"class":283,"line":347},[281,1556,397],{"emptyLinePlaceholder":396},[281,1558,1559,1561,1564,1566,1568,1570,1572],{"class":283,"line":393},[281,1560,618],{"class":287},[281,1562,1563],{"class":295}," setSessionCookie",[281,1565,300],{"class":299},[281,1567,310],{"class":341},[281,1569,650],{"class":299},[281,1571,1485],{"class":341},[281,1573,344],{"class":299},[281,1575,1576],{"class":283,"line":400},[281,1577,397],{"emptyLinePlaceholder":396},[281,1579,1580,1582,1584,1586,1588,1590],{"class":283,"line":418},[281,1581,454],{"class":287},[281,1583,457],{"class":299},[281,1585,1108],{"class":341},[281,1587,380],{"class":379},[281,1589,536],{"class":434},[281,1591,471],{"class":299},[281,1593,1594],{"class":283,"line":440},[281,1595,477],{"class":299},[222,1597,1598],{},"The helper signs the cookie with your Better Auth secret and uses the configured cookie name and attributes from your server auth config.",[545,1600,1601,1604],{},[229,1602,1603],{},"setSessionCookie(event, token)"," sets the session token cookie only. It does not try to recreate every internal Better Auth sign-in side effect.",[263,1606,913],{"id":1607},"requireusersession",[222,1609,1610,1611,1124,1614,1617],{},"Ensures the user is authenticated and optionally matches specific criteria. Throws a ",[229,1612,1613],{},"401 Unauthorized",[229,1615,1616],{},"403 Forbidden"," error if checks fail.",[271,1619,1621],{"className":273,"code":1620,"language":276,"meta":277,"style":277},"const { user, session } = await requireUserSession(event, options?)\n",[229,1622,1623],{"__ignoreMap":277},[281,1624,1625,1628,1630,1632,1634,1636,1638,1641,1643,1646,1648,1650,1652,1655,1657],{"class":283,"line":284},[281,1626,1627],{"class":287},"const",[281,1629,457],{"class":299},[281,1631,460],{"class":328},[281,1633,650],{"class":299},[281,1635,412],{"class":328},[281,1637,1172],{"class":299},[281,1639,1640],{"class":332},"=",[281,1642,357],{"class":287},[281,1644,1645],{"class":295}," requireUserSession",[281,1647,300],{"class":299},[281,1649,310],{"class":360},[281,1651,650],{"class":299},[281,1653,1654],{"class":360},"options",[281,1656,1299],{"class":408},[281,1658,344],{"class":299},[545,1660,1661,1663,1664,243,1667,1670,1671,1674,1675,1677,1678,1681],{},[229,1662,913],{}," uses ",[229,1665,1666],{},"AuthUser",[229,1668,1669],{},"AuthSession"," from ",[229,1672,1673],{},"#nuxt-better-auth"," for both the returned value and option callbacks (",[229,1676,460],{}," match + ",[229,1679,1680],{},"rule",").",[886,1683,1684],{"id":1654},"Options",[1686,1687,1688,1693],"field-group",{},[1689,1690,1692],"field",{"name":460,"type":1691},"UserMatch","Object matching user properties (see Route Protection).",[1689,1694,1696],{"name":1680,"type":1695},"(ctx) => boolean | Promise\u003Cboolean>","Custom validation callback.",[886,1698,1700],{"id":1699},"examples","Examples",[222,1702,1703],{},[253,1704,1705],{},"Role Check:",[271,1707,1710],{"className":273,"code":1708,"filename":1709,"language":276,"meta":277,"style":277},"await requireUserSession(event, {\n  user: { role: 'admin' }\n})\n","server\u002Fapi\u002Fadmin\u002Fdashboard.ts",[229,1711,1712,1725,1744],{"__ignoreMap":277},[281,1713,1714,1716,1718,1720,1722],{"class":283,"line":284},[281,1715,490],{"class":287},[281,1717,1645],{"class":295},[281,1719,300],{"class":299},[281,1721,310],{"class":360},[281,1723,1724],{"class":299},", {\n",[281,1726,1727,1730,1732,1734,1737,1739,1742],{"class":283,"line":322},[281,1728,1729],{"class":341},"  user",[281,1731,380],{"class":379},[281,1733,457],{"class":299},[281,1735,1736],{"class":341},"role",[281,1738,380],{"class":379},[281,1740,1741],{"class":646}," 'admin'",[281,1743,471],{"class":299},[281,1745,1746],{"class":283,"line":347},[281,1747,477],{"class":299},[222,1749,1750],{},[253,1751,1752],{},"Custom Rule:",[271,1754,1756],{"className":273,"code":1755,"filename":1709,"language":276,"meta":277,"style":277},"await requireUserSession(event, {\n  rule: ({ user }) => {\n    return user.points > 100\n  }\n})\n",[229,1757,1758,1770,1787,1805,1809],{"__ignoreMap":277},[281,1759,1760,1762,1764,1766,1768],{"class":283,"line":284},[281,1761,490],{"class":287},[281,1763,1645],{"class":295},[281,1765,300],{"class":299},[281,1767,310],{"class":360},[281,1769,1724],{"class":299},[281,1771,1772,1775,1777,1779,1781,1783,1785],{"class":283,"line":322},[281,1773,1774],{"class":295},"  rule",[281,1776,380],{"class":379},[281,1778,1230],{"class":299},[281,1780,460],{"class":309},[281,1782,1239],{"class":299},[281,1784,316],{"class":287},[281,1786,319],{"class":299},[281,1788,1789,1792,1794,1796,1799,1802],{"class":283,"line":347},[281,1790,1791],{"class":287},"    return",[281,1793,1278],{"class":360},[281,1795,247],{"class":299},[281,1797,1798],{"class":341},"points",[281,1800,1801],{"class":408}," >",[281,1803,1804],{"class":434}," 100\n",[281,1806,1807],{"class":283,"line":393},[281,1808,443],{"class":299},[281,1810,1811],{"class":283,"line":400},[281,1812,477],{"class":299},[263,1814,1816],{"id":1815},"combining-user-matching-with-rules","Combining User Matching with Rules",[271,1818,1821],{"className":273,"code":1819,"filename":1820,"language":276,"meta":277,"style":277},"export default defineEventHandler(async (event) => {\n  const { teamId } = getRouterParams(event)\n\n  \u002F\u002F Require admin role AND membership in the specific team\n  await requireUserSession(event, {\n    user: { role: 'admin' },\n    rule: async (session) => {\n      const membership = await getTeamMembership(session.user.id, teamId)\n      return membership?.role === 'owner'\n    }\n  })\n\n  return getTeamSettings(teamId)\n})\n","server\u002Fapi\u002Fteam\u002F[teamId]\u002Fsettings.ts",[229,1822,1823,1845,1867,1871,1876,1888,1905,1925,1958,1974,1979,1984,1988,2001],{"__ignoreMap":277},[281,1824,1825,1827,1829,1831,1833,1835,1837,1839,1841,1843],{"class":283,"line":284},[281,1826,288],{"class":287},[281,1828,292],{"class":291},[281,1830,296],{"class":295},[281,1832,300],{"class":299},[281,1834,303],{"class":287},[281,1836,306],{"class":299},[281,1838,310],{"class":309},[281,1840,313],{"class":299},[281,1842,316],{"class":287},[281,1844,319],{"class":299},[281,1846,1847,1849,1851,1854,1856,1858,1861,1863,1865],{"class":283,"line":322},[281,1848,325],{"class":287},[281,1850,457],{"class":299},[281,1852,1853],{"class":328},"teamId",[281,1855,1172],{"class":299},[281,1857,1640],{"class":332},[281,1859,1860],{"class":295}," getRouterParams",[281,1862,300],{"class":299},[281,1864,310],{"class":341},[281,1866,344],{"class":299},[281,1868,1869],{"class":283,"line":347},[281,1870,397],{"emptyLinePlaceholder":396},[281,1872,1873],{"class":283,"line":393},[281,1874,1875],{"class":749},"  \u002F\u002F Require admin role AND membership in the specific team\n",[281,1877,1878,1880,1882,1884,1886],{"class":283,"line":400},[281,1879,618],{"class":287},[281,1881,1645],{"class":295},[281,1883,300],{"class":299},[281,1885,310],{"class":341},[281,1887,1724],{"class":299},[281,1889,1890,1893,1895,1897,1899,1901,1903],{"class":283,"line":418},[281,1891,1892],{"class":341},"    user",[281,1894,380],{"class":379},[281,1896,457],{"class":299},[281,1898,1736],{"class":341},[281,1900,380],{"class":379},[281,1902,1741],{"class":646},[281,1904,539],{"class":299},[281,1906,1907,1910,1912,1915,1917,1919,1921,1923],{"class":283,"line":440},[281,1908,1909],{"class":295},"    rule",[281,1911,380],{"class":379},[281,1913,1914],{"class":287}," async",[281,1916,306],{"class":299},[281,1918,412],{"class":309},[281,1920,313],{"class":299},[281,1922,316],{"class":287},[281,1924,319],{"class":299},[281,1926,1927,1930,1933,1935,1937,1940,1942,1944,1946,1948,1950,1952,1954,1956],{"class":283,"line":446},[281,1928,1929],{"class":287},"      const",[281,1931,1932],{"class":328}," membership",[281,1934,333],{"class":332},[281,1936,357],{"class":287},[281,1938,1939],{"class":295}," getTeamMembership",[281,1941,300],{"class":299},[281,1943,412],{"class":360},[281,1945,247],{"class":299},[281,1947,460],{"class":341},[281,1949,247],{"class":299},[281,1951,1469],{"class":341},[281,1953,650],{"class":299},[281,1955,1853],{"class":341},[281,1957,344],{"class":299},[281,1959,1960,1962,1964,1966,1968,1971],{"class":283,"line":451},[281,1961,1248],{"class":287},[281,1963,1932],{"class":360},[281,1965,1286],{"class":299},[281,1967,1736],{"class":341},[281,1969,1970],{"class":408}," ===",[281,1972,1973],{"class":646}," 'owner'\n",[281,1975,1976],{"class":283,"line":474},[281,1977,1978],{"class":299},"    }\n",[281,1980,1981],{"class":283,"line":1313},[281,1982,1983],{"class":299},"  })\n",[281,1985,1986],{"class":283,"line":1319},[281,1987,397],{"emptyLinePlaceholder":396},[281,1989,1990,1992,1995,1997,1999],{"class":283,"line":1329},[281,1991,454],{"class":287},[281,1993,1994],{"class":295}," getTeamSettings",[281,1996,300],{"class":299},[281,1998,1853],{"class":341},[281,2000,344],{"class":299},[281,2002,2003],{"class":283,"line":1338},[281,2004,477],{"class":299},[263,2006,2008],{"id":2007},"related-pages","Related pages",[774,2010,2011,2016,2021],{},[777,2012,2013],{},[258,2014,2015],{"href":49},"Server auth concept",[777,2017,2018],{},[258,2019,2020],{"href":57},"Route protection",[777,2022,2023],{},[258,2024,154],{"href":155},[2026,2027,2028],"style",{},"html pre.shiki code .sqe1H, html code.shiki .sqe1H{--shiki-light:#A626A4;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .sKg8T, html code.shiki .sKg8T{--shiki-light:#E45649;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .sfT9l, html code.shiki .sfT9l{--shiki-light:#4078F2;--shiki-default:#36F9F6;--shiki-dark:#36F9F6}html pre.shiki code .s17Py, html code.shiki .s17Py{--shiki-light:#383A42;--shiki-default:#BBBBBB;--shiki-dark:#BBBBBB}html pre.shiki code .sgisi, html code.shiki .sgisi{--shiki-light:#383A42;--shiki-light-font-style:inherit;--shiki-default:#FF7EDB;--shiki-default-font-style:italic;--shiki-dark:#FF7EDB;--shiki-dark-font-style:italic}html pre.shiki code .s6Rhl, html code.shiki .s6Rhl{--shiki-light:#986801;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}html pre.shiki code .sQBpM, html code.shiki .sQBpM{--shiki-light:#0184BC;--shiki-default:#FFFFFFEE;--shiki-dark:#FFFFFFEE}html pre.shiki code .sYvLG, html code.shiki .sYvLG{--shiki-light:#E45649;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}html pre.shiki code .svFNh, html code.shiki .svFNh{--shiki-light:#383A42;--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 .sn-Jc, html code.shiki .sn-Jc{--shiki-light:#0184BC;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .s3ZNE, html code.shiki .s3ZNE{--shiki-light:#986801;--shiki-default:#F97E72;--shiki-dark:#F97E72}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 .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 .sjaJz, html code.shiki .sjaJz{--shiki-light:#C18401;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}",{"title":277,"searchDepth":322,"depth":322,"links":2030},[2031,2032,2033,2034,2035,2036,2037,2039,2040,2041,2045,2046],{"id":265,"depth":322,"text":266},{"id":557,"depth":322,"text":558},{"id":678,"depth":322,"text":679},{"id":791,"depth":322,"text":792},{"id":897,"depth":322,"text":898},{"id":1028,"depth":322,"text":1029},{"id":1137,"depth":322,"text":2038},"Session Enrichment with custom-session",{"id":1369,"depth":322,"text":1370},{"id":1501,"depth":322,"text":1502},{"id":1607,"depth":322,"text":913,"children":2042},[2043,2044],{"id":1654,"depth":347,"text":1684},{"id":1699,"depth":347,"text":1700},{"id":1815,"depth":322,"text":1816},{"id":2007,"depth":322,"text":2008},"API reference for server-side helpers available in Nitro event handlers.","md",null,{},{"title":146,"description":2047},"29hp9kr5L1Gig9tEmktJpkoRSxwHjWFuk_5RC-5_Tk0",[2054,2056],{"title":142,"path":143,"stem":144,"description":2055,"children":-1},"API reference for client-side composables.",{"title":150,"path":151,"stem":152,"description":2057,"children":-1},"Built‑in UI helpers.",1792535506998]