[{"data":1,"prerenderedAt":1925},["ShallowReactive",2],{"navigation_docs":3,"-api-server-utils":208,"-api-server-utils-surround":1920},[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":1914,"extension":1915,"links":1916,"meta":1917,"navigation":388,"path":147,"seo":1918,"stem":148,"__hash__":1919},"docs\u002F5.api\u002F2.server-utils.md",{"type":211,"value":212,"toc":1897},"minimark",[213,217,240,254,259,262,470,473,536,547,551,554,630,639,644,660,664,670,743,750,766,770,787,887,893,898,902,907,985,998,1001,1007,1021,1232,1235,1239,1242,1364,1367,1371,1374,1464,1467,1473,1476,1486,1527,1550,1553,1565,1569,1574,1616,1621,1681,1685,1873,1877,1893],[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},"getusersession","getUserSession",[214,552,553],{},"Retrieves the current session from the request context without throwing an error if unauthenticated.",[263,555,558],{"className":265,"code":556,"filename":557,"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,559,560,582,601,606,616,622,626],{"__ignoreMap":269},[273,561,562,564,566,568,570,572,574,576,578,580],{"class":275,"line":276},[273,563,280],{"class":279},[273,565,284],{"class":283},[273,567,288],{"class":287},[273,569,292],{"class":291},[273,571,295],{"class":279},[273,573,298],{"class":291},[273,575,302],{"class":301},[273,577,305],{"class":291},[273,579,308],{"class":279},[273,581,311],{"class":291},[273,583,584,586,588,590,592,595,597,599],{"class":275,"line":314},[273,585,317],{"class":279},[273,587,344],{"class":320},[273,589,325],{"class":324},[273,591,349],{"class":279},[273,593,594],{"class":287}," getUserSession",[273,596,292],{"class":291},[273,598,302],{"class":333},[273,600,336],{"class":291},[273,602,603],{"class":275,"line":339},[273,604,605],{"class":291},"  \n",[273,607,608,610,612,614],{"class":275,"line":385},[273,609,395],{"class":279},[273,611,298],{"class":291},[273,613,404],{"class":333},[273,615,407],{"class":291},[273,617,618],{"class":275,"line":392},[273,619,621],{"class":620},"st7cf","    \u002F\u002F ...\n",[273,623,624],{"class":275,"line":410},[273,625,435],{"class":291},[273,627,628],{"class":275,"line":432},[273,629,469],{"class":291},[214,631,632,634,635,638],{},[221,633,550],{}," does not create request-cache entries by itself. Use ",[221,636,637],{},"getRequestSession(event)"," when you need request-lifetime caching across middleware\u002Fhandlers.",[214,640,641],{},[245,642,643],{},"Returns:",[645,646,647,654],"ul",{},[648,649,650,653],"li",{},[221,651,652],{},"{ user: AuthUser, session: AuthSession }"," if authenticated.",[648,655,656,659],{},[221,657,658],{},"null"," if unauthenticated.",[255,661,663],{"id":662},"getrequestsession","getRequestSession",[214,665,666,667,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,668,669],{},"event.context.requestSession",[263,671,673],{"className":265,"code":672,"filename":557,"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,674,675,697,717,739],{"__ignoreMap":269},[273,676,677,679,681,683,685,687,689,691,693,695],{"class":275,"line":276},[273,678,280],{"class":279},[273,680,284],{"class":283},[273,682,288],{"class":287},[273,684,292],{"class":291},[273,686,295],{"class":279},[273,688,298],{"class":291},[273,690,302],{"class":301},[273,692,305],{"class":291},[273,694,308],{"class":279},[273,696,311],{"class":291},[273,698,699,701,704,706,708,711,713,715],{"class":275,"line":314},[273,700,317],{"class":279},[273,702,703],{"class":320}," requestSession",[273,705,325],{"class":324},[273,707,349],{"class":279},[273,709,710],{"class":287}," getRequestSession",[273,712,292],{"class":291},[273,714,302],{"class":333},[273,716,336],{"class":291},[273,718,719,721,724,726,728,730,732,734,736],{"class":275,"line":339},[273,720,317],{"class":279},[273,722,723],{"class":320}," sameRequestSession",[273,725,325],{"class":324},[273,727,349],{"class":279},[273,729,710],{"class":287},[273,731,292],{"class":291},[273,733,302],{"class":333},[273,735,305],{"class":291},[273,737,738],{"class":620},"\u002F\u002F cached\n",[273,740,741],{"class":275,"line":385},[273,742,469],{"class":291},[214,744,745,746,749],{},"Use this helper when multiple handlers\u002Fmiddleware in the same request need session access without repeating ",[221,747,748],{},"auth.api.getSession()"," calls.",[537,751,752,754,755,758,759,762,763,239],{},[221,753,663],{}," stays type-compatible in projects that use narrowed ",[221,756,757],{},"h3"," typings where ",[221,760,761],{},"H3Event"," does not explicitly declare ",[221,764,765],{},"context",[255,767,769],{"id":768},"setrequestsession","setRequestSession",[214,771,772,773,776,777,779,780,782,783,786],{},"Supplies an ",[221,774,775],{},"AppSession | null"," to ",[221,778,663],{},", ",[221,781,550],{},", and ",[221,784,785],{},"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,788,791],{"className":265,"code":789,"filename":790,"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,792,793,815,835,855,859,874,878,883],{"__ignoreMap":269},[273,794,795,797,799,801,803,805,807,809,811,813],{"class":275,"line":276},[273,796,280],{"class":279},[273,798,284],{"class":283},[273,800,288],{"class":287},[273,802,292],{"class":291},[273,804,295],{"class":279},[273,806,298],{"class":291},[273,808,302],{"class":301},[273,810,305],{"class":291},[273,812,308],{"class":279},[273,814,311],{"class":291},[273,816,817,819,822,824,826,829,831,833],{"class":275,"line":314},[273,818,317],{"class":279},[273,820,821],{"class":320}," claims",[273,823,325],{"class":324},[273,825,349],{"class":279},[273,827,828],{"class":287}," verifyBearerToken",[273,830,292],{"class":291},[273,832,302],{"class":333},[273,834,336],{"class":291},[273,836,837,839,841,843,845,848,850,853],{"class":275,"line":339},[273,838,317],{"class":279},[273,840,344],{"class":320},[273,842,325],{"class":324},[273,844,349],{"class":279},[273,846,847],{"class":287}," resolveCurrentAppSession",[273,849,292],{"class":291},[273,851,852],{"class":333},"claims",[273,854,336],{"class":291},[273,856,857],{"class":275,"line":385},[273,858,389],{"emptyLinePlaceholder":388},[273,860,861,864,866,868,870,872],{"class":275,"line":392},[273,862,863],{"class":287},"  setRequestSession",[273,865,292],{"class":291},[273,867,302],{"class":333},[273,869,779],{"class":291},[273,871,404],{"class":333},[273,873,336],{"class":291},[273,875,876],{"class":275,"line":410},[273,877,389],{"emptyLinePlaceholder":388},[273,879,880],{"class":275,"line":432},[273,881,882],{"class":620},"  \u002F\u002F Later middleware and handlers reuse the supplied value.\n",[273,884,885],{"class":275,"line":438},[273,886,469],{"class":291},[214,888,889,890,892],{},"The helper makes the supplied value authoritative immediately, so an older session lookup or refresh cannot overwrite it when that work settles. Pass ",[221,891,658],{}," to cache an unauthenticated result for the current request.",[241,894,895,897],{},[221,896,769],{}," 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,899,901],{"id":900},"refreshsessioncookiecache","refreshSessionCookieCache",[214,903,904,905,239],{},"Refreshes Better Auth's cached session cookie on the current response, then refreshes the request-cached session used by ",[221,906,637],{},[263,908,911],{"className":265,"code":909,"filename":910,"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,912,913,935,949,962,966,981],{"__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,940,943,945,947],{"class":275,"line":314},[273,938,939],{"class":279},"  await",[273,941,942],{"class":287}," updateCurrentUserProfile",[273,944,292],{"class":291},[273,946,302],{"class":333},[273,948,336],{"class":291},[273,950,951,953,956,958,960],{"class":275,"line":339},[273,952,939],{"class":279},[273,954,955],{"class":287}," refreshSessionCookieCache",[273,957,292],{"class":291},[273,959,302],{"class":333},[273,961,336],{"class":291},[273,963,964],{"class":275,"line":385},[273,965,389],{"emptyLinePlaceholder":388},[273,967,968,970,972,975,977,979],{"class":275,"line":392},[273,969,446],{"class":279},[273,971,449],{"class":291},[273,973,974],{"class":333},"ok",[273,976,372],{"class":371},[273,978,528],{"class":426},[273,980,463],{"class":291},[273,982,983],{"class":275,"line":410},[273,984,469],{"class":291},[214,986,987,988,990,991,993,994,997],{},"Use this helper after server-side code changes data returned by ",[221,989,748],{}," or ",[221,992,637],{},", such as user fields added through Better Auth's ",[221,995,996],{},"custom-session"," plugin.",[537,999,1000],{},"This refreshes the cached session cookie. It does not update the session or user record; perform that update first.",[255,1002,1004,1005],{"id":1003},"session-enrichment-with-custom-session","Session Enrichment with ",[221,1006,996],{},[214,1008,1009,1010,1012,1013,782,1016,990,1018,1020],{},"Use Better Auth's ",[221,1011,996],{}," plugin when your app needs computed fields in the session payload returned by server helpers. Define the enrichment in ",[221,1014,1015],{},"server\u002Fauth.config.ts",[221,1017,550],{},[221,1019,663],{}," will return the enriched shape.",[263,1022,1024],{"className":265,"code":1023,"filename":1015,"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,1025,1026,1046,1061,1065,1076,1086,1111,1118,1127,1136,1179,1185,1195,1204,1209,1215,1221,1227],{"__ignoreMap":269},[273,1027,1028,1031,1033,1036,1039,1042],{"class":275,"line":276},[273,1029,1030],{"class":279},"import",[273,1032,449],{"class":291},[273,1034,1035],{"class":333},"customSession",[273,1037,1038],{"class":291}," } ",[273,1040,1041],{"class":279},"from",[273,1043,1045],{"class":1044},"sPAZv"," 'better-auth\u002Fplugins'\n",[273,1047,1048,1050,1052,1054,1056,1058],{"class":275,"line":314},[273,1049,1030],{"class":279},[273,1051,449],{"class":291},[273,1053,223],{"class":333},[273,1055,1038],{"class":291},[273,1057,1041],{"class":279},[273,1059,1060],{"class":1044}," '@nuxtjs\u002Fbetter-auth\u002Fconfig'\n",[273,1062,1063],{"class":275,"line":339},[273,1064,389],{"emptyLinePlaceholder":388},[273,1066,1067,1069,1071,1074],{"class":275,"line":385},[273,1068,280],{"class":279},[273,1070,284],{"class":283},[273,1072,1073],{"class":287}," defineServerAuth",[273,1075,495],{"class":291},[273,1077,1078,1081,1083],{"class":275,"line":392},[273,1079,1080],{"class":333},"  plugins",[273,1082,372],{"class":371},[273,1084,1085],{"class":291}," [\n",[273,1087,1088,1091,1093,1095,1098,1100,1102,1104,1107,1109],{"class":275,"line":410},[273,1089,1090],{"class":287},"    customSession",[273,1092,292],{"class":291},[273,1094,295],{"class":279},[273,1096,1097],{"class":291}," ({ ",[273,1099,452],{"class":301},[273,1101,779],{"class":291},[273,1103,404],{"class":301},[273,1105,1106],{"class":291}," }) ",[273,1108,308],{"class":279},[273,1110,311],{"class":291},[273,1112,1113,1116],{"class":275,"line":432},[273,1114,1115],{"class":279},"      return",[273,1117,311],{"class":291},[273,1119,1120,1123,1125],{"class":275,"line":438},[273,1121,1122],{"class":333},"        user",[273,1124,372],{"class":371},[273,1126,311],{"class":291},[273,1128,1129,1132,1134],{"class":275,"line":443},[273,1130,1131],{"class":400},"          ...",[273,1133,452],{"class":333},[273,1135,511],{"class":291},[273,1137,1138,1141,1143,1146,1148,1152,1155,1158,1160,1163,1165,1168,1171,1174,1177],{"class":275,"line":466},[273,1139,1140],{"class":333},"          role",[273,1142,372],{"class":371},[273,1144,1145],{"class":352}," user",[273,1147,239],{"class":291},[273,1149,1151],{"class":1150},"sjaJz","email",[273,1153,1154],{"class":291},"?.",[273,1156,1157],{"class":287},"endsWith",[273,1159,292],{"class":291},[273,1161,1162],{"class":1044},"'@company.com'",[273,1164,305],{"class":291},[273,1166,1167],{"class":400},"?",[273,1169,1170],{"class":1044}," 'member'",[273,1172,1173],{"class":400}," :",[273,1175,1176],{"class":1044}," 'guest'",[273,1178,511],{"class":291},[273,1180,1182],{"class":275,"line":1181},11,[273,1183,1184],{"class":291},"        },\n",[273,1186,1188,1191,1193],{"class":275,"line":1187},12,[273,1189,1190],{"class":333},"        session",[273,1192,372],{"class":371},[273,1194,311],{"class":291},[273,1196,1198,1200,1202],{"class":275,"line":1197},13,[273,1199,1131],{"class":400},[273,1201,404],{"class":333},[273,1203,511],{"class":291},[273,1205,1207],{"class":275,"line":1206},14,[273,1208,1184],{"class":291},[273,1210,1212],{"class":275,"line":1211},15,[273,1213,1214],{"class":291},"      }\n",[273,1216,1218],{"class":275,"line":1217},16,[273,1219,1220],{"class":291},"    }),\n",[273,1222,1224],{"class":275,"line":1223},17,[273,1225,1226],{"class":291},"  ],\n",[273,1228,1230],{"class":275,"line":1229},18,[273,1231,469],{"class":291},[537,1233,1234],{},"This uses Better Auth's plugin API and does not require a module-specific option.",[255,1236,1238],{"id":1237},"createsession","createSession",[214,1240,1241],{},"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,1243,1246],{"className":265,"code":1244,"filename":1245,"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,1247,1248,1270,1290,1314,1318,1324,1340,1356,1360],{"__ignoreMap":269},[273,1249,1250,1252,1254,1256,1258,1260,1262,1264,1266,1268],{"class":275,"line":276},[273,1251,280],{"class":279},[273,1253,284],{"class":283},[273,1255,288],{"class":287},[273,1257,292],{"class":291},[273,1259,295],{"class":279},[273,1261,298],{"class":291},[273,1263,302],{"class":301},[273,1265,305],{"class":291},[273,1267,308],{"class":279},[273,1269,311],{"class":291},[273,1271,1272,1274,1277,1279,1281,1284,1286,1288],{"class":275,"line":314},[273,1273,317],{"class":279},[273,1275,1276],{"class":320}," userId",[273,1278,325],{"class":324},[273,1280,349],{"class":279},[273,1282,1283],{"class":287}," verifyCustomLoginAndReturnUserId",[273,1285,292],{"class":291},[273,1287,302],{"class":333},[273,1289,336],{"class":291},[273,1291,1292,1294,1296,1298,1300,1303,1305,1307,1309,1312],{"class":275,"line":339},[273,1293,317],{"class":279},[273,1295,344],{"class":320},[273,1297,325],{"class":324},[273,1299,349],{"class":279},[273,1301,1302],{"class":287}," createSession",[273,1304,292],{"class":291},[273,1306,302],{"class":333},[273,1308,779],{"class":291},[273,1310,1311],{"class":333},"userId",[273,1313,336],{"class":291},[273,1315,1316],{"class":275,"line":385},[273,1317,389],{"emptyLinePlaceholder":388},[273,1319,1320,1322],{"class":275,"line":392},[273,1321,446],{"class":279},[273,1323,311],{"class":291},[273,1325,1326,1329,1331,1333,1335,1338],{"class":275,"line":410},[273,1327,1328],{"class":333},"    sessionId",[273,1330,372],{"class":371},[273,1332,344],{"class":352},[273,1334,239],{"class":291},[273,1336,1337],{"class":333},"id",[273,1339,511],{"class":291},[273,1341,1342,1345,1347,1349,1351,1354],{"class":275,"line":432},[273,1343,1344],{"class":333},"    token",[273,1346,372],{"class":371},[273,1348,344],{"class":352},[273,1350,239],{"class":291},[273,1352,1353],{"class":333},"token",[273,1355,511],{"class":291},[273,1357,1358],{"class":275,"line":438},[273,1359,435],{"class":291},[273,1361,1362],{"class":275,"line":443},[273,1363,469],{"class":291},[214,1365,1366],{},"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,1368,1370],{"id":1369},"setsessioncookie","setSessionCookie",[214,1372,1373],{},"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,1375,1377],{"className":265,"code":1376,"filename":1245,"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,1378,1379,1401,1421,1425,1442,1446,1460],{"__ignoreMap":269},[273,1380,1381,1383,1385,1387,1389,1391,1393,1395,1397,1399],{"class":275,"line":276},[273,1382,280],{"class":279},[273,1384,284],{"class":283},[273,1386,288],{"class":287},[273,1388,292],{"class":291},[273,1390,295],{"class":279},[273,1392,298],{"class":291},[273,1394,302],{"class":301},[273,1396,305],{"class":291},[273,1398,308],{"class":279},[273,1400,311],{"class":291},[273,1402,1403,1405,1408,1410,1412,1415,1417,1419],{"class":275,"line":314},[273,1404,317],{"class":279},[273,1406,1407],{"class":320}," token",[273,1409,325],{"class":324},[273,1411,349],{"class":279},[273,1413,1414],{"class":287}," verifyCustomLoginAndReturnSessionToken",[273,1416,292],{"class":291},[273,1418,302],{"class":333},[273,1420,336],{"class":291},[273,1422,1423],{"class":275,"line":339},[273,1424,389],{"emptyLinePlaceholder":388},[273,1426,1427,1429,1432,1434,1436,1438,1440],{"class":275,"line":385},[273,1428,939],{"class":279},[273,1430,1431],{"class":287}," setSessionCookie",[273,1433,292],{"class":291},[273,1435,302],{"class":333},[273,1437,779],{"class":291},[273,1439,1353],{"class":333},[273,1441,336],{"class":291},[273,1443,1444],{"class":275,"line":392},[273,1445,389],{"emptyLinePlaceholder":388},[273,1447,1448,1450,1452,1454,1456,1458],{"class":275,"line":410},[273,1449,446],{"class":279},[273,1451,449],{"class":291},[273,1453,974],{"class":333},[273,1455,372],{"class":371},[273,1457,528],{"class":426},[273,1459,463],{"class":291},[273,1461,1462],{"class":275,"line":432},[273,1463,469],{"class":291},[214,1465,1466],{},"The helper signs the cookie with your Better Auth secret and uses the configured cookie name and attributes from your server auth config.",[537,1468,1469,1472],{},[221,1470,1471],{},"setSessionCookie(event, token)"," sets the session token cookie only. It does not try to recreate every internal Better Auth sign-in side effect.",[255,1474,785],{"id":1475},"requireusersession",[214,1477,1478,1479,990,1482,1485],{},"Ensures the user is authenticated and optionally matches specific criteria. Throws a ",[221,1480,1481],{},"401 Unauthorized",[221,1483,1484],{},"403 Forbidden"," error if checks fail.",[263,1487,1489],{"className":265,"code":1488,"language":268,"meta":269,"style":269},"const { user, session } = await requireUserSession(event, options?)\n",[221,1490,1491],{"__ignoreMap":269},[273,1492,1493,1496,1498,1500,1502,1504,1506,1509,1511,1514,1516,1518,1520,1523,1525],{"class":275,"line":276},[273,1494,1495],{"class":279},"const",[273,1497,449],{"class":291},[273,1499,452],{"class":320},[273,1501,779],{"class":291},[273,1503,404],{"class":320},[273,1505,1038],{"class":291},[273,1507,1508],{"class":324},"=",[273,1510,349],{"class":279},[273,1512,1513],{"class":287}," requireUserSession",[273,1515,292],{"class":291},[273,1517,302],{"class":352},[273,1519,779],{"class":291},[273,1521,1522],{"class":352},"options",[273,1524,1167],{"class":400},[273,1526,336],{"class":291},[537,1528,1529,1531,1532,235,1535,1538,1539,1542,1543,1545,1546,1549],{},[221,1530,785],{}," uses ",[221,1533,1534],{},"AuthUser",[221,1536,1537],{},"AuthSession"," from ",[221,1540,1541],{},"#nuxt-better-auth"," for both the returned value and option callbacks (",[221,1544,452],{}," match + ",[221,1547,1548],{},"rule",").",[757,1551,1552],{"id":1522},"Options",[1554,1555,1556,1561],"field-group",{},[1557,1558,1560],"field",{"name":452,"type":1559},"UserMatch","Object matching user properties (see Route Protection).",[1557,1562,1564],{"name":1548,"type":1563},"(ctx) => boolean | Promise\u003Cboolean>","Custom validation callback.",[757,1566,1568],{"id":1567},"examples","Examples",[214,1570,1571],{},[245,1572,1573],{},"Role Check:",[263,1575,1578],{"className":265,"code":1576,"filename":1577,"language":268,"meta":269,"style":269},"await requireUserSession(event, {\n  user: { role: 'admin' }\n})\n","server\u002Fapi\u002Fadmin\u002Fdashboard.ts",[221,1579,1580,1593,1612],{"__ignoreMap":269},[273,1581,1582,1584,1586,1588,1590],{"class":275,"line":276},[273,1583,482],{"class":279},[273,1585,1513],{"class":287},[273,1587,292],{"class":291},[273,1589,302],{"class":352},[273,1591,1592],{"class":291},", {\n",[273,1594,1595,1598,1600,1602,1605,1607,1610],{"class":275,"line":314},[273,1596,1597],{"class":333},"  user",[273,1599,372],{"class":371},[273,1601,449],{"class":291},[273,1603,1604],{"class":333},"role",[273,1606,372],{"class":371},[273,1608,1609],{"class":1044}," 'admin'",[273,1611,463],{"class":291},[273,1613,1614],{"class":275,"line":339},[273,1615,469],{"class":291},[214,1617,1618],{},[245,1619,1620],{},"Custom Rule:",[263,1622,1624],{"className":265,"code":1623,"filename":1577,"language":268,"meta":269,"style":269},"await requireUserSession(event, {\n  rule: ({ user }) => {\n    return user.points > 100\n  }\n})\n",[221,1625,1626,1638,1655,1673,1677],{"__ignoreMap":269},[273,1627,1628,1630,1632,1634,1636],{"class":275,"line":276},[273,1629,482],{"class":279},[273,1631,1513],{"class":287},[273,1633,292],{"class":291},[273,1635,302],{"class":352},[273,1637,1592],{"class":291},[273,1639,1640,1643,1645,1647,1649,1651,1653],{"class":275,"line":314},[273,1641,1642],{"class":287},"  rule",[273,1644,372],{"class":371},[273,1646,1097],{"class":291},[273,1648,452],{"class":301},[273,1650,1106],{"class":291},[273,1652,308],{"class":279},[273,1654,311],{"class":291},[273,1656,1657,1660,1662,1664,1667,1670],{"class":275,"line":339},[273,1658,1659],{"class":279},"    return",[273,1661,1145],{"class":352},[273,1663,239],{"class":291},[273,1665,1666],{"class":333},"points",[273,1668,1669],{"class":400}," >",[273,1671,1672],{"class":426}," 100\n",[273,1674,1675],{"class":275,"line":385},[273,1676,435],{"class":291},[273,1678,1679],{"class":275,"line":392},[273,1680,469],{"class":291},[255,1682,1684],{"id":1683},"combining-user-matching-with-rules","Combining User Matching with Rules",[263,1686,1689],{"className":265,"code":1687,"filename":1688,"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,1690,1691,1713,1735,1739,1744,1756,1773,1793,1826,1842,1847,1852,1856,1869],{"__ignoreMap":269},[273,1692,1693,1695,1697,1699,1701,1703,1705,1707,1709,1711],{"class":275,"line":276},[273,1694,280],{"class":279},[273,1696,284],{"class":283},[273,1698,288],{"class":287},[273,1700,292],{"class":291},[273,1702,295],{"class":279},[273,1704,298],{"class":291},[273,1706,302],{"class":301},[273,1708,305],{"class":291},[273,1710,308],{"class":279},[273,1712,311],{"class":291},[273,1714,1715,1717,1719,1722,1724,1726,1729,1731,1733],{"class":275,"line":314},[273,1716,317],{"class":279},[273,1718,449],{"class":291},[273,1720,1721],{"class":320},"teamId",[273,1723,1038],{"class":291},[273,1725,1508],{"class":324},[273,1727,1728],{"class":287}," getRouterParams",[273,1730,292],{"class":291},[273,1732,302],{"class":333},[273,1734,336],{"class":291},[273,1736,1737],{"class":275,"line":339},[273,1738,389],{"emptyLinePlaceholder":388},[273,1740,1741],{"class":275,"line":385},[273,1742,1743],{"class":620},"  \u002F\u002F Require admin role AND membership in the specific team\n",[273,1745,1746,1748,1750,1752,1754],{"class":275,"line":392},[273,1747,939],{"class":279},[273,1749,1513],{"class":287},[273,1751,292],{"class":291},[273,1753,302],{"class":333},[273,1755,1592],{"class":291},[273,1757,1758,1761,1763,1765,1767,1769,1771],{"class":275,"line":410},[273,1759,1760],{"class":333},"    user",[273,1762,372],{"class":371},[273,1764,449],{"class":291},[273,1766,1604],{"class":333},[273,1768,372],{"class":371},[273,1770,1609],{"class":1044},[273,1772,531],{"class":291},[273,1774,1775,1778,1780,1783,1785,1787,1789,1791],{"class":275,"line":432},[273,1776,1777],{"class":287},"    rule",[273,1779,372],{"class":371},[273,1781,1782],{"class":279}," async",[273,1784,298],{"class":291},[273,1786,404],{"class":301},[273,1788,305],{"class":291},[273,1790,308],{"class":279},[273,1792,311],{"class":291},[273,1794,1795,1798,1801,1803,1805,1808,1810,1812,1814,1816,1818,1820,1822,1824],{"class":275,"line":438},[273,1796,1797],{"class":279},"      const",[273,1799,1800],{"class":320}," membership",[273,1802,325],{"class":324},[273,1804,349],{"class":279},[273,1806,1807],{"class":287}," getTeamMembership",[273,1809,292],{"class":291},[273,1811,404],{"class":352},[273,1813,239],{"class":291},[273,1815,452],{"class":333},[273,1817,239],{"class":291},[273,1819,1337],{"class":333},[273,1821,779],{"class":291},[273,1823,1721],{"class":333},[273,1825,336],{"class":291},[273,1827,1828,1830,1832,1834,1836,1839],{"class":275,"line":443},[273,1829,1115],{"class":279},[273,1831,1800],{"class":352},[273,1833,1154],{"class":291},[273,1835,1604],{"class":333},[273,1837,1838],{"class":400}," ===",[273,1840,1841],{"class":1044}," 'owner'\n",[273,1843,1844],{"class":275,"line":466},[273,1845,1846],{"class":291},"    }\n",[273,1848,1849],{"class":275,"line":1181},[273,1850,1851],{"class":291},"  })\n",[273,1853,1854],{"class":275,"line":1187},[273,1855,389],{"emptyLinePlaceholder":388},[273,1857,1858,1860,1863,1865,1867],{"class":275,"line":1197},[273,1859,446],{"class":279},[273,1861,1862],{"class":287}," getTeamSettings",[273,1864,292],{"class":291},[273,1866,1721],{"class":333},[273,1868,336],{"class":291},[273,1870,1871],{"class":275,"line":1206},[273,1872,469],{"class":291},[255,1874,1876],{"id":1875},"related-pages","Related pages",[645,1878,1879,1884,1889],{},[648,1880,1881],{},[250,1882,1883],{"href":49},"Server auth concept",[648,1885,1886],{},[250,1887,1888],{"href":57},"Route protection",[648,1890,1891],{},[250,1892,154],{"href":155},[1894,1895,1896],"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 .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 .sPAZv, html code.shiki .sPAZv{--shiki-light:#50A14F;--shiki-default:#FF8B39;--shiki-dark:#FF8B39}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":1898},[1899,1900,1901,1902,1903,1904,1906,1907,1908,1912,1913],{"id":257,"depth":314,"text":258},{"id":549,"depth":314,"text":550},{"id":662,"depth":314,"text":663},{"id":768,"depth":314,"text":769},{"id":900,"depth":314,"text":901},{"id":1003,"depth":314,"text":1905},"Session Enrichment with custom-session",{"id":1237,"depth":314,"text":1238},{"id":1369,"depth":314,"text":1370},{"id":1475,"depth":314,"text":785,"children":1909},[1910,1911],{"id":1522,"depth":339,"text":1552},{"id":1567,"depth":339,"text":1568},{"id":1683,"depth":314,"text":1684},{"id":1875,"depth":314,"text":1876},"API reference for server-side helpers available in Nitro event handlers.","md",null,{},{"title":146,"description":1914},"WOT1LSwLnCCajVjKlYLo98Q4FuAcL4oG1R9y2MRdMd4",[1921,1923],{"title":142,"path":143,"stem":144,"description":1922,"children":-1},"API reference for client-side composables.",{"title":150,"path":151,"stem":152,"description":1924,"children":-1},"Built‑in UI helpers.",1791023652194]