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