[{"data":1,"prerenderedAt":1596},["ShallowReactive",2],{"navigation_docs":3,"-api-server-utils":152,"-api-server-utils-surround":1591},[4,42,68,110,131],{"title":5,"path":6,"stem":7,"children":8,"icon":11},"Getting Started","/getting-started","1.getting-started/0.index",[9,12,17,22,27,32,37],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-sparkles",{"title":13,"path":14,"stem":15,"icon":16},"Installation","/getting-started/installation","1.getting-started/1.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Configuration","/getting-started/configuration","1.getting-started/2.configuration","i-lucide-settings",{"title":23,"path":24,"stem":25,"icon":26},"Client Setup","/getting-started/client-setup","1.getting-started/3.client-setup","i-lucide-monitor",{"title":28,"path":29,"stem":30,"icon":31},"Type Augmentation","/getting-started/type-augmentation","1.getting-started/4.type-augmentation","i-lucide-type",{"title":33,"path":34,"stem":35,"icon":36},"Schema Generation (NuxtHub)","/getting-started/schema-generation","1.getting-started/5.schema-generation","i-lucide-database",{"title":38,"path":39,"stem":40,"icon":41},"How It Works","/getting-started/how-it-works","1.getting-started/6.how-it-works","i-lucide-workflow",{"title":43,"path":44,"stem":45,"children":46,"page":67},"Core Concepts","/core-concepts","2.core-concepts",[47,51,55,59,63],{"title":48,"path":49,"stem":50},"serverAuth()","/core-concepts/server-auth","2.core-concepts/1.server-auth",{"title":52,"path":53,"stem":54},"Sessions","/core-concepts/sessions","2.core-concepts/2.sessions",{"title":56,"path":57,"stem":58},"Route Protection","/core-concepts/route-protection","2.core-concepts/3.route-protection",{"title":60,"path":61,"stem":62},"Auto‑Imports and Aliases","/core-concepts/auto-imports-aliases","2.core-concepts/4.auto-imports-aliases",{"title":64,"path":65,"stem":66},"Security & Caveats","/core-concepts/security-caveats","2.core-concepts/5.security-caveats",false,{"title":69,"path":70,"stem":71,"children":72,"page":67},"Guides","/guides","3.guides",[73,77,81,85,89,94,98,102,106],{"title":74,"path":75,"stem":76},"Role‑Based Access","/guides/role-based-access","3.guides/1.role-based-access",{"title":78,"path":79,"stem":80},"OAuth Providers","/guides/oauth-providers","3.guides/2.oauth-providers",{"title":82,"path":83,"stem":84},"Custom Database","/guides/custom-database","3.guides/3.custom-database",{"title":86,"path":87,"stem":88},"Database-less Mode","/guides/database-less-mode","3.guides/4.database-less-mode",{"title":90,"path":91,"stem":92,"icon":93},"External Auth Backend","/guides/external-auth-backend","3.guides/5.external-auth-backend","i-lucide-server",{"title":95,"path":96,"stem":97},"Migrating from nuxt-auth-utils","/guides/migrate-from-nuxt-auth-utils","3.guides/6.migrate-from-nuxt-auth-utils",{"title":99,"path":100,"stem":101},"Two-Factor Authentication (TOTP + Backup Codes)","/guides/two-factor-auth","3.guides/7.two-factor-auth",{"title":103,"path":104,"stem":105},"Testing","/guides/testing","3.guides/8.testing",{"title":107,"path":108,"stem":109},"Production Deployment","/guides/production-deployment","3.guides/9.production-deployment",{"title":111,"path":112,"stem":113,"children":114,"page":67},"Integrations","/integrations","4.integrations",[115,119,123,127],{"title":116,"path":117,"stem":118},"NuxtHub","/integrations/nuxthub","4.integrations/1.nuxthub",{"title":120,"path":121,"stem":122},"DevTools","/integrations/devtools","4.integrations/2.devtools",{"title":124,"path":125,"stem":126},"Convex","/integrations/convex","4.integrations/3.convex",{"title":128,"path":129,"stem":130},"i18n","/integrations/i18n","4.integrations/4.i18n",{"title":132,"path":133,"stem":134,"children":135,"page":67},"API Reference","/api","5.api",[136,140,144,148],{"title":137,"path":138,"stem":139},"Composables","/api/composables","5.api/1.composables",{"title":141,"path":142,"stem":143},"Server Utilities","/api/server-utils","5.api/2.server-utils",{"title":145,"path":146,"stem":147},"Components","/api/components","5.api/3.components",{"title":149,"path":150,"stem":151},"Types","/api/types","5.api/4.types",{"id":153,"title":141,"body":154,"description":1585,"extension":1586,"links":1587,"meta":1588,"navigation":308,"path":142,"seo":1589,"stem":143,"__hash__":1590},"docs/5.api/2.server-utils.md",{"type":155,"value":156,"toc":1571},"minimark",[157,171,176,180,390,393,456,467,471,474,550,559,564,580,584,590,663,670,686,693,709,922,925,929,932,1054,1057,1061,1064,1156,1159,1165,1169,1179,1220,1244,1247,1259,1263,1268,1310,1315,1375,1379,1567],[158,159,160,161,165,166,170],"warning",{},"These utilities are only available in ",[162,163,164],"strong",{},"full mode",". In ",[167,168,169],"a",{"href":91},"clientOnly mode",", there is no local auth server, so these utilities are not registered.",[172,173,175],"h2",{"id":174},"serverauth","serverAuth",[177,178,179],"p",{},"Returns the initialized Better Auth instance (module-level singleton). Pass the event for accurate URL detection on first initialization.",[181,182,188],"pre",{"className":183,"code":184,"filename":185,"language":186,"meta":187,"style":187},"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/api/admin/users.get.ts","ts","",[189,190,191,231,256,303,310,328,350,356,361,384],"code",{"__ignoreMap":187},[192,193,196,200,204,208,212,215,218,222,225,228],"span",{"class":194,"line":195},"line",1,[192,197,199],{"class":198},"sqe1H","export",[192,201,203],{"class":202},"sKg8T"," default",[192,205,207],{"class":206},"sfT9l"," defineEventHandler",[192,209,211],{"class":210},"s17Py","(",[192,213,214],{"class":198},"async",[192,216,217],{"class":210}," (",[192,219,221],{"class":220},"sgisi","event",[192,223,224],{"class":210},") ",[192,226,227],{"class":198},"=>",[192,229,230],{"class":210}," {\n",[192,232,234,237,241,245,248,250,253],{"class":194,"line":233},2,[192,235,236],{"class":198},"  const",[192,238,240],{"class":239},"s6Rhl"," auth",[192,242,244],{"class":243},"sQBpM"," =",[192,246,247],{"class":206}," serverAuth",[192,249,211],{"class":210},[192,251,221],{"class":252},"sYvLG",[192,254,255],{"class":210},")\n",[192,257,259,261,264,266,269,272,275,278,280,283,286,289,293,296,298,300],{"class":194,"line":258},3,[192,260,236],{"class":198},[192,262,263],{"class":239}," session",[192,265,244],{"class":243},[192,267,268],{"class":198}," await",[192,270,240],{"class":271},"svFNh",[192,273,274],{"class":210},".",[192,276,277],{"class":252},"api",[192,279,274],{"class":210},[192,281,282],{"class":206},"getSession",[192,284,285],{"class":210},"({ ",[192,287,288],{"class":252},"headers",[192,290,292],{"class":291},"sVnqq",":",[192,294,295],{"class":271}," event",[192,297,274],{"class":210},[192,299,288],{"class":252},[192,301,302],{"class":210}," })\n",[192,304,306],{"class":194,"line":305},4,[192,307,309],{"emptyLinePlaceholder":308},true,"\n",[192,311,313,316,318,322,325],{"class":194,"line":312},5,[192,314,315],{"class":198},"  if",[192,317,217],{"class":210},[192,319,321],{"class":320},"sn-Jc","!",[192,323,324],{"class":252},"session",[192,326,327],{"class":210},") {\n",[192,329,331,334,337,339,342,344,348],{"class":194,"line":330},6,[192,332,333],{"class":198},"    throw",[192,335,336],{"class":206}," createError",[192,338,285],{"class":210},[192,340,341],{"class":252},"statusCode",[192,343,292],{"class":291},[192,345,347],{"class":346},"s3ZNE"," 401",[192,349,302],{"class":210},[192,351,353],{"class":194,"line":352},7,[192,354,355],{"class":210},"  }\n",[192,357,359],{"class":194,"line":358},8,[192,360,309],{"emptyLinePlaceholder":308},[192,362,364,367,370,373,375,377,379,381],{"class":194,"line":363},9,[192,365,366],{"class":198},"  return",[192,368,369],{"class":210}," { ",[192,371,372],{"class":252},"user",[192,374,292],{"class":291},[192,376,263],{"class":271},[192,378,274],{"class":210},[192,380,372],{"class":252},[192,382,383],{"class":210}," }\n",[192,385,387],{"class":194,"line":386},10,[192,388,389],{"class":210},"})\n",[177,391,392],{},"You can also pass query options to bypass cookie cache / refresh behavior:",[181,394,396],{"className":183,"code":395,"language":186,"meta":187,"style":187},"await auth.api.getSession({\n  headers: event.headers,\n  query: { disableCookieCache: true },\n})\n",[189,397,398,416,432,452],{"__ignoreMap":187},[192,399,400,403,405,407,409,411,413],{"class":194,"line":195},[192,401,402],{"class":198},"await",[192,404,240],{"class":271},[192,406,274],{"class":210},[192,408,277],{"class":252},[192,410,274],{"class":210},[192,412,282],{"class":206},[192,414,415],{"class":210},"({\n",[192,417,418,421,423,425,427,429],{"class":194,"line":233},[192,419,420],{"class":252},"  headers",[192,422,292],{"class":291},[192,424,295],{"class":271},[192,426,274],{"class":210},[192,428,288],{"class":252},[192,430,431],{"class":210},",\n",[192,433,434,437,439,441,444,446,449],{"class":194,"line":258},[192,435,436],{"class":252},"  query",[192,438,292],{"class":291},[192,440,369],{"class":210},[192,442,443],{"class":252},"disableCookieCache",[192,445,292],{"class":291},[192,447,448],{"class":346}," true",[192,450,451],{"class":210}," },\n",[192,453,454],{"class":194,"line":305},[192,455,389],{"class":210},[457,458,459,460,463,464,466],"note",{},"Use ",[189,461,462],{},"serverAuth(event)"," in request handlers to access advanced Better Auth features not exposed by the helper wrappers. In non-request contexts, you can call ",[189,465,48],{}," without an event.",[172,468,470],{"id":469},"getusersession","getUserSession",[177,472,473],{},"Retrieves the current session from the request context without throwing an error if unauthenticated.",[181,475,478],{"className":183,"code":476,"filename":477,"language":186,"meta":187,"style":187},"export default defineEventHandler(async (event) => {\n  const session = await getUserSession(event)\n  \n  if (session) {\n    // ...\n  }\n})\n","server/api/example.ts",[189,479,480,502,521,526,536,542,546],{"__ignoreMap":187},[192,481,482,484,486,488,490,492,494,496,498,500],{"class":194,"line":195},[192,483,199],{"class":198},[192,485,203],{"class":202},[192,487,207],{"class":206},[192,489,211],{"class":210},[192,491,214],{"class":198},[192,493,217],{"class":210},[192,495,221],{"class":220},[192,497,224],{"class":210},[192,499,227],{"class":198},[192,501,230],{"class":210},[192,503,504,506,508,510,512,515,517,519],{"class":194,"line":233},[192,505,236],{"class":198},[192,507,263],{"class":239},[192,509,244],{"class":243},[192,511,268],{"class":198},[192,513,514],{"class":206}," getUserSession",[192,516,211],{"class":210},[192,518,221],{"class":252},[192,520,255],{"class":210},[192,522,523],{"class":194,"line":258},[192,524,525],{"class":210},"  \n",[192,527,528,530,532,534],{"class":194,"line":305},[192,529,315],{"class":198},[192,531,217],{"class":210},[192,533,324],{"class":252},[192,535,327],{"class":210},[192,537,538],{"class":194,"line":312},[192,539,541],{"class":540},"st7cf","    // ...\n",[192,543,544],{"class":194,"line":330},[192,545,355],{"class":210},[192,547,548],{"class":194,"line":352},[192,549,389],{"class":210},[177,551,552,554,555,558],{},[189,553,470],{}," does not create request-cache entries by itself. Use ",[189,556,557],{},"getRequestSession(event)"," when you need request-lifetime caching across middleware/handlers.",[177,560,561],{},[162,562,563],{},"Returns:",[565,566,567,574],"ul",{},[568,569,570,573],"li",{},[189,571,572],{},"{ user: AuthUser, session: AuthSession }"," if authenticated.",[568,575,576,579],{},[189,577,578],{},"null"," if unauthenticated.",[172,581,583],{"id":582},"getrequestsession","getRequestSession",[177,585,586,587,274],{},"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 ",[189,588,589],{},"event.context.requestSession",[181,591,593],{"className":183,"code":592,"filename":477,"language":186,"meta":187,"style":187},"export default defineEventHandler(async (event) => {\n  const requestSession = await getRequestSession(event)\n  const sameRequestSession = await getRequestSession(event) // cached\n})\n",[189,594,595,617,637,659],{"__ignoreMap":187},[192,596,597,599,601,603,605,607,609,611,613,615],{"class":194,"line":195},[192,598,199],{"class":198},[192,600,203],{"class":202},[192,602,207],{"class":206},[192,604,211],{"class":210},[192,606,214],{"class":198},[192,608,217],{"class":210},[192,610,221],{"class":220},[192,612,224],{"class":210},[192,614,227],{"class":198},[192,616,230],{"class":210},[192,618,619,621,624,626,628,631,633,635],{"class":194,"line":233},[192,620,236],{"class":198},[192,622,623],{"class":239}," requestSession",[192,625,244],{"class":243},[192,627,268],{"class":198},[192,629,630],{"class":206}," getRequestSession",[192,632,211],{"class":210},[192,634,221],{"class":252},[192,636,255],{"class":210},[192,638,639,641,644,646,648,650,652,654,656],{"class":194,"line":258},[192,640,236],{"class":198},[192,642,643],{"class":239}," sameRequestSession",[192,645,244],{"class":243},[192,647,268],{"class":198},[192,649,630],{"class":206},[192,651,211],{"class":210},[192,653,221],{"class":252},[192,655,224],{"class":210},[192,657,658],{"class":540},"// cached\n",[192,660,661],{"class":194,"line":305},[192,662,389],{"class":210},[177,664,665,666,669],{},"Use this helper when multiple handlers/middleware in the same request need session access without repeating ",[189,667,668],{},"auth.api.getSession()"," calls.",[457,671,672,674,675,678,679,682,683,274],{},[189,673,583],{}," stays type-compatible in projects that use narrowed ",[189,676,677],{},"h3"," typings where ",[189,680,681],{},"H3Event"," does not explicitly declare ",[189,684,685],{},"context",[172,687,689,690],{"id":688},"session-enrichment-with-custom-session","Session Enrichment with ",[189,691,692],{},"custom-session",[177,694,695,696,698,699,702,703,705,706,708],{},"Use Better Auth's ",[189,697,692],{}," plugin when your app needs computed fields in the session payload returned by server helpers. Define the enrichment in ",[189,700,701],{},"server/auth.config.ts",", and ",[189,704,470],{}," or ",[189,707,583],{}," will return the enriched shape.",[181,710,712],{"className":183,"code":711,"filename":701,"language":186,"meta":187,"style":187},"import { customSession } from 'better-auth/plugins'\nimport { defineServerAuth } from '@onmax/nuxt-better-auth/config'\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",[189,713,714,734,750,754,765,775,801,808,817,826,869,875,885,894,899,905,911,917],{"__ignoreMap":187},[192,715,716,719,721,724,727,730],{"class":194,"line":195},[192,717,718],{"class":198},"import",[192,720,369],{"class":210},[192,722,723],{"class":252},"customSession",[192,725,726],{"class":210}," } ",[192,728,729],{"class":198},"from",[192,731,733],{"class":732},"sPAZv"," 'better-auth/plugins'\n",[192,735,736,738,740,743,745,747],{"class":194,"line":233},[192,737,718],{"class":198},[192,739,369],{"class":210},[192,741,742],{"class":252},"defineServerAuth",[192,744,726],{"class":210},[192,746,729],{"class":198},[192,748,749],{"class":732}," '@onmax/nuxt-better-auth/config'\n",[192,751,752],{"class":194,"line":258},[192,753,309],{"emptyLinePlaceholder":308},[192,755,756,758,760,763],{"class":194,"line":305},[192,757,199],{"class":198},[192,759,203],{"class":202},[192,761,762],{"class":206}," defineServerAuth",[192,764,415],{"class":210},[192,766,767,770,772],{"class":194,"line":312},[192,768,769],{"class":252},"  plugins",[192,771,292],{"class":291},[192,773,774],{"class":210}," [\n",[192,776,777,780,782,784,787,789,792,794,797,799],{"class":194,"line":330},[192,778,779],{"class":206},"    customSession",[192,781,211],{"class":210},[192,783,214],{"class":198},[192,785,786],{"class":210}," ({ ",[192,788,372],{"class":220},[192,790,791],{"class":210},", ",[192,793,324],{"class":220},[192,795,796],{"class":210}," }) ",[192,798,227],{"class":198},[192,800,230],{"class":210},[192,802,803,806],{"class":194,"line":352},[192,804,805],{"class":198},"      return",[192,807,230],{"class":210},[192,809,810,813,815],{"class":194,"line":358},[192,811,812],{"class":252},"        user",[192,814,292],{"class":291},[192,816,230],{"class":210},[192,818,819,822,824],{"class":194,"line":363},[192,820,821],{"class":320},"          ...",[192,823,372],{"class":252},[192,825,431],{"class":210},[192,827,828,831,833,836,838,842,845,848,850,853,855,858,861,864,867],{"class":194,"line":386},[192,829,830],{"class":252},"          role",[192,832,292],{"class":291},[192,834,835],{"class":271}," user",[192,837,274],{"class":210},[192,839,841],{"class":840},"sjaJz","email",[192,843,844],{"class":210},"?.",[192,846,847],{"class":206},"endsWith",[192,849,211],{"class":210},[192,851,852],{"class":732},"'@company.com'",[192,854,224],{"class":210},[192,856,857],{"class":320},"?",[192,859,860],{"class":732}," 'member'",[192,862,863],{"class":320}," :",[192,865,866],{"class":732}," 'guest'",[192,868,431],{"class":210},[192,870,872],{"class":194,"line":871},11,[192,873,874],{"class":210},"        },\n",[192,876,878,881,883],{"class":194,"line":877},12,[192,879,880],{"class":252},"        session",[192,882,292],{"class":291},[192,884,230],{"class":210},[192,886,888,890,892],{"class":194,"line":887},13,[192,889,821],{"class":320},[192,891,324],{"class":252},[192,893,431],{"class":210},[192,895,897],{"class":194,"line":896},14,[192,898,874],{"class":210},[192,900,902],{"class":194,"line":901},15,[192,903,904],{"class":210},"      }\n",[192,906,908],{"class":194,"line":907},16,[192,909,910],{"class":210},"    }),\n",[192,912,914],{"class":194,"line":913},17,[192,915,916],{"class":210},"  ],\n",[192,918,920],{"class":194,"line":919},18,[192,921,389],{"class":210},[457,923,924],{},"This uses Better Auth's plugin API and does not require a module-specific option.",[172,926,928],{"id":927},"createsession","createSession",[177,930,931],{},"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.",[181,933,936],{"className":183,"code":934,"filename":935,"language":186,"meta":187,"style":187},"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/api/custom-auth.post.ts",[189,937,938,960,980,1004,1008,1014,1030,1046,1050],{"__ignoreMap":187},[192,939,940,942,944,946,948,950,952,954,956,958],{"class":194,"line":195},[192,941,199],{"class":198},[192,943,203],{"class":202},[192,945,207],{"class":206},[192,947,211],{"class":210},[192,949,214],{"class":198},[192,951,217],{"class":210},[192,953,221],{"class":220},[192,955,224],{"class":210},[192,957,227],{"class":198},[192,959,230],{"class":210},[192,961,962,964,967,969,971,974,976,978],{"class":194,"line":233},[192,963,236],{"class":198},[192,965,966],{"class":239}," userId",[192,968,244],{"class":243},[192,970,268],{"class":198},[192,972,973],{"class":206}," verifyCustomLoginAndReturnUserId",[192,975,211],{"class":210},[192,977,221],{"class":252},[192,979,255],{"class":210},[192,981,982,984,986,988,990,993,995,997,999,1002],{"class":194,"line":258},[192,983,236],{"class":198},[192,985,263],{"class":239},[192,987,244],{"class":243},[192,989,268],{"class":198},[192,991,992],{"class":206}," createSession",[192,994,211],{"class":210},[192,996,221],{"class":252},[192,998,791],{"class":210},[192,1000,1001],{"class":252},"userId",[192,1003,255],{"class":210},[192,1005,1006],{"class":194,"line":305},[192,1007,309],{"emptyLinePlaceholder":308},[192,1009,1010,1012],{"class":194,"line":312},[192,1011,366],{"class":198},[192,1013,230],{"class":210},[192,1015,1016,1019,1021,1023,1025,1028],{"class":194,"line":330},[192,1017,1018],{"class":252},"    sessionId",[192,1020,292],{"class":291},[192,1022,263],{"class":271},[192,1024,274],{"class":210},[192,1026,1027],{"class":252},"id",[192,1029,431],{"class":210},[192,1031,1032,1035,1037,1039,1041,1044],{"class":194,"line":352},[192,1033,1034],{"class":252},"    token",[192,1036,292],{"class":291},[192,1038,263],{"class":271},[192,1040,274],{"class":210},[192,1042,1043],{"class":252},"token",[192,1045,431],{"class":210},[192,1047,1048],{"class":194,"line":358},[192,1049,355],{"class":210},[192,1051,1052],{"class":194,"line":363},[192,1053,389],{"class":210},[177,1055,1056],{},"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.",[172,1058,1060],{"id":1059},"setsessioncookie","setSessionCookie",[177,1062,1063],{},"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.",[181,1065,1067],{"className":183,"code":1066,"filename":935,"language":186,"meta":187,"style":187},"export default defineEventHandler(async (event) => {\n  const token = await verifyCustomLoginAndReturnSessionToken(event)\n\n  await setSessionCookie(event, token)\n\n  return { ok: true }\n})\n",[189,1068,1069,1091,1111,1115,1133,1137,1152],{"__ignoreMap":187},[192,1070,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089],{"class":194,"line":195},[192,1072,199],{"class":198},[192,1074,203],{"class":202},[192,1076,207],{"class":206},[192,1078,211],{"class":210},[192,1080,214],{"class":198},[192,1082,217],{"class":210},[192,1084,221],{"class":220},[192,1086,224],{"class":210},[192,1088,227],{"class":198},[192,1090,230],{"class":210},[192,1092,1093,1095,1098,1100,1102,1105,1107,1109],{"class":194,"line":233},[192,1094,236],{"class":198},[192,1096,1097],{"class":239}," token",[192,1099,244],{"class":243},[192,1101,268],{"class":198},[192,1103,1104],{"class":206}," verifyCustomLoginAndReturnSessionToken",[192,1106,211],{"class":210},[192,1108,221],{"class":252},[192,1110,255],{"class":210},[192,1112,1113],{"class":194,"line":258},[192,1114,309],{"emptyLinePlaceholder":308},[192,1116,1117,1120,1123,1125,1127,1129,1131],{"class":194,"line":305},[192,1118,1119],{"class":198},"  await",[192,1121,1122],{"class":206}," setSessionCookie",[192,1124,211],{"class":210},[192,1126,221],{"class":252},[192,1128,791],{"class":210},[192,1130,1043],{"class":252},[192,1132,255],{"class":210},[192,1134,1135],{"class":194,"line":312},[192,1136,309],{"emptyLinePlaceholder":308},[192,1138,1139,1141,1143,1146,1148,1150],{"class":194,"line":330},[192,1140,366],{"class":198},[192,1142,369],{"class":210},[192,1144,1145],{"class":252},"ok",[192,1147,292],{"class":291},[192,1149,448],{"class":346},[192,1151,383],{"class":210},[192,1153,1154],{"class":194,"line":352},[192,1155,389],{"class":210},[177,1157,1158],{},"The helper signs the cookie with your Better Auth secret and uses the configured cookie name and attributes from your server auth config.",[457,1160,1161,1164],{},[189,1162,1163],{},"setSessionCookie(event, token)"," sets the session token cookie only. It does not try to recreate every internal Better Auth sign-in side effect.",[172,1166,1168],{"id":1167},"requireusersession","requireUserSession",[177,1170,1171,1172,705,1175,1178],{},"Ensures the user is authenticated and optionally matches specific criteria. Throws a ",[189,1173,1174],{},"401 Unauthorized",[189,1176,1177],{},"403 Forbidden"," error if checks fail.",[181,1180,1182],{"className":183,"code":1181,"language":186,"meta":187,"style":187},"const { user, session } = await requireUserSession(event, options?)\n",[189,1183,1184],{"__ignoreMap":187},[192,1185,1186,1189,1191,1193,1195,1197,1199,1202,1204,1207,1209,1211,1213,1216,1218],{"class":194,"line":195},[192,1187,1188],{"class":198},"const",[192,1190,369],{"class":210},[192,1192,372],{"class":239},[192,1194,791],{"class":210},[192,1196,324],{"class":239},[192,1198,726],{"class":210},[192,1200,1201],{"class":243},"=",[192,1203,268],{"class":198},[192,1205,1206],{"class":206}," requireUserSession",[192,1208,211],{"class":210},[192,1210,221],{"class":271},[192,1212,791],{"class":210},[192,1214,1215],{"class":271},"options",[192,1217,857],{"class":320},[192,1219,255],{"class":210},[457,1221,1222,1224,1225,1228,1229,1232,1233,1236,1237,1239,1240,1243],{},[189,1223,1168],{}," uses ",[189,1226,1227],{},"AuthUser"," and ",[189,1230,1231],{},"AuthSession"," from ",[189,1234,1235],{},"#nuxt-better-auth"," for both the returned value and option callbacks (",[189,1238,372],{}," match + ",[189,1241,1242],{},"rule",").",[677,1245,1246],{"id":1215},"Options",[1248,1249,1250,1255],"field-group",{},[1251,1252,1254],"field",{"name":372,"type":1253},"UserMatch","Object matching user properties (see Route Protection).",[1251,1256,1258],{"name":1242,"type":1257},"(ctx) => boolean | Promise\u003Cboolean>","Custom validation callback.",[677,1260,1262],{"id":1261},"examples","Examples",[177,1264,1265],{},[162,1266,1267],{},"Role Check:",[181,1269,1272],{"className":183,"code":1270,"filename":1271,"language":186,"meta":187,"style":187},"await requireUserSession(event, {\n  user: { role: 'admin' }\n})\n","server/api/admin/dashboard.ts",[189,1273,1274,1287,1306],{"__ignoreMap":187},[192,1275,1276,1278,1280,1282,1284],{"class":194,"line":195},[192,1277,402],{"class":198},[192,1279,1206],{"class":206},[192,1281,211],{"class":210},[192,1283,221],{"class":271},[192,1285,1286],{"class":210},", {\n",[192,1288,1289,1292,1294,1296,1299,1301,1304],{"class":194,"line":233},[192,1290,1291],{"class":252},"  user",[192,1293,292],{"class":291},[192,1295,369],{"class":210},[192,1297,1298],{"class":252},"role",[192,1300,292],{"class":291},[192,1302,1303],{"class":732}," 'admin'",[192,1305,383],{"class":210},[192,1307,1308],{"class":194,"line":258},[192,1309,389],{"class":210},[177,1311,1312],{},[162,1313,1314],{},"Custom Rule:",[181,1316,1318],{"className":183,"code":1317,"filename":1271,"language":186,"meta":187,"style":187},"await requireUserSession(event, {\n  rule: ({ user }) => {\n    return user.points > 100\n  }\n})\n",[189,1319,1320,1332,1349,1367,1371],{"__ignoreMap":187},[192,1321,1322,1324,1326,1328,1330],{"class":194,"line":195},[192,1323,402],{"class":198},[192,1325,1206],{"class":206},[192,1327,211],{"class":210},[192,1329,221],{"class":271},[192,1331,1286],{"class":210},[192,1333,1334,1337,1339,1341,1343,1345,1347],{"class":194,"line":233},[192,1335,1336],{"class":206},"  rule",[192,1338,292],{"class":291},[192,1340,786],{"class":210},[192,1342,372],{"class":220},[192,1344,796],{"class":210},[192,1346,227],{"class":198},[192,1348,230],{"class":210},[192,1350,1351,1354,1356,1358,1361,1364],{"class":194,"line":258},[192,1352,1353],{"class":198},"    return",[192,1355,835],{"class":271},[192,1357,274],{"class":210},[192,1359,1360],{"class":252},"points",[192,1362,1363],{"class":320}," >",[192,1365,1366],{"class":346}," 100\n",[192,1368,1369],{"class":194,"line":305},[192,1370,355],{"class":210},[192,1372,1373],{"class":194,"line":312},[192,1374,389],{"class":210},[172,1376,1378],{"id":1377},"combining-user-matching-with-rules","Combining User Matching with Rules",[181,1380,1383],{"className":183,"code":1381,"filename":1382,"language":186,"meta":187,"style":187},"export default defineEventHandler(async (event) => {\n  const { teamId } = getRouterParams(event)\n\n  // 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/api/team/[teamId]/settings.ts",[189,1384,1385,1407,1429,1433,1438,1450,1467,1487,1520,1536,1541,1546,1550,1563],{"__ignoreMap":187},[192,1386,1387,1389,1391,1393,1395,1397,1399,1401,1403,1405],{"class":194,"line":195},[192,1388,199],{"class":198},[192,1390,203],{"class":202},[192,1392,207],{"class":206},[192,1394,211],{"class":210},[192,1396,214],{"class":198},[192,1398,217],{"class":210},[192,1400,221],{"class":220},[192,1402,224],{"class":210},[192,1404,227],{"class":198},[192,1406,230],{"class":210},[192,1408,1409,1411,1413,1416,1418,1420,1423,1425,1427],{"class":194,"line":233},[192,1410,236],{"class":198},[192,1412,369],{"class":210},[192,1414,1415],{"class":239},"teamId",[192,1417,726],{"class":210},[192,1419,1201],{"class":243},[192,1421,1422],{"class":206}," getRouterParams",[192,1424,211],{"class":210},[192,1426,221],{"class":252},[192,1428,255],{"class":210},[192,1430,1431],{"class":194,"line":258},[192,1432,309],{"emptyLinePlaceholder":308},[192,1434,1435],{"class":194,"line":305},[192,1436,1437],{"class":540},"  // Require admin role AND membership in the specific team\n",[192,1439,1440,1442,1444,1446,1448],{"class":194,"line":312},[192,1441,1119],{"class":198},[192,1443,1206],{"class":206},[192,1445,211],{"class":210},[192,1447,221],{"class":252},[192,1449,1286],{"class":210},[192,1451,1452,1455,1457,1459,1461,1463,1465],{"class":194,"line":330},[192,1453,1454],{"class":252},"    user",[192,1456,292],{"class":291},[192,1458,369],{"class":210},[192,1460,1298],{"class":252},[192,1462,292],{"class":291},[192,1464,1303],{"class":732},[192,1466,451],{"class":210},[192,1468,1469,1472,1474,1477,1479,1481,1483,1485],{"class":194,"line":352},[192,1470,1471],{"class":206},"    rule",[192,1473,292],{"class":291},[192,1475,1476],{"class":198}," async",[192,1478,217],{"class":210},[192,1480,324],{"class":220},[192,1482,224],{"class":210},[192,1484,227],{"class":198},[192,1486,230],{"class":210},[192,1488,1489,1492,1495,1497,1499,1502,1504,1506,1508,1510,1512,1514,1516,1518],{"class":194,"line":358},[192,1490,1491],{"class":198},"      const",[192,1493,1494],{"class":239}," membership",[192,1496,244],{"class":243},[192,1498,268],{"class":198},[192,1500,1501],{"class":206}," getTeamMembership",[192,1503,211],{"class":210},[192,1505,324],{"class":271},[192,1507,274],{"class":210},[192,1509,372],{"class":252},[192,1511,274],{"class":210},[192,1513,1027],{"class":252},[192,1515,791],{"class":210},[192,1517,1415],{"class":252},[192,1519,255],{"class":210},[192,1521,1522,1524,1526,1528,1530,1533],{"class":194,"line":363},[192,1523,805],{"class":198},[192,1525,1494],{"class":271},[192,1527,844],{"class":210},[192,1529,1298],{"class":252},[192,1531,1532],{"class":320}," ===",[192,1534,1535],{"class":732}," 'owner'\n",[192,1537,1538],{"class":194,"line":386},[192,1539,1540],{"class":210},"    }\n",[192,1542,1543],{"class":194,"line":871},[192,1544,1545],{"class":210},"  })\n",[192,1547,1548],{"class":194,"line":877},[192,1549,309],{"emptyLinePlaceholder":308},[192,1551,1552,1554,1557,1559,1561],{"class":194,"line":887},[192,1553,366],{"class":198},[192,1555,1556],{"class":206}," getTeamSettings",[192,1558,211],{"class":210},[192,1560,1415],{"class":252},[192,1562,255],{"class":210},[192,1564,1565],{"class":194,"line":896},[192,1566,389],{"class":210},[1568,1569,1570],"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":187,"searchDepth":233,"depth":233,"links":1572},[1573,1574,1575,1576,1578,1579,1580,1584],{"id":174,"depth":233,"text":175},{"id":469,"depth":233,"text":470},{"id":582,"depth":233,"text":583},{"id":688,"depth":233,"text":1577},"Session Enrichment with custom-session",{"id":927,"depth":233,"text":928},{"id":1059,"depth":233,"text":1060},{"id":1167,"depth":233,"text":1168,"children":1581},[1582,1583],{"id":1215,"depth":258,"text":1246},{"id":1261,"depth":258,"text":1262},{"id":1377,"depth":233,"text":1378},"API reference for server-side helpers available in Nitro event handlers.","md",null,{},{"title":141,"description":1585},"AkpsbEFSBrV2Jv15mVuFYr2_oQ6FHrMMlN20DL9yLrU",[1592,1594],{"title":137,"path":138,"stem":139,"description":1593,"children":-1},"API reference for client-side composables.",{"title":145,"path":146,"stem":147,"description":1595,"children":-1},"Built‑in UI helpers.",1775080953601]