[{"data":1,"prerenderedAt":1398},["ShallowReactive",2],{"navigation_docs":3,"-integrations-i18n":208,"-integrations-i18n-surround":1393},[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":1387,"extension":1388,"links":1389,"meta":1390,"navigation":655,"path":134,"seo":1391,"stem":135,"__hash__":1392},"docs\u002F4.integrations\u002F4.i18n.md",{"type":211,"value":212,"toc":1377},"minimark",[213,222,228,233,377,381,388,529,533,542,998,1009,1013,1024,1034,1226,1230,1350,1363,1373],[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,753,759,765,771,776,797,823,839,856,881,922,927,937,942,952,989],{"__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,750],{"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":290}," navigateTo",[251,746,618],{"class":582},[251,748,749],{"class":312},"'\u002Fapp'",[251,751,752],{"class":582},"),\n",[251,754,756],{"class":253,"line":755},13,[251,757,758],{"class":582},"    }\n",[251,760,762],{"class":253,"line":761},14,[251,763,764],{"class":582},"  )\n",[251,766,768],{"class":253,"line":767},15,[251,769,770],{"class":582},"}\n",[251,772,774],{"class":253,"line":773},16,[251,775,656],{"emptyLinePlaceholder":655},[251,777,779,781,784,787,790,793,795],{"class":253,"line":778},17,[251,780,579],{"class":282},[251,782,783],{"class":593}," localizedErrorMessage",[251,785,786],{"class":612}," =",[251,788,789],{"class":290}," computed",[251,791,792],{"class":582},"(() ",[251,794,741],{"class":282},[251,796,333],{"class":582},[251,798,800,803,806,808,811,814,817,820],{"class":253,"line":799},18,[251,801,802],{"class":282},"  const",[251,804,805],{"class":593}," code",[251,807,786],{"class":612},[251,809,810],{"class":714}," error",[251,812,813],{"class":582},".",[251,815,816],{"class":301},"value",[251,818,819],{"class":582},"?.",[251,821,822],{"class":301},"code\n",[251,824,826,829,832,835,837],{"class":253,"line":825},19,[251,827,828],{"class":282},"  if",[251,830,831],{"class":582}," (",[251,833,834],{"class":677},"!",[251,836,218],{"class":714},[251,838,624],{"class":582},[251,840,842,845,847,849,851,853],{"class":253,"line":841},20,[251,843,844],{"class":282},"    return",[251,846,810],{"class":714},[251,848,813],{"class":582},[251,850,816],{"class":301},[251,852,819],{"class":582},[251,854,855],{"class":301},"message\n",[251,857,859,861,864,866,869,873,875,878],{"class":253,"line":858},21,[251,860,802],{"class":282},[251,862,863],{"class":593}," key",[251,865,786],{"class":612},[251,867,868],{"class":312}," `auth.errors.",[251,870,872],{"class":871},"sSSMX","${",[251,874,218],{"class":714},[251,876,877],{"class":871},"}",[251,879,880],{"class":312},"`\n",[251,882,884,887,890,892,895,898,901,904,906,908,910,912,914,916,918,920],{"class":253,"line":883},22,[251,885,886],{"class":282},"  return",[251,888,889],{"class":290}," te",[251,891,618],{"class":582},[251,893,894],{"class":714},"key",[251,896,897],{"class":582},") ",[251,899,900],{"class":677},"?",[251,902,903],{"class":290}," t",[251,905,618],{"class":582},[251,907,894],{"class":714},[251,909,897],{"class":582},[251,911,306],{"class":677},[251,913,810],{"class":714},[251,915,813],{"class":582},[251,917,816],{"class":301},[251,919,819],{"class":582},[251,921,855],{"class":301},[251,923,925],{"class":253,"line":924},23,[251,926,376],{"class":582},[251,928,930,933,935],{"class":253,"line":929},24,[251,931,932],{"class":554},"\u003C\u002F",[251,934,558],{"class":403},[251,936,574],{"class":554},[251,938,940],{"class":253,"line":939},25,[251,941,656],{"emptyLinePlaceholder":655},[251,943,945,947,950],{"class":253,"line":944},26,[251,946,555],{"class":554},[251,948,949],{"class":403},"template",[251,951,574],{"class":554},[251,953,955,958,961,964,966,969,972,974,977,980,983,985,987],{"class":253,"line":954},27,[251,956,957],{"class":554},"  \u003C",[251,959,960],{"class":403},"div",[251,962,963],{"class":561}," v-if",[251,965,568],{"class":407},[251,967,968],{"class":312},"\"localizedErrorMessage\"",[251,970,971],{"class":561}," class",[251,973,568],{"class":407},[251,975,976],{"class":312},"\"error\"",[251,978,979],{"class":554},">",[251,981,982],{"class":582},"{{ localizedErrorMessage }}",[251,984,932],{"class":554},[251,986,960],{"class":403},[251,988,574],{"class":554},[251,990,992,994,996],{"class":253,"line":991},28,[251,993,932],{"class":554},[251,995,949],{"class":403},[251,997,574],{"class":554},[214,999,1000,1001,1004,1005,1008],{},"This pattern uses typed ",[218,1002,1003],{},"error.code"," for translation and falls back to ",[218,1006,1007],{},"error.message"," when no localized key exists.",[229,1010,1012],{"id":1011},"server-side-locale-detection","Server-Side Locale Detection",[214,1014,1015,1016,1019,1020,1023],{},"For auth config callbacks like ",[218,1017,1018],{},"sendResetPassword",", use ",[218,1021,1022],{},"@intlify\u002Futils\u002Fh3"," to detect the user's locale:",[1025,1026,1027,1030,1031,1033],"note",{},[218,1028,1029],{},"@intlify\u002Futils"," is installed as a dependency of ",[218,1032,220],{},", but you need to import it explicitly in server code.",[242,1035,1038],{"className":272,"code":1036,"filename":1037,"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,1039,1040,1063,1079,1083,1099,1108,1121,1154,1179,1197,1203,1207,1213,1217,1221],{"__ignoreMap":247},[251,1041,1042,1045,1047,1050,1052,1055,1057,1060],{"class":253,"line":254},[251,1043,1044],{"class":282},"import",[251,1046,631],{"class":294},[251,1048,1049],{"class":301},"tryCookieLocale",[251,1051,316],{"class":294},[251,1053,1054],{"class":301},"tryHeaderLocale",[251,1056,642],{"class":294},[251,1058,1059],{"class":282},"from",[251,1061,1062],{"class":312}," '@intlify\u002Futils\u002Fh3'\n",[251,1064,1065,1067,1069,1072,1074,1076],{"class":253,"line":298},[251,1066,1044],{"class":282},[251,1068,631],{"class":294},[251,1070,1071],{"class":301},"defineServerAuth",[251,1073,642],{"class":294},[251,1075,1059],{"class":282},[251,1077,1078],{"class":312}," '@nuxtjs\u002Fbetter-auth\u002Fconfig'\n",[251,1080,1081],{"class":253,"line":325},[251,1082,656],{"emptyLinePlaceholder":655},[251,1084,1085,1087,1089,1092,1094,1096],{"class":253,"line":336},[251,1086,283],{"class":282},[251,1088,287],{"class":286},[251,1090,1091],{"class":290}," defineServerAuth",[251,1093,792],{"class":294},[251,1095,741],{"class":282},[251,1097,1098],{"class":294}," ({\n",[251,1100,1101,1104,1106],{"class":253,"line":356},[251,1102,1103],{"class":301},"  emailAndPassword",[251,1105,306],{"class":305},[251,1107,333],{"class":294},[251,1109,1110,1113,1115,1119],{"class":253,"line":367},[251,1111,1112],{"class":301},"    enabled",[251,1114,306],{"class":305},[251,1116,1118],{"class":1117},"s3ZNE"," true",[251,1120,597],{"class":294},[251,1122,1123,1126,1128,1131,1134,1137,1139,1142,1145,1148,1150,1152],{"class":253,"line":373},[251,1124,1125],{"class":290},"    sendResetPassword",[251,1127,306],{"class":305},[251,1129,1130],{"class":282}," async",[251,1132,1133],{"class":294}," ({ ",[251,1135,1136],{"class":673},"user",[251,1138,316],{"class":294},[251,1140,1141],{"class":673},"url",[251,1143,1144],{"class":294}," }, ",[251,1146,1147],{"class":673},"request",[251,1149,897],{"class":294},[251,1151,741],{"class":282},[251,1153,333],{"class":294},[251,1155,1156,1159,1162,1164,1167,1169,1171,1174,1177],{"class":253,"line":659},[251,1157,1158],{"class":282},"      const",[251,1160,1161],{"class":593}," locale",[251,1163,786],{"class":612},[251,1165,1166],{"class":290}," tryCookieLocale",[251,1168,618],{"class":294},[251,1170,1147],{"class":301},[251,1172,1173],{"class":294},")?.",[251,1175,1176],{"class":290},"toString",[251,1178,650],{"class":294},[251,1180,1181,1184,1187,1189,1191,1193,1195],{"class":253,"line":696},[251,1182,1183],{"class":677},"        ??",[251,1185,1186],{"class":290}," tryHeaderLocale",[251,1188,618],{"class":294},[251,1190,1147],{"class":301},[251,1192,1173],{"class":294},[251,1194,1176],{"class":290},[251,1196,650],{"class":294},[251,1198,1199,1201],{"class":253,"line":708},[251,1200,1183],{"class":677},[251,1202,364],{"class":312},[251,1204,1205],{"class":253,"line":724},[251,1206,656],{"emptyLinePlaceholder":655},[251,1208,1209],{"class":253,"line":730},[251,1210,1212],{"class":1211},"st7cf","      \u002F\u002F Use locale for email content...\n",[251,1214,1215],{"class":253,"line":755},[251,1216,758],{"class":294},[251,1218,1219],{"class":253,"line":761},[251,1220,370],{"class":294},[251,1222,1223],{"class":253,"line":767},[251,1224,1225],{"class":294},"}))\n",[229,1227,1229],{"id":1228},"error-codes-reference","Error Codes Reference",[1231,1232,1233,1246],"table",{},[1234,1235,1236],"thead",{},[1237,1238,1239,1243],"tr",{},[1240,1241,1242],"th",{},"Code",[1240,1244,1245],{},"Default Message",[1247,1248,1249,1260,1270,1280,1290,1300,1310,1320,1330,1340],"tbody",{},[1237,1250,1251,1257],{},[1252,1253,1254],"td",{},[218,1255,1256],{},"USER_NOT_FOUND",[1252,1258,1259],{},"User not found",[1237,1261,1262,1267],{},[1252,1263,1264],{},[218,1265,1266],{},"INVALID_PASSWORD",[1252,1268,1269],{},"Invalid password",[1237,1271,1272,1277],{},[1252,1273,1274],{},[218,1275,1276],{},"INVALID_EMAIL_OR_PASSWORD",[1252,1278,1279],{},"Invalid email or password",[1237,1281,1282,1287],{},[1252,1283,1284],{},[218,1285,1286],{},"EMAIL_NOT_VERIFIED",[1252,1288,1289],{},"Email not verified",[1237,1291,1292,1297],{},[1252,1293,1294],{},[218,1295,1296],{},"SESSION_EXPIRED",[1252,1298,1299],{},"Session expired",[1237,1301,1302,1307],{},[1252,1303,1304],{},[218,1305,1306],{},"INVALID_TOKEN",[1252,1308,1309],{},"Invalid token",[1237,1311,1312,1317],{},[1252,1313,1314],{},[218,1315,1316],{},"TOKEN_EXPIRED",[1252,1318,1319],{},"Token expired",[1237,1321,1322,1327],{},[1252,1323,1324],{},[218,1325,1326],{},"USER_ALREADY_EXISTS",[1252,1328,1329],{},"User already exists",[1237,1331,1332,1337],{},[1252,1333,1334],{},[218,1335,1336],{},"INVALID_EMAIL",[1252,1338,1339],{},"Invalid email",[1237,1341,1342,1347],{},[1252,1343,1344],{},[218,1345,1346],{},"PASSWORD_TOO_SHORT",[1252,1348,1349],{},"Password too short",[1351,1352,1355,1356,1362],"callout",{"icon":1353,"to":1354},"i-lucide-book","https:\u002F\u002Fwww.better-auth.com\u002Fdocs\u002Fconcepts\u002Fclient#error-codes","See ",[1357,1358,1361],"a",{"href":1354,"rel":1359},[1360],"nofollow","Better Auth Error Codes"," for the complete list of error codes.",[1351,1364,1367,1368,1372],{"icon":1365,"to":1366},"i-lucide-globe","https:\u002F\u002Fgithub.com\u002Fbetter-auth\u002Fbetter-auth-localization","For comprehensive translations, see ",[1357,1369,1371],{"href":1366,"rel":1370},[1360],"better-auth-localization"," plugin with 30+ languages.",[1374,1375,1376],"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":247,"searchDepth":298,"depth":298,"links":1378},[1379,1383,1384,1385,1386],{"id":231,"depth":298,"text":232,"children":1380},[1381,1382],{"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":1011,"depth":298,"text":1012},{"id":1228,"depth":298,"text":1229},"Translate authentication errors with @nuxtjs\u002Fi18n.","md",null,{},{"title":133,"description":1387},"1wyi093p3TIF-OJRwSj3X8vx5pwImRmJgjHcrBYMlyE",[1394,1396],{"title":129,"path":130,"stem":131,"description":1395,"children":-1},"Current status of Convex integration in this module.",{"title":142,"path":143,"stem":144,"description":1397,"children":-1},"API reference for client-side composables.",1791214954411]