[{"data":1,"prerenderedAt":1406},["ShallowReactive",2],{"navigation_docs":3,"-integrations-i18n":216,"-integrations-i18n-surround":1401},[4,42,68,115,136,157],{"title":5,"path":6,"stem":7,"children":8,"icon":11},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,12,17,22,27,32,37],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-sparkles",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F1.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F2.configuration","i-lucide-settings",{"title":23,"path":24,"stem":25,"icon":26},"Client Setup","\u002Fgetting-started\u002Fclient-setup","1.getting-started\u002F3.client-setup","i-lucide-monitor",{"title":28,"path":29,"stem":30,"icon":31},"Type Augmentation","\u002Fgetting-started\u002Ftype-augmentation","1.getting-started\u002F4.type-augmentation","i-lucide-type",{"title":33,"path":34,"stem":35,"icon":36},"Schema Generation (NuxtHub)","\u002Fgetting-started\u002Fschema-generation","1.getting-started\u002F5.schema-generation","i-lucide-database",{"title":38,"path":39,"stem":40,"icon":41},"How It Works","\u002Fgetting-started\u002Fhow-it-works","1.getting-started\u002F6.how-it-works","i-lucide-workflow",{"title":43,"path":44,"stem":45,"children":46,"page":67},"Core Concepts","\u002Fcore-concepts","2.core-concepts",[47,51,55,59,63],{"title":48,"path":49,"stem":50},"serverAuth()","\u002Fcore-concepts\u002Fserver-auth","2.core-concepts\u002F1.server-auth",{"title":52,"path":53,"stem":54},"Sessions","\u002Fcore-concepts\u002Fsessions","2.core-concepts\u002F2.sessions",{"title":56,"path":57,"stem":58},"Route Protection","\u002Fcore-concepts\u002Froute-protection","2.core-concepts\u002F3.route-protection",{"title":60,"path":61,"stem":62},"Auto‑Imports and Aliases","\u002Fcore-concepts\u002Fauto-imports-aliases","2.core-concepts\u002F4.auto-imports-aliases",{"title":64,"path":65,"stem":66},"Security & Caveats","\u002Fcore-concepts\u002Fsecurity-caveats","2.core-concepts\u002F5.security-caveats",false,{"title":69,"path":70,"stem":71,"children":72,"page":67},"Guides","\u002Fguides","3.guides",[73,77,82,86,90,94,99,103,107,111],{"title":74,"path":75,"stem":76},"Role‑Based Access","\u002Fguides\u002Frole-based-access","3.guides\u002F1.role-based-access",{"title":78,"path":79,"stem":80,"icon":81},"Setup diagnostics","\u002Fguides\u002Fdiagnostics","3.guides\u002F10.diagnostics","i-lucide-circle-alert",{"title":83,"path":84,"stem":85},"OAuth Providers","\u002Fguides\u002Foauth-providers","3.guides\u002F2.oauth-providers",{"title":87,"path":88,"stem":89},"Custom Database","\u002Fguides\u002Fcustom-database","3.guides\u002F3.custom-database",{"title":91,"path":92,"stem":93},"Database-less Mode","\u002Fguides\u002Fdatabase-less-mode","3.guides\u002F4.database-less-mode",{"title":95,"path":96,"stem":97,"icon":98},"External Auth Backend","\u002Fguides\u002Fexternal-auth-backend","3.guides\u002F5.external-auth-backend","i-lucide-server",{"title":100,"path":101,"stem":102},"Migrating from nuxt-auth-utils","\u002Fguides\u002Fmigrate-from-nuxt-auth-utils","3.guides\u002F6.migrate-from-nuxt-auth-utils",{"title":104,"path":105,"stem":106},"Two-Factor Authentication (TOTP + Backup Codes)","\u002Fguides\u002Ftwo-factor-auth","3.guides\u002F7.two-factor-auth",{"title":108,"path":109,"stem":110},"Testing","\u002Fguides\u002Ftesting","3.guides\u002F8.testing",{"title":112,"path":113,"stem":114},"Production Deployment","\u002Fguides\u002Fproduction-deployment","3.guides\u002F9.production-deployment",{"title":116,"path":117,"stem":118,"children":119,"page":67},"Integrations","\u002Fintegrations","4.integrations",[120,124,128,132],{"title":121,"path":122,"stem":123},"NuxtHub","\u002Fintegrations\u002Fnuxthub","4.integrations\u002F1.nuxthub",{"title":125,"path":126,"stem":127},"DevTools","\u002Fintegrations\u002Fdevtools","4.integrations\u002F2.devtools",{"title":129,"path":130,"stem":131},"Convex","\u002Fintegrations\u002Fconvex","4.integrations\u002F3.convex",{"title":133,"path":134,"stem":135},"i18n","\u002Fintegrations\u002Fi18n","4.integrations\u002F4.i18n",{"title":137,"path":138,"stem":139,"children":140,"page":67},"API Reference","\u002Fapi","5.api",[141,145,149,153],{"title":142,"path":143,"stem":144},"Composables","\u002Fapi\u002Fcomposables","5.api\u002F1.composables",{"title":146,"path":147,"stem":148},"Server Utilities","\u002Fapi\u002Fserver-utils","5.api\u002F2.server-utils",{"title":150,"path":151,"stem":152},"Components","\u002Fapi\u002Fcomponents","5.api\u002F3.components",{"title":154,"path":155,"stem":156},"Types","\u002Fapi\u002Ftypes","5.api\u002F4.types",{"title":158,"path":159,"stem":160,"children":161,"icon":81},"Errors","\u002Ferrors","6.errors\u002F0.index",[162,164,168,172,176,180,184,188,192,196,200,204,208,212],{"title":163,"path":159,"stem":160},"Overview",{"title":165,"path":166,"stem":167},"Better Auth CLI is not installed","\u002Ferrors\u002Fnuxt-auth-cli-missing","6.errors\u002Fnuxt-auth-cli-missing",{"title":169,"path":170,"stem":171},"Better Auth CLI version does not match better-auth","\u002Ferrors\u002Fnuxt-auth-cli-version-mismatch","6.errors\u002Fnuxt-auth-cli-version-mismatch",{"title":173,"path":174,"stem":175},"Auth configuration failed to load","\u002Ferrors\u002Fnuxt-auth-config-load-failed","6.errors\u002Fnuxt-auth-config-load-failed",{"title":177,"path":178,"stem":179},"Schema generator returned no code","\u002Ferrors\u002Fnuxt-auth-empty-schema","6.errors\u002Fnuxt-auth-empty-schema",{"title":181,"path":182,"stem":183},"Invalid server auth config export","\u002Ferrors\u002Fnuxt-auth-invalid-config-export","6.errors\u002Fnuxt-auth-invalid-config-export",{"title":185,"path":186,"stem":187},"Auth plugin path must be absolute","\u002Ferrors\u002Fnuxt-auth-invalid-plugin-source","6.errors\u002Fnuxt-auth-invalid-plugin-source",{"title":189,"path":190,"stem":191},"Missing auth configuration","\u002Ferrors\u002Fnuxt-auth-missing-config","6.errors\u002Fnuxt-auth-missing-config",{"title":193,"path":194,"stem":195},"NuxtHub database alias is missing","\u002Ferrors\u002Fnuxt-auth-missing-hub-db","6.errors\u002Fnuxt-auth-missing-hub-db",{"title":197,"path":198,"stem":199},"No database provider is enabled","\u002Ferrors\u002Fnuxt-auth-no-database-provider","6.errors\u002Fnuxt-auth-no-database-provider",{"title":201,"path":202,"stem":203},"Auth schema generation failed","\u002Ferrors\u002Fnuxt-auth-schema-generation-failed","6.errors\u002Fnuxt-auth-schema-generation-failed",{"title":205,"path":206,"stem":207},"Custom session storage is missing","\u002Ferrors\u002Fnuxt-auth-schema-storage-required","6.errors\u002Fnuxt-auth-schema-storage-required",{"title":209,"path":210,"stem":211},"Secondary storage in client-only mode","\u002Ferrors\u002Fnuxt-auth-storage-client-only","6.errors\u002Fnuxt-auth-storage-client-only",{"title":213,"path":214,"stem":215},"Unsupported database dialect","\u002Ferrors\u002Fnuxt-auth-unsupported-dialect","6.errors\u002Fnuxt-auth-unsupported-dialect",{"id":217,"title":133,"body":218,"description":1395,"extension":1396,"links":1397,"meta":1398,"navigation":663,"path":134,"seo":1399,"stem":135,"__hash__":1400},"docs\u002F4.integrations\u002F4.i18n.md",{"type":219,"value":220,"toc":1385},"minimark",[221,230,236,241,385,389,396,537,541,550,1006,1017,1021,1032,1042,1234,1238,1358,1371,1381],[222,223,224,225,229],"p",{},"Use this guide when you already have ",[226,227,228],"code",{},"@nuxtjs\u002Fi18n"," configured and you want auth errors to respect the active locale.",[222,231,232,233,235],{},"This integration enables translated authentication error messages using your existing ",[226,234,228],{}," setup.",[237,238,240],"h2",{"id":239},"setup","Setup",[242,243,244,249,274,278],"steps",{},[245,246,248],"h3",{"id":247},"install-nuxtjsi18n","Install @nuxtjs\u002Fi18n",[250,251,256],"pre",{"className":252,"code":253,"language":254,"meta":255,"style":255},"language-bash shiki shiki-themes one-light synthwave-84 synthwave-84","pnpm add @nuxtjs\u002Fi18n\n","bash","",[226,257,258],{"__ignoreMap":255},[259,260,263,267,271],"span",{"class":261,"line":262},"line",1,[259,264,266],{"class":265},"siqUp","pnpm",[259,268,270],{"class":269},"sI3kV"," add",[259,272,273],{"class":269}," @nuxtjs\u002Fi18n\n",[245,275,277],{"id":276},"configure-nuxtconfigts","Configure nuxt.config.ts",[250,279,284],{"className":280,"code":281,"filename":282,"language":283,"meta":255,"style":255},"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",[226,285,286,304,331,342,362,373,379],{"__ignoreMap":255},[259,287,288,292,296,300],{"class":261,"line":262},[259,289,291],{"class":290},"sqe1H","export",[259,293,295],{"class":294},"sKg8T"," default",[259,297,299],{"class":298},"sfT9l"," defineNuxtConfig",[259,301,303],{"class":302},"s17Py","({\n",[259,305,307,311,315,318,322,325,328],{"class":261,"line":306},2,[259,308,310],{"class":309},"sYvLG","  modules",[259,312,314],{"class":313},"sVnqq",":",[259,316,317],{"class":302}," [",[259,319,321],{"class":320},"sPAZv","'@nuxtjs\u002Fi18n'",[259,323,324],{"class":302},", ",[259,326,327],{"class":320},"'@nuxtjs\u002Fbetter-auth'",[259,329,330],{"class":302},"],\n",[259,332,334,337,339],{"class":261,"line":333},3,[259,335,336],{"class":309},"  i18n",[259,338,314],{"class":313},[259,340,341],{"class":302}," {\n",[259,343,345,348,350,352,355,357,360],{"class":261,"line":344},4,[259,346,347],{"class":309},"    locales",[259,349,314],{"class":313},[259,351,317],{"class":302},[259,353,354],{"class":320},"'en'",[259,356,324],{"class":302},[259,358,359],{"class":320},"'es'",[259,361,330],{"class":302},[259,363,365,368,370],{"class":261,"line":364},5,[259,366,367],{"class":309},"    defaultLocale",[259,369,314],{"class":313},[259,371,372],{"class":320}," 'en'\n",[259,374,376],{"class":261,"line":375},6,[259,377,378],{"class":302},"  }\n",[259,380,382],{"class":261,"line":381},7,[259,383,384],{"class":302},"})\n",[237,386,388],{"id":387},"translation-files","Translation Files",[222,390,391,392,395],{},"Add error translations to your locale files using the ",[226,393,394],{},"auth.errors.*"," prefix:",[397,398,399,474],"code-group",{},[250,400,405],{"className":401,"code":402,"filename":403,"language":404,"meta":255,"style":255},"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",[226,406,407,417,424,434,444,454,464],{"__ignoreMap":255},[259,408,409,413],{"class":261,"line":262},[259,410,412],{"class":411},"stweg","auth",[259,414,416],{"class":415},"sNM9w",":\n",[259,418,419,422],{"class":261,"line":306},[259,420,421],{"class":411},"  errors",[259,423,416],{"class":415},[259,425,426,429,431],{"class":261,"line":333},[259,427,428],{"class":411},"    USER_NOT_FOUND",[259,430,314],{"class":415},[259,432,433],{"class":320}," \"User not found\"\n",[259,435,436,439,441],{"class":261,"line":344},[259,437,438],{"class":411},"    INVALID_PASSWORD",[259,440,314],{"class":415},[259,442,443],{"class":320}," \"Invalid password\"\n",[259,445,446,449,451],{"class":261,"line":364},[259,447,448],{"class":411},"    INVALID_EMAIL_OR_PASSWORD",[259,450,314],{"class":415},[259,452,453],{"class":320}," \"Invalid email or password\"\n",[259,455,456,459,461],{"class":261,"line":375},[259,457,458],{"class":411},"    EMAIL_NOT_VERIFIED",[259,460,314],{"class":415},[259,462,463],{"class":320}," \"Please verify your email first\"\n",[259,465,466,469,471],{"class":261,"line":381},[259,467,468],{"class":411},"    SESSION_EXPIRED",[259,470,314],{"class":415},[259,472,473],{"class":320}," \"Session expired, please sign in again\"\n",[250,475,478],{"className":401,"code":476,"filename":477,"language":404,"meta":255,"style":255},"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",[226,479,480,486,492,501,510,519,528],{"__ignoreMap":255},[259,481,482,484],{"class":261,"line":262},[259,483,412],{"class":411},[259,485,416],{"class":415},[259,487,488,490],{"class":261,"line":306},[259,489,421],{"class":411},[259,491,416],{"class":415},[259,493,494,496,498],{"class":261,"line":333},[259,495,428],{"class":411},[259,497,314],{"class":415},[259,499,500],{"class":320}," \"Usuario no encontrado\"\n",[259,502,503,505,507],{"class":261,"line":344},[259,504,438],{"class":411},[259,506,314],{"class":415},[259,508,509],{"class":320}," \"Contraseña incorrecta\"\n",[259,511,512,514,516],{"class":261,"line":364},[259,513,448],{"class":411},[259,515,314],{"class":415},[259,517,518],{"class":320}," \"Email o contraseña incorrectos\"\n",[259,520,521,523,525],{"class":261,"line":375},[259,522,458],{"class":411},[259,524,314],{"class":415},[259,526,527],{"class":320}," \"Por favor verifica tu email primero\"\n",[259,529,530,532,534],{"class":261,"line":381},[259,531,468],{"class":411},[259,533,314],{"class":415},[259,535,536],{"class":320}," \"Sesión expirada, inicia sesión de nuevo\"\n",[237,538,540],{"id":539},"client-side-error-handling","Client-Side Error Handling",[222,542,543,544,546,547,314],{},"Better Auth errors include a ",[226,545,226],{}," property that you can translate using ",[226,548,549],{},"useI18n()",[250,551,556],{"className":552,"code":553,"filename":554,"language":555,"meta":255,"style":255},"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",[226,557,558,583,591,606,613,633,659,665,702,714,730,736,761,767,773,779,784,805,831,847,864,889,930,935,945,950,960,997],{"__ignoreMap":255},[259,559,560,564,567,571,574,577,580],{"class":261,"line":262},[259,561,563],{"class":562},"sL9le","\u003C",[259,565,566],{"class":411},"script",[259,568,570],{"class":569},"s0frj"," setup",[259,572,573],{"class":569}," lang",[259,575,576],{"class":415},"=",[259,578,579],{"class":320},"\"ts\"",[259,581,582],{"class":562},">\n",[259,584,585,588],{"class":261,"line":306},[259,586,587],{"class":290},"const",[259,589,341],{"class":590},"sEEOt",[259,592,593,596,599,603],{"class":261,"line":333},[259,594,595],{"class":309},"  execute",[259,597,598],{"class":590},": ",[259,600,602],{"class":601},"s6Rhl","signInWithEmail",[259,604,605],{"class":590},",\n",[259,607,608,611],{"class":261,"line":344},[259,609,610],{"class":601},"  error",[259,612,605],{"class":590},[259,614,615,618,621,624,627,630],{"class":261,"line":364},[259,616,617],{"class":590},"} ",[259,619,576],{"class":620},"sQBpM",[259,622,623],{"class":298}," useSignIn",[259,625,626],{"class":590},"(",[259,628,629],{"class":320},"'email'",[259,631,632],{"class":590},")\n",[259,634,635,637,640,643,645,648,651,653,656],{"class":261,"line":375},[259,636,587],{"class":290},[259,638,639],{"class":590}," { ",[259,641,642],{"class":601},"t",[259,644,324],{"class":590},[259,646,647],{"class":601},"te",[259,649,650],{"class":590}," } ",[259,652,576],{"class":620},[259,654,655],{"class":298}," useI18n",[259,657,658],{"class":590},"()\n",[259,660,661],{"class":261,"line":381},[259,662,664],{"emptyLinePlaceholder":663},true,"\n",[259,666,668,671,674,677,679,683,686,690,692,695,697,699],{"class":261,"line":667},8,[259,669,670],{"class":290},"async",[259,672,673],{"class":290}," function",[259,675,676],{"class":298}," handleLogin",[259,678,626],{"class":590},[259,680,682],{"class":681},"sgisi","email",[259,684,314],{"class":685},"sn-Jc",[259,687,689],{"class":688},"sr8De"," string",[259,691,324],{"class":590},[259,693,694],{"class":681},"password",[259,696,314],{"class":685},[259,698,689],{"class":688},[259,700,701],{"class":590},") {\n",[259,703,705,708,711],{"class":261,"line":704},9,[259,706,707],{"class":290},"  await",[259,709,710],{"class":298}," signInWithEmail",[259,712,713],{"class":590},"(\n",[259,715,717,720,723,725,727],{"class":261,"line":716},10,[259,718,719],{"class":590},"    { ",[259,721,682],{"class":722},"svFNh",[259,724,324],{"class":590},[259,726,694],{"class":722},[259,728,729],{"class":590}," },\n",[259,731,733],{"class":261,"line":732},11,[259,734,735],{"class":590},"    {\n",[259,737,739,742,744,747,750,753,755,758],{"class":261,"line":738},12,[259,740,741],{"class":298},"      onSuccess",[259,743,314],{"class":313},[259,745,746],{"class":590}," () ",[259,748,749],{"class":290},"=>",[259,751,752],{"class":298}," navigateTo",[259,754,626],{"class":590},[259,756,757],{"class":320},"'\u002Fapp'",[259,759,760],{"class":590},"),\n",[259,762,764],{"class":261,"line":763},13,[259,765,766],{"class":590},"    }\n",[259,768,770],{"class":261,"line":769},14,[259,771,772],{"class":590},"  )\n",[259,774,776],{"class":261,"line":775},15,[259,777,778],{"class":590},"}\n",[259,780,782],{"class":261,"line":781},16,[259,783,664],{"emptyLinePlaceholder":663},[259,785,787,789,792,795,798,801,803],{"class":261,"line":786},17,[259,788,587],{"class":290},[259,790,791],{"class":601}," localizedErrorMessage",[259,793,794],{"class":620}," =",[259,796,797],{"class":298}," computed",[259,799,800],{"class":590},"(() ",[259,802,749],{"class":290},[259,804,341],{"class":590},[259,806,808,811,814,816,819,822,825,828],{"class":261,"line":807},18,[259,809,810],{"class":290},"  const",[259,812,813],{"class":601}," code",[259,815,794],{"class":620},[259,817,818],{"class":722}," error",[259,820,821],{"class":590},".",[259,823,824],{"class":309},"value",[259,826,827],{"class":590},"?.",[259,829,830],{"class":309},"code\n",[259,832,834,837,840,843,845],{"class":261,"line":833},19,[259,835,836],{"class":290},"  if",[259,838,839],{"class":590}," (",[259,841,842],{"class":685},"!",[259,844,226],{"class":722},[259,846,632],{"class":590},[259,848,850,853,855,857,859,861],{"class":261,"line":849},20,[259,851,852],{"class":290},"    return",[259,854,818],{"class":722},[259,856,821],{"class":590},[259,858,824],{"class":309},[259,860,827],{"class":590},[259,862,863],{"class":309},"message\n",[259,865,867,869,872,874,877,881,883,886],{"class":261,"line":866},21,[259,868,810],{"class":290},[259,870,871],{"class":601}," key",[259,873,794],{"class":620},[259,875,876],{"class":320}," `auth.errors.",[259,878,880],{"class":879},"sSSMX","${",[259,882,226],{"class":722},[259,884,885],{"class":879},"}",[259,887,888],{"class":320},"`\n",[259,890,892,895,898,900,903,906,909,912,914,916,918,920,922,924,926,928],{"class":261,"line":891},22,[259,893,894],{"class":290},"  return",[259,896,897],{"class":298}," te",[259,899,626],{"class":590},[259,901,902],{"class":722},"key",[259,904,905],{"class":590},") ",[259,907,908],{"class":685},"?",[259,910,911],{"class":298}," t",[259,913,626],{"class":590},[259,915,902],{"class":722},[259,917,905],{"class":590},[259,919,314],{"class":685},[259,921,818],{"class":722},[259,923,821],{"class":590},[259,925,824],{"class":309},[259,927,827],{"class":590},[259,929,863],{"class":309},[259,931,933],{"class":261,"line":932},23,[259,934,384],{"class":590},[259,936,938,941,943],{"class":261,"line":937},24,[259,939,940],{"class":562},"\u003C\u002F",[259,942,566],{"class":411},[259,944,582],{"class":562},[259,946,948],{"class":261,"line":947},25,[259,949,664],{"emptyLinePlaceholder":663},[259,951,953,955,958],{"class":261,"line":952},26,[259,954,563],{"class":562},[259,956,957],{"class":411},"template",[259,959,582],{"class":562},[259,961,963,966,969,972,974,977,980,982,985,988,991,993,995],{"class":261,"line":962},27,[259,964,965],{"class":562},"  \u003C",[259,967,968],{"class":411},"div",[259,970,971],{"class":569}," v-if",[259,973,576],{"class":415},[259,975,976],{"class":320},"\"localizedErrorMessage\"",[259,978,979],{"class":569}," class",[259,981,576],{"class":415},[259,983,984],{"class":320},"\"error\"",[259,986,987],{"class":562},">",[259,989,990],{"class":590},"{{ localizedErrorMessage }}",[259,992,940],{"class":562},[259,994,968],{"class":411},[259,996,582],{"class":562},[259,998,1000,1002,1004],{"class":261,"line":999},28,[259,1001,940],{"class":562},[259,1003,957],{"class":411},[259,1005,582],{"class":562},[222,1007,1008,1009,1012,1013,1016],{},"This pattern uses typed ",[226,1010,1011],{},"error.code"," for translation and falls back to ",[226,1014,1015],{},"error.message"," when no localized key exists.",[237,1018,1020],{"id":1019},"server-side-locale-detection","Server-Side Locale Detection",[222,1022,1023,1024,1027,1028,1031],{},"For auth config callbacks like ",[226,1025,1026],{},"sendResetPassword",", use ",[226,1029,1030],{},"@intlify\u002Futils\u002Fh3"," to detect the user's locale:",[1033,1034,1035,1038,1039,1041],"note",{},[226,1036,1037],{},"@intlify\u002Futils"," is installed as a dependency of ",[226,1040,228],{},", but you need to import it explicitly in server code.",[250,1043,1046],{"className":280,"code":1044,"filename":1045,"language":283,"meta":255,"style":255},"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",[226,1047,1048,1071,1087,1091,1107,1116,1129,1162,1187,1205,1211,1215,1221,1225,1229],{"__ignoreMap":255},[259,1049,1050,1053,1055,1058,1060,1063,1065,1068],{"class":261,"line":262},[259,1051,1052],{"class":290},"import",[259,1054,639],{"class":302},[259,1056,1057],{"class":309},"tryCookieLocale",[259,1059,324],{"class":302},[259,1061,1062],{"class":309},"tryHeaderLocale",[259,1064,650],{"class":302},[259,1066,1067],{"class":290},"from",[259,1069,1070],{"class":320}," '@intlify\u002Futils\u002Fh3'\n",[259,1072,1073,1075,1077,1080,1082,1084],{"class":261,"line":306},[259,1074,1052],{"class":290},[259,1076,639],{"class":302},[259,1078,1079],{"class":309},"defineServerAuth",[259,1081,650],{"class":302},[259,1083,1067],{"class":290},[259,1085,1086],{"class":320}," '@nuxtjs\u002Fbetter-auth\u002Fconfig'\n",[259,1088,1089],{"class":261,"line":333},[259,1090,664],{"emptyLinePlaceholder":663},[259,1092,1093,1095,1097,1100,1102,1104],{"class":261,"line":344},[259,1094,291],{"class":290},[259,1096,295],{"class":294},[259,1098,1099],{"class":298}," defineServerAuth",[259,1101,800],{"class":302},[259,1103,749],{"class":290},[259,1105,1106],{"class":302}," ({\n",[259,1108,1109,1112,1114],{"class":261,"line":364},[259,1110,1111],{"class":309},"  emailAndPassword",[259,1113,314],{"class":313},[259,1115,341],{"class":302},[259,1117,1118,1121,1123,1127],{"class":261,"line":375},[259,1119,1120],{"class":309},"    enabled",[259,1122,314],{"class":313},[259,1124,1126],{"class":1125},"s3ZNE"," true",[259,1128,605],{"class":302},[259,1130,1131,1134,1136,1139,1142,1145,1147,1150,1153,1156,1158,1160],{"class":261,"line":381},[259,1132,1133],{"class":298},"    sendResetPassword",[259,1135,314],{"class":313},[259,1137,1138],{"class":290}," async",[259,1140,1141],{"class":302}," ({ ",[259,1143,1144],{"class":681},"user",[259,1146,324],{"class":302},[259,1148,1149],{"class":681},"url",[259,1151,1152],{"class":302}," }, ",[259,1154,1155],{"class":681},"request",[259,1157,905],{"class":302},[259,1159,749],{"class":290},[259,1161,341],{"class":302},[259,1163,1164,1167,1170,1172,1175,1177,1179,1182,1185],{"class":261,"line":667},[259,1165,1166],{"class":290},"      const",[259,1168,1169],{"class":601}," locale",[259,1171,794],{"class":620},[259,1173,1174],{"class":298}," tryCookieLocale",[259,1176,626],{"class":302},[259,1178,1155],{"class":309},[259,1180,1181],{"class":302},")?.",[259,1183,1184],{"class":298},"toString",[259,1186,658],{"class":302},[259,1188,1189,1192,1195,1197,1199,1201,1203],{"class":261,"line":704},[259,1190,1191],{"class":685},"        ??",[259,1193,1194],{"class":298}," tryHeaderLocale",[259,1196,626],{"class":302},[259,1198,1155],{"class":309},[259,1200,1181],{"class":302},[259,1202,1184],{"class":298},[259,1204,658],{"class":302},[259,1206,1207,1209],{"class":261,"line":716},[259,1208,1191],{"class":685},[259,1210,372],{"class":320},[259,1212,1213],{"class":261,"line":732},[259,1214,664],{"emptyLinePlaceholder":663},[259,1216,1217],{"class":261,"line":738},[259,1218,1220],{"class":1219},"st7cf","      \u002F\u002F Use locale for email content...\n",[259,1222,1223],{"class":261,"line":763},[259,1224,766],{"class":302},[259,1226,1227],{"class":261,"line":769},[259,1228,378],{"class":302},[259,1230,1231],{"class":261,"line":775},[259,1232,1233],{"class":302},"}))\n",[237,1235,1237],{"id":1236},"error-codes-reference","Error Codes Reference",[1239,1240,1241,1254],"table",{},[1242,1243,1244],"thead",{},[1245,1246,1247,1251],"tr",{},[1248,1249,1250],"th",{},"Code",[1248,1252,1253],{},"Default Message",[1255,1256,1257,1268,1278,1288,1298,1308,1318,1328,1338,1348],"tbody",{},[1245,1258,1259,1265],{},[1260,1261,1262],"td",{},[226,1263,1264],{},"USER_NOT_FOUND",[1260,1266,1267],{},"User not found",[1245,1269,1270,1275],{},[1260,1271,1272],{},[226,1273,1274],{},"INVALID_PASSWORD",[1260,1276,1277],{},"Invalid password",[1245,1279,1280,1285],{},[1260,1281,1282],{},[226,1283,1284],{},"INVALID_EMAIL_OR_PASSWORD",[1260,1286,1287],{},"Invalid email or password",[1245,1289,1290,1295],{},[1260,1291,1292],{},[226,1293,1294],{},"EMAIL_NOT_VERIFIED",[1260,1296,1297],{},"Email not verified",[1245,1299,1300,1305],{},[1260,1301,1302],{},[226,1303,1304],{},"SESSION_EXPIRED",[1260,1306,1307],{},"Session expired",[1245,1309,1310,1315],{},[1260,1311,1312],{},[226,1313,1314],{},"INVALID_TOKEN",[1260,1316,1317],{},"Invalid token",[1245,1319,1320,1325],{},[1260,1321,1322],{},[226,1323,1324],{},"TOKEN_EXPIRED",[1260,1326,1327],{},"Token expired",[1245,1329,1330,1335],{},[1260,1331,1332],{},[226,1333,1334],{},"USER_ALREADY_EXISTS",[1260,1336,1337],{},"User already exists",[1245,1339,1340,1345],{},[1260,1341,1342],{},[226,1343,1344],{},"INVALID_EMAIL",[1260,1346,1347],{},"Invalid email",[1245,1349,1350,1355],{},[1260,1351,1352],{},[226,1353,1354],{},"PASSWORD_TOO_SHORT",[1260,1356,1357],{},"Password too short",[1359,1360,1363,1364,1370],"callout",{"icon":1361,"to":1362},"i-lucide-book","https:\u002F\u002Fwww.better-auth.com\u002Fdocs\u002Fconcepts\u002Fclient#error-codes","See ",[1365,1366,1369],"a",{"href":1362,"rel":1367},[1368],"nofollow","Better Auth Error Codes"," for the complete list of error codes.",[1359,1372,1375,1376,1380],{"icon":1373,"to":1374},"i-lucide-globe","https:\u002F\u002Fgithub.com\u002Fbetter-auth\u002Fbetter-auth-localization","For comprehensive translations, see ",[1365,1377,1379],{"href":1374,"rel":1378},[1368],"better-auth-localization"," plugin with 30+ languages.",[1382,1383,1384],"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 .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":255,"searchDepth":306,"depth":306,"links":1386},[1387,1391,1392,1393,1394],{"id":239,"depth":306,"text":240,"children":1388},[1389,1390],{"id":247,"depth":333,"text":248},{"id":276,"depth":333,"text":277},{"id":387,"depth":306,"text":388},{"id":539,"depth":306,"text":540},{"id":1019,"depth":306,"text":1020},{"id":1236,"depth":306,"text":1237},"Translate authentication errors with @nuxtjs\u002Fi18n.","md",null,{},{"title":133,"description":1395},"1wyi093p3TIF-OJRwSj3X8vx5pwImRmJgjHcrBYMlyE",[1402,1404],{"title":129,"path":130,"stem":131,"description":1403,"children":-1},"Current status of Convex integration in this module.",{"title":142,"path":143,"stem":144,"description":1405,"children":-1},"API reference for client-side composables.",1792532371050]