[{"data":1,"prerenderedAt":1399},["ShallowReactive",2],{"navigation_docs":3,"-integrations-i18n":208,"-integrations-i18n-surround":1394},[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":133,"body":210,"description":1388,"extension":1389,"links":1390,"meta":1391,"navigation":655,"path":134,"seo":1392,"stem":135,"__hash__":1393},"docs\u002F4.integrations\u002F4.i18n.md",{"type":211,"value":212,"toc":1378},"minimark",[213,222,228,233,377,381,388,529,533,542,999,1010,1014,1025,1035,1227,1231,1351,1364,1374],[214,215,216,217,221],"p",{},"Use this guide when you already have ",[218,219,220],"code",{},"@nuxtjs\u002Fi18n"," configured and you want auth errors to respect the active locale.",[214,223,224,225,227],{},"This integration enables translated authentication error messages using your existing ",[218,226,220],{}," setup.",[229,230,232],"h2",{"id":231},"setup","Setup",[234,235,236,241,266,270],"steps",{},[237,238,240],"h3",{"id":239},"install-nuxtjsi18n","Install @nuxtjs\u002Fi18n",[242,243,248],"pre",{"className":244,"code":245,"language":246,"meta":247,"style":247},"language-bash shiki shiki-themes one-light synthwave-84 synthwave-84","pnpm add @nuxtjs\u002Fi18n\n","bash","",[218,249,250],{"__ignoreMap":247},[251,252,255,259,263],"span",{"class":253,"line":254},"line",1,[251,256,258],{"class":257},"siqUp","pnpm",[251,260,262],{"class":261},"sI3kV"," add",[251,264,265],{"class":261}," @nuxtjs\u002Fi18n\n",[237,267,269],{"id":268},"configure-nuxtconfigts","Configure nuxt.config.ts",[242,271,276],{"className":272,"code":273,"filename":274,"language":275,"meta":247,"style":247},"language-ts shiki shiki-themes one-light synthwave-84 synthwave-84","export default defineNuxtConfig({\n  modules: ['@nuxtjs\u002Fi18n', '@nuxtjs\u002Fbetter-auth'],\n  i18n: {\n    locales: ['en', 'es'],\n    defaultLocale: 'en'\n  }\n})\n","nuxt.config.ts","ts",[218,277,278,296,323,334,354,365,371],{"__ignoreMap":247},[251,279,280,284,288,292],{"class":253,"line":254},[251,281,283],{"class":282},"sqe1H","export",[251,285,287],{"class":286},"sKg8T"," default",[251,289,291],{"class":290},"sfT9l"," defineNuxtConfig",[251,293,295],{"class":294},"s17Py","({\n",[251,297,299,303,307,310,314,317,320],{"class":253,"line":298},2,[251,300,302],{"class":301},"sYvLG","  modules",[251,304,306],{"class":305},"sVnqq",":",[251,308,309],{"class":294}," [",[251,311,313],{"class":312},"sPAZv","'@nuxtjs\u002Fi18n'",[251,315,316],{"class":294},", ",[251,318,319],{"class":312},"'@nuxtjs\u002Fbetter-auth'",[251,321,322],{"class":294},"],\n",[251,324,326,329,331],{"class":253,"line":325},3,[251,327,328],{"class":301},"  i18n",[251,330,306],{"class":305},[251,332,333],{"class":294}," {\n",[251,335,337,340,342,344,347,349,352],{"class":253,"line":336},4,[251,338,339],{"class":301},"    locales",[251,341,306],{"class":305},[251,343,309],{"class":294},[251,345,346],{"class":312},"'en'",[251,348,316],{"class":294},[251,350,351],{"class":312},"'es'",[251,353,322],{"class":294},[251,355,357,360,362],{"class":253,"line":356},5,[251,358,359],{"class":301},"    defaultLocale",[251,361,306],{"class":305},[251,363,364],{"class":312}," 'en'\n",[251,366,368],{"class":253,"line":367},6,[251,369,370],{"class":294},"  }\n",[251,372,374],{"class":253,"line":373},7,[251,375,376],{"class":294},"})\n",[229,378,380],{"id":379},"translation-files","Translation Files",[214,382,383,384,387],{},"Add error translations to your locale files using the ",[218,385,386],{},"auth.errors.*"," prefix:",[389,390,391,466],"code-group",{},[242,392,397],{"className":393,"code":394,"filename":395,"language":396,"meta":247,"style":247},"language-yaml shiki shiki-themes one-light synthwave-84 synthwave-84","auth:\n  errors:\n    USER_NOT_FOUND: \"User not found\"\n    INVALID_PASSWORD: \"Invalid password\"\n    INVALID_EMAIL_OR_PASSWORD: \"Invalid email or password\"\n    EMAIL_NOT_VERIFIED: \"Please verify your email first\"\n    SESSION_EXPIRED: \"Session expired, please sign in again\"\n","locales\u002Fen.yaml","yaml",[218,398,399,409,416,426,436,446,456],{"__ignoreMap":247},[251,400,401,405],{"class":253,"line":254},[251,402,404],{"class":403},"stweg","auth",[251,406,408],{"class":407},"sNM9w",":\n",[251,410,411,414],{"class":253,"line":298},[251,412,413],{"class":403},"  errors",[251,415,408],{"class":407},[251,417,418,421,423],{"class":253,"line":325},[251,419,420],{"class":403},"    USER_NOT_FOUND",[251,422,306],{"class":407},[251,424,425],{"class":312}," \"User not found\"\n",[251,427,428,431,433],{"class":253,"line":336},[251,429,430],{"class":403},"    INVALID_PASSWORD",[251,432,306],{"class":407},[251,434,435],{"class":312}," \"Invalid password\"\n",[251,437,438,441,443],{"class":253,"line":356},[251,439,440],{"class":403},"    INVALID_EMAIL_OR_PASSWORD",[251,442,306],{"class":407},[251,444,445],{"class":312}," \"Invalid email or password\"\n",[251,447,448,451,453],{"class":253,"line":367},[251,449,450],{"class":403},"    EMAIL_NOT_VERIFIED",[251,452,306],{"class":407},[251,454,455],{"class":312}," \"Please verify your email first\"\n",[251,457,458,461,463],{"class":253,"line":373},[251,459,460],{"class":403},"    SESSION_EXPIRED",[251,462,306],{"class":407},[251,464,465],{"class":312}," \"Session expired, please sign in again\"\n",[242,467,470],{"className":393,"code":468,"filename":469,"language":396,"meta":247,"style":247},"auth:\n  errors:\n    USER_NOT_FOUND: \"Usuario no encontrado\"\n    INVALID_PASSWORD: \"Contraseña incorrecta\"\n    INVALID_EMAIL_OR_PASSWORD: \"Email o contraseña incorrectos\"\n    EMAIL_NOT_VERIFIED: \"Por favor verifica tu email primero\"\n    SESSION_EXPIRED: \"Sesión expirada, inicia sesión de nuevo\"\n","locales\u002Fes.yaml",[218,471,472,478,484,493,502,511,520],{"__ignoreMap":247},[251,473,474,476],{"class":253,"line":254},[251,475,404],{"class":403},[251,477,408],{"class":407},[251,479,480,482],{"class":253,"line":298},[251,481,413],{"class":403},[251,483,408],{"class":407},[251,485,486,488,490],{"class":253,"line":325},[251,487,420],{"class":403},[251,489,306],{"class":407},[251,491,492],{"class":312}," \"Usuario no encontrado\"\n",[251,494,495,497,499],{"class":253,"line":336},[251,496,430],{"class":403},[251,498,306],{"class":407},[251,500,501],{"class":312}," \"Contraseña incorrecta\"\n",[251,503,504,506,508],{"class":253,"line":356},[251,505,440],{"class":403},[251,507,306],{"class":407},[251,509,510],{"class":312}," \"Email o contraseña incorrectos\"\n",[251,512,513,515,517],{"class":253,"line":367},[251,514,450],{"class":403},[251,516,306],{"class":407},[251,518,519],{"class":312}," \"Por favor verifica tu email primero\"\n",[251,521,522,524,526],{"class":253,"line":373},[251,523,460],{"class":403},[251,525,306],{"class":407},[251,527,528],{"class":312}," \"Sesión expirada, inicia sesión de nuevo\"\n",[229,530,532],{"id":531},"client-side-error-handling","Client-Side Error Handling",[214,534,535,536,538,539,306],{},"Better Auth errors include a ",[218,537,218],{}," property that you can translate using ",[218,540,541],{},"useI18n()",[242,543,548],{"className":544,"code":545,"filename":546,"language":547,"meta":247,"style":247},"language-vue shiki shiki-themes one-light synthwave-84 synthwave-84","\u003Cscript setup lang=\"ts\">\nconst {\n  execute: signInWithEmail,\n  error,\n} = useSignIn('email')\nconst { t, te } = useI18n()\n\nasync function handleLogin(email: string, password: string) {\n  await signInWithEmail(\n    { email, password },\n    {\n      onSuccess: () => navigateTo('\u002Fapp'),\n    }\n  )\n}\n\nconst localizedErrorMessage = computed(() => {\n  const code = error.value?.code\n  if (!code)\n    return error.value?.message\n  const key = `auth.errors.${code}`\n  return te(key) ? t(key) : error.value?.message\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv v-if=\"localizedErrorMessage\" class=\"error\">{{ localizedErrorMessage }}\u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n","pages\u002Flogin.vue","vue",[218,549,550,575,583,598,605,625,651,657,694,706,722,728,754,760,766,772,777,798,824,840,857,882,923,928,938,943,953,990],{"__ignoreMap":247},[251,551,552,556,559,563,566,569,572],{"class":253,"line":254},[251,553,555],{"class":554},"sL9le","\u003C",[251,557,558],{"class":403},"script",[251,560,562],{"class":561},"s0frj"," setup",[251,564,565],{"class":561}," lang",[251,567,568],{"class":407},"=",[251,570,571],{"class":312},"\"ts\"",[251,573,574],{"class":554},">\n",[251,576,577,580],{"class":253,"line":298},[251,578,579],{"class":282},"const",[251,581,333],{"class":582},"sEEOt",[251,584,585,588,591,595],{"class":253,"line":325},[251,586,587],{"class":301},"  execute",[251,589,590],{"class":582},": ",[251,592,594],{"class":593},"s6Rhl","signInWithEmail",[251,596,597],{"class":582},",\n",[251,599,600,603],{"class":253,"line":336},[251,601,602],{"class":593},"  error",[251,604,597],{"class":582},[251,606,607,610,613,616,619,622],{"class":253,"line":356},[251,608,609],{"class":582},"} ",[251,611,568],{"class":612},"sQBpM",[251,614,615],{"class":290}," useSignIn",[251,617,618],{"class":582},"(",[251,620,621],{"class":312},"'email'",[251,623,624],{"class":582},")\n",[251,626,627,629,632,635,637,640,643,645,648],{"class":253,"line":367},[251,628,579],{"class":282},[251,630,631],{"class":582}," { ",[251,633,634],{"class":593},"t",[251,636,316],{"class":582},[251,638,639],{"class":593},"te",[251,641,642],{"class":582}," } ",[251,644,568],{"class":612},[251,646,647],{"class":290}," useI18n",[251,649,650],{"class":582},"()\n",[251,652,653],{"class":253,"line":373},[251,654,656],{"emptyLinePlaceholder":655},true,"\n",[251,658,660,663,666,669,671,675,678,682,684,687,689,691],{"class":253,"line":659},8,[251,661,662],{"class":282},"async",[251,664,665],{"class":282}," function",[251,667,668],{"class":290}," handleLogin",[251,670,618],{"class":582},[251,672,674],{"class":673},"sgisi","email",[251,676,306],{"class":677},"sn-Jc",[251,679,681],{"class":680},"sr8De"," string",[251,683,316],{"class":582},[251,685,686],{"class":673},"password",[251,688,306],{"class":677},[251,690,681],{"class":680},[251,692,693],{"class":582},") {\n",[251,695,697,700,703],{"class":253,"line":696},9,[251,698,699],{"class":282},"  await",[251,701,702],{"class":290}," signInWithEmail",[251,704,705],{"class":582},"(\n",[251,707,709,712,715,717,719],{"class":253,"line":708},10,[251,710,711],{"class":582},"    { ",[251,713,674],{"class":714},"svFNh",[251,716,316],{"class":582},[251,718,686],{"class":714},[251,720,721],{"class":582}," },\n",[251,723,725],{"class":253,"line":724},11,[251,726,727],{"class":582},"    {\n",[251,729,731,734,736,739,742,745,747,751],{"class":253,"line":730},12,[251,732,733],{"class":290},"      onSuccess",[251,735,306],{"class":305},[251,737,738],{"class":582}," () ",[251,740,741],{"class":282},"=>",[251,743,744],{"class":554}," navigateTo",[251,746,618],{"class":582},[251,748,750],{"class":749},"ss3L-","'\u002Fapp'",[251,752,753],{"class":582},"),\n",[251,755,757],{"class":253,"line":756},13,[251,758,759],{"class":582},"    }\n",[251,761,763],{"class":253,"line":762},14,[251,764,765],{"class":582},"  )\n",[251,767,769],{"class":253,"line":768},15,[251,770,771],{"class":582},"}\n",[251,773,775],{"class":253,"line":774},16,[251,776,656],{"emptyLinePlaceholder":655},[251,778,780,782,785,788,791,794,796],{"class":253,"line":779},17,[251,781,579],{"class":282},[251,783,784],{"class":593}," localizedErrorMessage",[251,786,787],{"class":612}," =",[251,789,790],{"class":290}," computed",[251,792,793],{"class":582},"(() ",[251,795,741],{"class":282},[251,797,333],{"class":582},[251,799,801,804,807,809,812,815,818,821],{"class":253,"line":800},18,[251,802,803],{"class":282},"  const",[251,805,806],{"class":593}," code",[251,808,787],{"class":612},[251,810,811],{"class":714}," error",[251,813,814],{"class":582},".",[251,816,817],{"class":301},"value",[251,819,820],{"class":582},"?.",[251,822,823],{"class":301},"code\n",[251,825,827,830,833,836,838],{"class":253,"line":826},19,[251,828,829],{"class":282},"  if",[251,831,832],{"class":582}," (",[251,834,835],{"class":677},"!",[251,837,218],{"class":714},[251,839,624],{"class":582},[251,841,843,846,848,850,852,854],{"class":253,"line":842},20,[251,844,845],{"class":282},"    return",[251,847,811],{"class":714},[251,849,814],{"class":582},[251,851,817],{"class":301},[251,853,820],{"class":582},[251,855,856],{"class":301},"message\n",[251,858,860,862,865,867,870,874,876,879],{"class":253,"line":859},21,[251,861,803],{"class":282},[251,863,864],{"class":593}," key",[251,866,787],{"class":612},[251,868,869],{"class":312}," `auth.errors.",[251,871,873],{"class":872},"sSSMX","${",[251,875,218],{"class":714},[251,877,878],{"class":872},"}",[251,880,881],{"class":312},"`\n",[251,883,885,888,891,893,896,899,902,905,907,909,911,913,915,917,919,921],{"class":253,"line":884},22,[251,886,887],{"class":282},"  return",[251,889,890],{"class":290}," te",[251,892,618],{"class":582},[251,894,895],{"class":714},"key",[251,897,898],{"class":582},") ",[251,900,901],{"class":677},"?",[251,903,904],{"class":290}," t",[251,906,618],{"class":582},[251,908,895],{"class":714},[251,910,898],{"class":582},[251,912,306],{"class":677},[251,914,811],{"class":714},[251,916,814],{"class":582},[251,918,817],{"class":301},[251,920,820],{"class":582},[251,922,856],{"class":301},[251,924,926],{"class":253,"line":925},23,[251,927,376],{"class":582},[251,929,931,934,936],{"class":253,"line":930},24,[251,932,933],{"class":554},"\u003C\u002F",[251,935,558],{"class":403},[251,937,574],{"class":554},[251,939,941],{"class":253,"line":940},25,[251,942,656],{"emptyLinePlaceholder":655},[251,944,946,948,951],{"class":253,"line":945},26,[251,947,555],{"class":554},[251,949,950],{"class":403},"template",[251,952,574],{"class":554},[251,954,956,959,962,965,967,970,973,975,978,981,984,986,988],{"class":253,"line":955},27,[251,957,958],{"class":554},"  \u003C",[251,960,961],{"class":403},"div",[251,963,964],{"class":561}," v-if",[251,966,568],{"class":407},[251,968,969],{"class":312},"\"localizedErrorMessage\"",[251,971,972],{"class":561}," class",[251,974,568],{"class":407},[251,976,977],{"class":312},"\"error\"",[251,979,980],{"class":554},">",[251,982,983],{"class":582},"{{ localizedErrorMessage }}",[251,985,933],{"class":554},[251,987,961],{"class":403},[251,989,574],{"class":554},[251,991,993,995,997],{"class":253,"line":992},28,[251,994,933],{"class":554},[251,996,950],{"class":403},[251,998,574],{"class":554},[214,1000,1001,1002,1005,1006,1009],{},"This pattern uses typed ",[218,1003,1004],{},"error.code"," for translation and falls back to ",[218,1007,1008],{},"error.message"," when no localized key exists.",[229,1011,1013],{"id":1012},"server-side-locale-detection","Server-Side Locale Detection",[214,1015,1016,1017,1020,1021,1024],{},"For auth config callbacks like ",[218,1018,1019],{},"sendResetPassword",", use ",[218,1022,1023],{},"@intlify\u002Futils\u002Fh3"," to detect the user's locale:",[1026,1027,1028,1031,1032,1034],"note",{},[218,1029,1030],{},"@intlify\u002Futils"," is installed as a dependency of ",[218,1033,220],{},", but you need to import it explicitly in server code.",[242,1036,1039],{"className":272,"code":1037,"filename":1038,"language":275,"meta":247,"style":247},"import { tryCookieLocale, tryHeaderLocale } from '@intlify\u002Futils\u002Fh3'\nimport { defineServerAuth } from '@nuxtjs\u002Fbetter-auth\u002Fconfig'\n\nexport default defineServerAuth(() => ({\n  emailAndPassword: {\n    enabled: true,\n    sendResetPassword: async ({ user, url }, request) => {\n      const locale = tryCookieLocale(request)?.toString()\n        ?? tryHeaderLocale(request)?.toString()\n        ?? 'en'\n\n      \u002F\u002F Use locale for email content...\n    }\n  }\n}))\n","server\u002Fauth.config.ts",[218,1040,1041,1064,1080,1084,1100,1109,1122,1155,1180,1198,1204,1208,1214,1218,1222],{"__ignoreMap":247},[251,1042,1043,1046,1048,1051,1053,1056,1058,1061],{"class":253,"line":254},[251,1044,1045],{"class":282},"import",[251,1047,631],{"class":294},[251,1049,1050],{"class":301},"tryCookieLocale",[251,1052,316],{"class":294},[251,1054,1055],{"class":301},"tryHeaderLocale",[251,1057,642],{"class":294},[251,1059,1060],{"class":282},"from",[251,1062,1063],{"class":312}," '@intlify\u002Futils\u002Fh3'\n",[251,1065,1066,1068,1070,1073,1075,1077],{"class":253,"line":298},[251,1067,1045],{"class":282},[251,1069,631],{"class":294},[251,1071,1072],{"class":301},"defineServerAuth",[251,1074,642],{"class":294},[251,1076,1060],{"class":282},[251,1078,1079],{"class":312}," '@nuxtjs\u002Fbetter-auth\u002Fconfig'\n",[251,1081,1082],{"class":253,"line":325},[251,1083,656],{"emptyLinePlaceholder":655},[251,1085,1086,1088,1090,1093,1095,1097],{"class":253,"line":336},[251,1087,283],{"class":282},[251,1089,287],{"class":286},[251,1091,1092],{"class":290}," defineServerAuth",[251,1094,793],{"class":294},[251,1096,741],{"class":282},[251,1098,1099],{"class":294}," ({\n",[251,1101,1102,1105,1107],{"class":253,"line":356},[251,1103,1104],{"class":301},"  emailAndPassword",[251,1106,306],{"class":305},[251,1108,333],{"class":294},[251,1110,1111,1114,1116,1120],{"class":253,"line":367},[251,1112,1113],{"class":301},"    enabled",[251,1115,306],{"class":305},[251,1117,1119],{"class":1118},"s3ZNE"," true",[251,1121,597],{"class":294},[251,1123,1124,1127,1129,1132,1135,1138,1140,1143,1146,1149,1151,1153],{"class":253,"line":373},[251,1125,1126],{"class":290},"    sendResetPassword",[251,1128,306],{"class":305},[251,1130,1131],{"class":282}," async",[251,1133,1134],{"class":294}," ({ ",[251,1136,1137],{"class":673},"user",[251,1139,316],{"class":294},[251,1141,1142],{"class":673},"url",[251,1144,1145],{"class":294}," }, ",[251,1147,1148],{"class":673},"request",[251,1150,898],{"class":294},[251,1152,741],{"class":282},[251,1154,333],{"class":294},[251,1156,1157,1160,1163,1165,1168,1170,1172,1175,1178],{"class":253,"line":659},[251,1158,1159],{"class":282},"      const",[251,1161,1162],{"class":593}," locale",[251,1164,787],{"class":612},[251,1166,1167],{"class":290}," tryCookieLocale",[251,1169,618],{"class":294},[251,1171,1148],{"class":301},[251,1173,1174],{"class":294},")?.",[251,1176,1177],{"class":290},"toString",[251,1179,650],{"class":294},[251,1181,1182,1185,1188,1190,1192,1194,1196],{"class":253,"line":696},[251,1183,1184],{"class":677},"        ??",[251,1186,1187],{"class":290}," tryHeaderLocale",[251,1189,618],{"class":294},[251,1191,1148],{"class":301},[251,1193,1174],{"class":294},[251,1195,1177],{"class":290},[251,1197,650],{"class":294},[251,1199,1200,1202],{"class":253,"line":708},[251,1201,1184],{"class":677},[251,1203,364],{"class":312},[251,1205,1206],{"class":253,"line":724},[251,1207,656],{"emptyLinePlaceholder":655},[251,1209,1210],{"class":253,"line":730},[251,1211,1213],{"class":1212},"st7cf","      \u002F\u002F Use locale for email content...\n",[251,1215,1216],{"class":253,"line":756},[251,1217,759],{"class":294},[251,1219,1220],{"class":253,"line":762},[251,1221,370],{"class":294},[251,1223,1224],{"class":253,"line":768},[251,1225,1226],{"class":294},"}))\n",[229,1228,1230],{"id":1229},"error-codes-reference","Error Codes Reference",[1232,1233,1234,1247],"table",{},[1235,1236,1237],"thead",{},[1238,1239,1240,1244],"tr",{},[1241,1242,1243],"th",{},"Code",[1241,1245,1246],{},"Default Message",[1248,1249,1250,1261,1271,1281,1291,1301,1311,1321,1331,1341],"tbody",{},[1238,1251,1252,1258],{},[1253,1254,1255],"td",{},[218,1256,1257],{},"USER_NOT_FOUND",[1253,1259,1260],{},"User not found",[1238,1262,1263,1268],{},[1253,1264,1265],{},[218,1266,1267],{},"INVALID_PASSWORD",[1253,1269,1270],{},"Invalid password",[1238,1272,1273,1278],{},[1253,1274,1275],{},[218,1276,1277],{},"INVALID_EMAIL_OR_PASSWORD",[1253,1279,1280],{},"Invalid email or password",[1238,1282,1283,1288],{},[1253,1284,1285],{},[218,1286,1287],{},"EMAIL_NOT_VERIFIED",[1253,1289,1290],{},"Email not verified",[1238,1292,1293,1298],{},[1253,1294,1295],{},[218,1296,1297],{},"SESSION_EXPIRED",[1253,1299,1300],{},"Session expired",[1238,1302,1303,1308],{},[1253,1304,1305],{},[218,1306,1307],{},"INVALID_TOKEN",[1253,1309,1310],{},"Invalid token",[1238,1312,1313,1318],{},[1253,1314,1315],{},[218,1316,1317],{},"TOKEN_EXPIRED",[1253,1319,1320],{},"Token expired",[1238,1322,1323,1328],{},[1253,1324,1325],{},[218,1326,1327],{},"USER_ALREADY_EXISTS",[1253,1329,1330],{},"User already exists",[1238,1332,1333,1338],{},[1253,1334,1335],{},[218,1336,1337],{},"INVALID_EMAIL",[1253,1339,1340],{},"Invalid email",[1238,1342,1343,1348],{},[1253,1344,1345],{},[218,1346,1347],{},"PASSWORD_TOO_SHORT",[1253,1349,1350],{},"Password too short",[1352,1353,1356,1357,1363],"callout",{"icon":1354,"to":1355},"i-lucide-book","https:\u002F\u002Fwww.better-auth.com\u002Fdocs\u002Fconcepts\u002Fclient#error-codes","See ",[1358,1359,1362],"a",{"href":1355,"rel":1360},[1361],"nofollow","Better Auth Error Codes"," for the complete list of error codes.",[1352,1365,1368,1369,1373],{"icon":1366,"to":1367},"i-lucide-globe","https:\u002F\u002Fgithub.com\u002Fbetter-auth\u002Fbetter-auth-localization","For comprehensive translations, see ",[1358,1370,1372],{"href":1367,"rel":1371},[1361],"better-auth-localization"," plugin with 30+ languages.",[1375,1376,1377],"style",{},"html pre.shiki code .siqUp, html code.shiki .siqUp{--shiki-light:#4078F2;--shiki-default:#FE4450;--shiki-dark:#FE4450}html pre.shiki code .sI3kV, html code.shiki .sI3kV{--shiki-light:#50A14F;--shiki-default:#BBBBBB;--shiki-dark:#BBBBBB}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 .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 .sYvLG, html code.shiki .sYvLG{--shiki-light:#E45649;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}html pre.shiki code .sVnqq, html code.shiki .sVnqq{--shiki-light:#0184BC;--shiki-default:#B6B1B1;--shiki-dark:#B6B1B1}html pre.shiki code .sPAZv, html code.shiki .sPAZv{--shiki-light:#50A14F;--shiki-default:#FF8B39;--shiki-dark:#FF8B39}html pre.shiki code .stweg, html code.shiki .stweg{--shiki-light:#E45649;--shiki-default:#72F1B8;--shiki-dark:#72F1B8}html pre.shiki code .sNM9w, html code.shiki .sNM9w{--shiki-light:#383A42;--shiki-default:#B6B1B1;--shiki-dark:#B6B1B1}html pre.shiki code .sL9le, html code.shiki .sL9le{--shiki-light:#383A42;--shiki-default:#36F9F6;--shiki-dark:#36F9F6}html pre.shiki code .s0frj, html code.shiki .s0frj{--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-default:#FEDE5D;--shiki-default-font-style:italic;--shiki-dark:#FEDE5D;--shiki-dark-font-style:italic}html pre.shiki code .sEEOt, html code.shiki .sEEOt{--shiki-light:#383A42;--shiki-default:#FFFFFFEE;--shiki-dark:#FFFFFFEE}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 .sgisi, html code.shiki .sgisi{--shiki-light:#383A42;--shiki-light-font-style:inherit;--shiki-default:#FF7EDB;--shiki-default-font-style:italic;--shiki-dark:#FF7EDB;--shiki-dark-font-style:italic}html pre.shiki code .sn-Jc, html code.shiki .sn-Jc{--shiki-light:#0184BC;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .sr8De, html code.shiki .sr8De{--shiki-light:#0184BC;--shiki-default:#FE4450;--shiki-dark:#FE4450}html pre.shiki code .svFNh, html code.shiki .svFNh{--shiki-light:#383A42;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}html pre.shiki code .ss3L-, html code.shiki .ss3L-{--shiki-light:#383A42;--shiki-default:#FF8B39;--shiki-dark:#FF8B39}html pre.shiki code .sSSMX, html code.shiki .sSSMX{--shiki-light:#CA1243;--shiki-default:#72F1B8;--shiki-dark:#72F1B8}html pre.shiki code .s3ZNE, html code.shiki .s3ZNE{--shiki-light:#986801;--shiki-default:#F97E72;--shiki-dark:#F97E72}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}",{"title":247,"searchDepth":298,"depth":298,"links":1379},[1380,1384,1385,1386,1387],{"id":231,"depth":298,"text":232,"children":1381},[1382,1383],{"id":239,"depth":325,"text":240},{"id":268,"depth":325,"text":269},{"id":379,"depth":298,"text":380},{"id":531,"depth":298,"text":532},{"id":1012,"depth":298,"text":1013},{"id":1229,"depth":298,"text":1230},"Translate authentication errors with @nuxtjs\u002Fi18n.","md",null,{},{"title":133,"description":1388},"FIeAijo7BVb550pMsyKj86PrXMvd4pNrZHW6W3xeyAs",[1395,1397],{"title":129,"path":130,"stem":131,"description":1396,"children":-1},"Current status of Convex integration in this module.",{"title":142,"path":143,"stem":144,"description":1398,"children":-1},"API reference for client-side composables.",1791215748368]