[{"data":1,"prerenderedAt":4461},["ShallowReactive",2],{"navigation":3,"\u002Fadvanced\u002Fruntime-configuration":170,"\u002Fadvanced\u002Fruntime-configuration-surround":4458},[4,18,43,75,103,120,134],{"title":5,"path":6,"stem":7,"children":8,"icon":17},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,12],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-simple-icons-laravel",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",false,{"title":19,"path":20,"stem":21,"children":22,"page":17},"Sanctum","\u002Fsanctum","2.sanctum",[23,28,33,38],{"title":24,"path":25,"stem":26,"icon":27},"Configuration","\u002Fsanctum\u002Fconfiguration","2.sanctum\u002F1.configuration","i-lucide-cog",{"title":29,"path":30,"stem":31,"icon":32},"Cookie Authentication","\u002Fsanctum\u002Fcookie","2.sanctum\u002F2.cookie","i-lucide-cookie",{"title":34,"path":35,"stem":36,"icon":37},"Sanctum 2FA Flow","\u002Fsanctum\u002Ftwo-factor","2.sanctum\u002F3.two-factor","i-lucide-shield-check",{"title":39,"path":40,"stem":41,"icon":42},"Server Proxy","\u002Fsanctum\u002Fproxy","2.sanctum\u002F4.proxy","i-lucide-waypoints",{"title":44,"path":45,"stem":46,"children":47,"page":17},"Passport","\u002Fpassport","3.passport",[48,51,56,61,66,70],{"title":24,"path":49,"stem":50,"icon":27},"\u002Fpassport\u002Fconfiguration","3.passport\u002F1.configuration",{"title":52,"path":53,"stem":54,"icon":55},"Login & Logout","\u002Fpassport\u002Flogin-logout","3.passport\u002F2.login-logout","i-lucide-log-in",{"title":57,"path":58,"stem":59,"icon":60},"Token Management","\u002Fpassport\u002Ftokens","3.passport\u002F3.tokens","i-lucide-key",{"title":62,"path":63,"stem":64,"icon":65},"Two-Factor Authentication","\u002Fpassport\u002Ftwo-factor","3.passport\u002F4.two-factor","i-lucide-shield",{"title":67,"path":68,"stem":69,"icon":37},"Middleware & Route Protection","\u002Fpassport\u002Fmiddleware","3.passport\u002F5.middleware",{"title":71,"path":72,"stem":73,"icon":74},"Examples & Use Cases","\u002Fpassport\u002Fexamples","3.passport\u002F6.examples","i-lucide-code",{"title":76,"path":77,"stem":78,"children":79,"page":17},"Composables","\u002Fcomposables","4.composables",[80,84,89,94,99],{"title":76,"path":81,"stem":82,"icon":83},"\u002Fcomposables\u002Fcomposables","4.composables\u002F1.composables","i-lucide-code-2",{"title":85,"path":86,"stem":87,"icon":88},"$autx","\u002Fcomposables\u002Fautx","4.composables\u002F2.autx","i-lucide-globe",{"title":90,"path":91,"stem":92,"icon":93},"useAuthConfig","\u002Fcomposables\u002Fuse-auth-config","4.composables\u002F3.use-auth-config","i-lucide-settings",{"title":95,"path":96,"stem":97,"icon":98},"useAuthStore","\u002Fcomposables\u002Fuse-auth-store","4.composables\u002F4.use-auth-store","i-lucide-database",{"title":100,"path":101,"stem":102,"icon":37},"useEnsureCsrf","\u002Fcomposables\u002Fuse-ensure-csrf","4.composables\u002F5.use-ensure-csrf",{"title":104,"path":105,"stem":106,"children":107,"page":17},"Middleware","\u002Fmiddleware","5.middleware",[108,111,116],{"title":104,"path":109,"stem":110,"icon":37},"\u002Fmiddleware\u002Fmiddleware","5.middleware\u002F1.middleware",{"title":112,"path":113,"stem":114,"icon":115},"auth","\u002Fmiddleware\u002Fauth","5.middleware\u002F2.auth","i-lucide-lock",{"title":117,"path":118,"stem":119,"icon":65},"two-factor","\u002Fmiddleware\u002Ftwo-factor","5.middleware\u002F3.two-factor",{"title":121,"path":122,"stem":123,"children":124,"page":17},"Hooks","\u002Fhooks","6.hooks",[125,129],{"title":121,"path":126,"stem":127,"icon":128},"\u002Fhooks\u002Fhooks","6.hooks\u002F1.hooks","i-lucide-webhook",{"title":130,"path":131,"stem":132,"icon":133},"prepare:types","\u002Fhooks\u002Fprepare-types","6.hooks\u002F2.prepare-types","i-lucide-file-code",{"title":135,"path":136,"stem":137,"children":138,"page":17},"Advanced","\u002Fadvanced","7.advanced",[139,143,148,152,156,161,165],{"title":135,"path":140,"stem":141,"icon":142},"\u002Fadvanced\u002Fadvanced","7.advanced\u002F1.advanced","i-lucide-settings-2",{"title":144,"path":145,"stem":146,"icon":147},"Custom Configuration","\u002Fadvanced\u002Fcustom-configuration","7.advanced\u002F2.custom-configuration","i-lucide-sliders",{"title":149,"path":150,"stem":151,"icon":32},"Cookie Configuration","\u002Fadvanced\u002Fcookie-configuration","7.advanced\u002F3.cookie-configuration",{"title":153,"path":154,"stem":155,"icon":133},"TypeScript Integration","\u002Fadvanced\u002Ftypescript-integration","7.advanced\u002F4.typescript-integration",{"title":157,"path":158,"stem":159,"icon":160},"Module Aliases","\u002Fadvanced\u002Fmodule-aliases","7.advanced\u002F5.module-aliases","i-lucide-square-library",{"title":162,"path":163,"stem":164,"icon":37},"Security Features","\u002Fadvanced\u002Fsecurity-features","7.advanced\u002F6.security-features",{"title":166,"path":167,"stem":168,"icon":169},"Runtime Configuration","\u002Fadvanced\u002Fruntime-configuration","7.advanced\u002F7.runtime-configuration","i-lucide-server",{"id":171,"title":166,"body":172,"description":4451,"extension":4452,"links":4453,"meta":4454,"navigation":4455,"path":167,"seo":4456,"stem":168,"__hash__":4457},"docs\u002F7.advanced\u002F7.runtime-configuration.md",{"type":173,"value":174,"toc":4398},"minimark",[175,179,184,187,191,196,199,370,374,377,552,556,559,563,664,668,974,978,1132,1136,1140,1143,1230,1234,1345,1349,1542,1546,1550,1665,1669,1739,1743,1746,1750,1753,2137,2141,2146,2154,2159,2248,2253,2259,2272,2277,2283,2293,2297,2301,2448,2452,2494,2498,2555,2559,2612,2616,2620,2925,2929,3047,3051,3256,3260,3264,3290,3294,3320,3324,3346,3395,3399,3456,3460,3464,3470,3474,3491,3495,3500,3504,3522,3526,3534,3538,3559,3563,3568,3572,3599,3603,3672,3676,3680,4316,4320,4394],[176,177,178],"p",{},"Learn about runtime configuration in Nuxt Umbu, including secrets management, environment variables, and secure configuration practices.",[180,181,183],"h2",{"id":182},"overview","Overview",[176,185,186],{},"Nuxt Umbu leverages Nuxt's runtime configuration system to manage sensitive data like API credentials, secrets, and environment-specific settings. This ensures sensitive information never leaks to the client bundle.",[180,188,190],{"id":189},"runtime-config-vs-public-config","Runtime Config vs Public Config",[192,193,195],"h3",{"id":194},"runtime-config-server-side-only","Runtime Config (Server-Side Only)",[176,197,198],{},"Runtime config is only available on the server and never exposed to the client:",[200,201,206],"pre",{"className":202,"code":203,"language":204,"meta":205,"style":205},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  runtimeConfig: {\n    \u002F\u002F Server-side only\n    secret: {\n      password: {\n        client_id: process.env.NUXT_AUTH_PASSWORD_CLIENT_ID,\n        client_secret: process.env.NUXT_AUTH_PASSWORD_CLIENT_SECRET,\n        grant_type: 'password'\n      }\n    }\n  }\n})\n","typescript","",[207,208,209,218,240,253,259,269,279,304,325,343,349,355,361],"code",{"__ignoreMap":205},[210,211,214],"span",{"class":212,"line":213},"line",1,[210,215,217],{"class":216},"sHwdD","\u002F\u002F nuxt.config.ts\n",[210,219,221,225,228,232,236],{"class":212,"line":220},2,[210,222,224],{"class":223},"s7zQu","export",[210,226,227],{"class":223}," default",[210,229,231],{"class":230},"s2Zo4"," defineNuxtConfig",[210,233,235],{"class":234},"sTEyZ","(",[210,237,239],{"class":238},"sMK4o","{\n",[210,241,243,247,250],{"class":212,"line":242},3,[210,244,246],{"class":245},"swJcz","  runtimeConfig",[210,248,249],{"class":238},":",[210,251,252],{"class":238}," {\n",[210,254,256],{"class":212,"line":255},4,[210,257,258],{"class":216},"    \u002F\u002F Server-side only\n",[210,260,262,265,267],{"class":212,"line":261},5,[210,263,264],{"class":245},"    secret",[210,266,249],{"class":238},[210,268,252],{"class":238},[210,270,272,275,277],{"class":212,"line":271},6,[210,273,274],{"class":245},"      password",[210,276,249],{"class":238},[210,278,252],{"class":238},[210,280,282,285,287,290,293,296,298,301],{"class":212,"line":281},7,[210,283,284],{"class":245},"        client_id",[210,286,249],{"class":238},[210,288,289],{"class":234}," process",[210,291,292],{"class":238},".",[210,294,295],{"class":234},"env",[210,297,292],{"class":238},[210,299,300],{"class":234},"NUXT_AUTH_PASSWORD_CLIENT_ID",[210,302,303],{"class":238},",\n",[210,305,307,310,312,314,316,318,320,323],{"class":212,"line":306},8,[210,308,309],{"class":245},"        client_secret",[210,311,249],{"class":238},[210,313,289],{"class":234},[210,315,292],{"class":238},[210,317,295],{"class":234},[210,319,292],{"class":238},[210,321,322],{"class":234},"NUXT_AUTH_PASSWORD_CLIENT_SECRET",[210,324,303],{"class":238},[210,326,328,331,333,336,340],{"class":212,"line":327},9,[210,329,330],{"class":245},"        grant_type",[210,332,249],{"class":238},[210,334,335],{"class":238}," '",[210,337,339],{"class":338},"sfazB","password",[210,341,342],{"class":238},"'\n",[210,344,346],{"class":212,"line":345},10,[210,347,348],{"class":238},"      }\n",[210,350,352],{"class":212,"line":351},11,[210,353,354],{"class":238},"    }\n",[210,356,358],{"class":212,"line":357},12,[210,359,360],{"class":238},"  }\n",[210,362,364,367],{"class":212,"line":363},13,[210,365,366],{"class":238},"}",[210,368,369],{"class":234},")\n",[192,371,373],{"id":372},"public-runtime-config-client-side","Public Runtime Config (Client-Side)",[176,375,376],{},"Public config is exposed to the client:",[200,378,380],{"className":202,"code":379,"language":204,"meta":205,"style":205},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  runtimeConfig: {\n    public: {\n      \u002F\u002F Available on both client and server\n      auth: {\n        provider: 'sanctum',\n        cookie: {\n          prefix: 'auth.',\n          options: {\n            httpOnly: false,\n            secure: false,\n            sameSite: 'Lax'\n          }\n        }\n      }\n    }\n  }\n})\n",[207,381,382,386,398,406,415,420,429,446,455,471,480,493,504,518,524,530,535,540,545],{"__ignoreMap":205},[210,383,384],{"class":212,"line":213},[210,385,217],{"class":216},[210,387,388,390,392,394,396],{"class":212,"line":220},[210,389,224],{"class":223},[210,391,227],{"class":223},[210,393,231],{"class":230},[210,395,235],{"class":234},[210,397,239],{"class":238},[210,399,400,402,404],{"class":212,"line":242},[210,401,246],{"class":245},[210,403,249],{"class":238},[210,405,252],{"class":238},[210,407,408,411,413],{"class":212,"line":255},[210,409,410],{"class":245},"    public",[210,412,249],{"class":238},[210,414,252],{"class":238},[210,416,417],{"class":212,"line":261},[210,418,419],{"class":216},"      \u002F\u002F Available on both client and server\n",[210,421,422,425,427],{"class":212,"line":271},[210,423,424],{"class":245},"      auth",[210,426,249],{"class":238},[210,428,252],{"class":238},[210,430,431,434,436,438,441,444],{"class":212,"line":281},[210,432,433],{"class":245},"        provider",[210,435,249],{"class":238},[210,437,335],{"class":238},[210,439,440],{"class":338},"sanctum",[210,442,443],{"class":238},"'",[210,445,303],{"class":238},[210,447,448,451,453],{"class":212,"line":306},[210,449,450],{"class":245},"        cookie",[210,452,249],{"class":238},[210,454,252],{"class":238},[210,456,457,460,462,464,467,469],{"class":212,"line":327},[210,458,459],{"class":245},"          prefix",[210,461,249],{"class":238},[210,463,335],{"class":238},[210,465,466],{"class":338},"auth.",[210,468,443],{"class":238},[210,470,303],{"class":238},[210,472,473,476,478],{"class":212,"line":345},[210,474,475],{"class":245},"          options",[210,477,249],{"class":238},[210,479,252],{"class":238},[210,481,482,485,487,491],{"class":212,"line":351},[210,483,484],{"class":245},"            httpOnly",[210,486,249],{"class":238},[210,488,490],{"class":489},"sfNiH"," false",[210,492,303],{"class":238},[210,494,495,498,500,502],{"class":212,"line":357},[210,496,497],{"class":245},"            secure",[210,499,249],{"class":238},[210,501,490],{"class":489},[210,503,303],{"class":238},[210,505,506,509,511,513,516],{"class":212,"line":363},[210,507,508],{"class":245},"            sameSite",[210,510,249],{"class":238},[210,512,335],{"class":238},[210,514,515],{"class":338},"Lax",[210,517,342],{"class":238},[210,519,521],{"class":212,"line":520},14,[210,522,523],{"class":238},"          }\n",[210,525,527],{"class":212,"line":526},15,[210,528,529],{"class":238},"        }\n",[210,531,533],{"class":212,"line":532},16,[210,534,348],{"class":238},[210,536,538],{"class":212,"line":537},17,[210,539,354],{"class":238},[210,541,543],{"class":212,"line":542},18,[210,544,360],{"class":238},[210,546,548,550],{"class":212,"line":547},19,[210,549,366],{"class":238},[210,551,369],{"class":234},[180,553,555],{"id":554},"passport-secrets-configuration","Passport Secrets Configuration",[176,557,558],{},"For Passport provider, you must configure secrets in runtime config:",[192,560,562],{"id":561},"required-structure","Required Structure",[200,564,566],{"className":202,"code":565,"language":204,"meta":205,"style":205},"runtimeConfig: {\n  secret: {\n    [strategyName]: {\n      client_id: string | number,\n      client_secret: string,\n      grant_type: 'password' | 'authorization_code'\n    }\n  }\n}\n",[207,567,568,578,587,600,618,629,651,655,659],{"__ignoreMap":205},[210,569,570,574,576],{"class":212,"line":213},[210,571,573],{"class":572},"sBMFI","runtimeConfig",[210,575,249],{"class":238},[210,577,252],{"class":238},[210,579,580,583,585],{"class":212,"line":220},[210,581,582],{"class":572},"  secret",[210,584,249],{"class":238},[210,586,252],{"class":238},[210,588,589,592,595,598],{"class":212,"line":242},[210,590,591],{"class":245},"    [",[210,593,594],{"class":234},"strategyName",[210,596,597],{"class":245},"]: ",[210,599,239],{"class":238},[210,601,602,605,607,610,613,616],{"class":212,"line":255},[210,603,604],{"class":245},"      client_id",[210,606,249],{"class":238},[210,608,609],{"class":234}," string",[210,611,612],{"class":238}," |",[210,614,615],{"class":234}," number",[210,617,303],{"class":238},[210,619,620,623,625,627],{"class":212,"line":261},[210,621,622],{"class":245},"      client_secret",[210,624,249],{"class":238},[210,626,609],{"class":234},[210,628,303],{"class":238},[210,630,631,634,636,638,640,642,644,646,649],{"class":212,"line":271},[210,632,633],{"class":245},"      grant_type",[210,635,249],{"class":238},[210,637,335],{"class":238},[210,639,339],{"class":338},[210,641,443],{"class":238},[210,643,612],{"class":238},[210,645,335],{"class":238},[210,647,648],{"class":338},"authorization_code",[210,650,342],{"class":238},[210,652,653],{"class":212,"line":281},[210,654,354],{"class":238},[210,656,657],{"class":212,"line":306},[210,658,360],{"class":238},[210,660,661],{"class":212,"line":327},[210,662,663],{"class":238},"}\n",[192,665,667],{"id":666},"example-configuration","Example Configuration",[200,669,671],{"className":202,"code":670,"language":204,"meta":205,"style":205},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  auth: {\n    provider: 'passport',\n    strategies: {\n      password: {\n        endpoints: {\n          login: { url: '\u002Foauth\u002Ftoken', method: 'post' },\n          user: { url: '\u002Fapi\u002Fuser', method: 'get' }\n        },\n        redirect: {\n          login: '\u002Flogin',\n          logout: '\u002F'\n        }\n      }\n    }\n  },\n  runtimeConfig: {\n    secret: {\n      password: {\n        client_id: process.env.NUXT_AUTH_PASSWORD_CLIENT_ID,\n        client_secret: process.env.NUXT_AUTH_PASSWORD_CLIENT_SECRET,\n        grant_type: 'password'\n      }\n    }\n  }\n})\n",[207,672,673,677,689,698,714,723,731,740,780,816,821,830,845,859,863,867,871,876,884,892,901,920,939,952,957,962,967],{"__ignoreMap":205},[210,674,675],{"class":212,"line":213},[210,676,217],{"class":216},[210,678,679,681,683,685,687],{"class":212,"line":220},[210,680,224],{"class":223},[210,682,227],{"class":223},[210,684,231],{"class":230},[210,686,235],{"class":234},[210,688,239],{"class":238},[210,690,691,694,696],{"class":212,"line":242},[210,692,693],{"class":245},"  auth",[210,695,249],{"class":238},[210,697,252],{"class":238},[210,699,700,703,705,707,710,712],{"class":212,"line":255},[210,701,702],{"class":245},"    provider",[210,704,249],{"class":238},[210,706,335],{"class":238},[210,708,709],{"class":338},"passport",[210,711,443],{"class":238},[210,713,303],{"class":238},[210,715,716,719,721],{"class":212,"line":261},[210,717,718],{"class":245},"    strategies",[210,720,249],{"class":238},[210,722,252],{"class":238},[210,724,725,727,729],{"class":212,"line":271},[210,726,274],{"class":245},[210,728,249],{"class":238},[210,730,252],{"class":238},[210,732,733,736,738],{"class":212,"line":281},[210,734,735],{"class":245},"        endpoints",[210,737,249],{"class":238},[210,739,252],{"class":238},[210,741,742,745,747,750,753,755,757,760,762,765,768,770,772,775,777],{"class":212,"line":306},[210,743,744],{"class":245},"          login",[210,746,249],{"class":238},[210,748,749],{"class":238}," {",[210,751,752],{"class":245}," url",[210,754,249],{"class":238},[210,756,335],{"class":238},[210,758,759],{"class":338},"\u002Foauth\u002Ftoken",[210,761,443],{"class":238},[210,763,764],{"class":238},",",[210,766,767],{"class":245}," method",[210,769,249],{"class":238},[210,771,335],{"class":238},[210,773,774],{"class":338},"post",[210,776,443],{"class":238},[210,778,779],{"class":238}," },\n",[210,781,782,785,787,789,791,793,795,798,800,802,804,806,808,811,813],{"class":212,"line":327},[210,783,784],{"class":245},"          user",[210,786,249],{"class":238},[210,788,749],{"class":238},[210,790,752],{"class":245},[210,792,249],{"class":238},[210,794,335],{"class":238},[210,796,797],{"class":338},"\u002Fapi\u002Fuser",[210,799,443],{"class":238},[210,801,764],{"class":238},[210,803,767],{"class":245},[210,805,249],{"class":238},[210,807,335],{"class":238},[210,809,810],{"class":338},"get",[210,812,443],{"class":238},[210,814,815],{"class":238}," }\n",[210,817,818],{"class":212,"line":345},[210,819,820],{"class":238},"        },\n",[210,822,823,826,828],{"class":212,"line":351},[210,824,825],{"class":245},"        redirect",[210,827,249],{"class":238},[210,829,252],{"class":238},[210,831,832,834,836,838,841,843],{"class":212,"line":357},[210,833,744],{"class":245},[210,835,249],{"class":238},[210,837,335],{"class":238},[210,839,840],{"class":338},"\u002Flogin",[210,842,443],{"class":238},[210,844,303],{"class":238},[210,846,847,850,852,854,857],{"class":212,"line":363},[210,848,849],{"class":245},"          logout",[210,851,249],{"class":238},[210,853,335],{"class":238},[210,855,856],{"class":338},"\u002F",[210,858,342],{"class":238},[210,860,861],{"class":212,"line":520},[210,862,529],{"class":238},[210,864,865],{"class":212,"line":526},[210,866,348],{"class":238},[210,868,869],{"class":212,"line":532},[210,870,354],{"class":238},[210,872,873],{"class":212,"line":537},[210,874,875],{"class":238},"  },\n",[210,877,878,880,882],{"class":212,"line":542},[210,879,246],{"class":245},[210,881,249],{"class":238},[210,883,252],{"class":238},[210,885,886,888,890],{"class":212,"line":547},[210,887,264],{"class":245},[210,889,249],{"class":238},[210,891,252],{"class":238},[210,893,895,897,899],{"class":212,"line":894},20,[210,896,274],{"class":245},[210,898,249],{"class":238},[210,900,252],{"class":238},[210,902,904,906,908,910,912,914,916,918],{"class":212,"line":903},21,[210,905,284],{"class":245},[210,907,249],{"class":238},[210,909,289],{"class":234},[210,911,292],{"class":238},[210,913,295],{"class":234},[210,915,292],{"class":238},[210,917,300],{"class":234},[210,919,303],{"class":238},[210,921,923,925,927,929,931,933,935,937],{"class":212,"line":922},22,[210,924,309],{"class":245},[210,926,249],{"class":238},[210,928,289],{"class":234},[210,930,292],{"class":238},[210,932,295],{"class":234},[210,934,292],{"class":238},[210,936,322],{"class":234},[210,938,303],{"class":238},[210,940,942,944,946,948,950],{"class":212,"line":941},23,[210,943,330],{"class":245},[210,945,249],{"class":238},[210,947,335],{"class":238},[210,949,339],{"class":338},[210,951,342],{"class":238},[210,953,955],{"class":212,"line":954},24,[210,956,348],{"class":238},[210,958,960],{"class":212,"line":959},25,[210,961,354],{"class":238},[210,963,965],{"class":212,"line":964},26,[210,966,360],{"class":238},[210,968,970,972],{"class":212,"line":969},27,[210,971,366],{"class":238},[210,973,369],{"class":234},[192,975,977],{"id":976},"multiple-strategies","Multiple Strategies",[200,979,981],{"className":202,"code":980,"language":204,"meta":205,"style":205},"runtimeConfig: {\n  secret: {\n    password: {\n      client_id: process.env.NUXT_AUTH_PASSWORD_CLIENT_ID,\n      client_secret: process.env.NUXT_AUTH_PASSWORD_CLIENT_SECRET,\n      grant_type: 'password'\n    },\n    social: {\n      client_id: process.env.NUXT_AUTH_SOCIAL_CLIENT_ID,\n      client_secret: process.env.NUXT_AUTH_SOCIAL_CLIENT_SECRET,\n      grant_type: 'authorization_code'\n    }\n  }\n}\n",[207,982,983,991,999,1008,1026,1044,1056,1061,1070,1089,1108,1120,1124,1128],{"__ignoreMap":205},[210,984,985,987,989],{"class":212,"line":213},[210,986,573],{"class":572},[210,988,249],{"class":238},[210,990,252],{"class":238},[210,992,993,995,997],{"class":212,"line":220},[210,994,582],{"class":572},[210,996,249],{"class":238},[210,998,252],{"class":238},[210,1000,1001,1004,1006],{"class":212,"line":242},[210,1002,1003],{"class":572},"    password",[210,1005,249],{"class":238},[210,1007,252],{"class":238},[210,1009,1010,1012,1014,1016,1018,1020,1022,1024],{"class":212,"line":255},[210,1011,604],{"class":572},[210,1013,249],{"class":238},[210,1015,289],{"class":234},[210,1017,292],{"class":238},[210,1019,295],{"class":234},[210,1021,292],{"class":238},[210,1023,300],{"class":234},[210,1025,303],{"class":238},[210,1027,1028,1030,1032,1034,1036,1038,1040,1042],{"class":212,"line":261},[210,1029,622],{"class":572},[210,1031,249],{"class":238},[210,1033,289],{"class":234},[210,1035,292],{"class":238},[210,1037,295],{"class":234},[210,1039,292],{"class":238},[210,1041,322],{"class":234},[210,1043,303],{"class":238},[210,1045,1046,1048,1050,1052,1054],{"class":212,"line":271},[210,1047,633],{"class":572},[210,1049,249],{"class":238},[210,1051,335],{"class":238},[210,1053,339],{"class":338},[210,1055,342],{"class":238},[210,1057,1058],{"class":212,"line":281},[210,1059,1060],{"class":238},"    },\n",[210,1062,1063,1066,1068],{"class":212,"line":306},[210,1064,1065],{"class":572},"    social",[210,1067,249],{"class":238},[210,1069,252],{"class":238},[210,1071,1072,1074,1076,1078,1080,1082,1084,1087],{"class":212,"line":327},[210,1073,604],{"class":572},[210,1075,249],{"class":238},[210,1077,289],{"class":234},[210,1079,292],{"class":238},[210,1081,295],{"class":234},[210,1083,292],{"class":238},[210,1085,1086],{"class":234},"NUXT_AUTH_SOCIAL_CLIENT_ID",[210,1088,303],{"class":238},[210,1090,1091,1093,1095,1097,1099,1101,1103,1106],{"class":212,"line":345},[210,1092,622],{"class":572},[210,1094,249],{"class":238},[210,1096,289],{"class":234},[210,1098,292],{"class":238},[210,1100,295],{"class":234},[210,1102,292],{"class":238},[210,1104,1105],{"class":234},"NUXT_AUTH_SOCIAL_CLIENT_SECRET",[210,1107,303],{"class":238},[210,1109,1110,1112,1114,1116,1118],{"class":212,"line":351},[210,1111,633],{"class":572},[210,1113,249],{"class":238},[210,1115,335],{"class":238},[210,1117,648],{"class":338},[210,1119,342],{"class":238},[210,1121,1122],{"class":212,"line":357},[210,1123,354],{"class":238},[210,1125,1126],{"class":212,"line":363},[210,1127,360],{"class":238},[210,1129,1130],{"class":212,"line":520},[210,1131,663],{"class":238},[180,1133,1135],{"id":1134},"environment-variables","Environment Variables",[192,1137,1139],{"id":1138},"using-env-files","Using .env Files",[176,1141,1142],{},"Create environment files for different environments:",[200,1144,1148],{"className":1145,"code":1146,"language":1147,"meta":205,"style":205},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# .env\nNUXT_AUTH_PASSWORD_CLIENT_ID=your_client_id\nNUXT_AUTH_PASSWORD_CLIENT_SECRET=your_client_secret\n\n# .env.production\nNUXT_AUTH_PASSWORD_CLIENT_ID=prod_client_id\nNUXT_AUTH_PASSWORD_CLIENT_SECRET=prod_client_secret\n\n# .env.development\nNUXT_AUTH_PASSWORD_CLIENT_ID=dev_client_id\nNUXT_AUTH_PASSWORD_CLIENT_SECRET=dev_client_secret\n","bash",[207,1149,1150,1155,1165,1174,1180,1185,1194,1203,1207,1212,1221],{"__ignoreMap":205},[210,1151,1152],{"class":212,"line":213},[210,1153,1154],{"class":216},"# .env\n",[210,1156,1157,1159,1162],{"class":212,"line":220},[210,1158,300],{"class":234},[210,1160,1161],{"class":238},"=",[210,1163,1164],{"class":338},"your_client_id\n",[210,1166,1167,1169,1171],{"class":212,"line":242},[210,1168,322],{"class":234},[210,1170,1161],{"class":238},[210,1172,1173],{"class":338},"your_client_secret\n",[210,1175,1176],{"class":212,"line":255},[210,1177,1179],{"emptyLinePlaceholder":1178},true,"\n",[210,1181,1182],{"class":212,"line":261},[210,1183,1184],{"class":216},"# .env.production\n",[210,1186,1187,1189,1191],{"class":212,"line":271},[210,1188,300],{"class":234},[210,1190,1161],{"class":238},[210,1192,1193],{"class":338},"prod_client_id\n",[210,1195,1196,1198,1200],{"class":212,"line":281},[210,1197,322],{"class":234},[210,1199,1161],{"class":238},[210,1201,1202],{"class":338},"prod_client_secret\n",[210,1204,1205],{"class":212,"line":306},[210,1206,1179],{"emptyLinePlaceholder":1178},[210,1208,1209],{"class":212,"line":327},[210,1210,1211],{"class":216},"# .env.development\n",[210,1213,1214,1216,1218],{"class":212,"line":345},[210,1215,300],{"class":234},[210,1217,1161],{"class":238},[210,1219,1220],{"class":338},"dev_client_id\n",[210,1222,1223,1225,1227],{"class":212,"line":351},[210,1224,322],{"class":234},[210,1226,1161],{"class":238},[210,1228,1229],{"class":338},"dev_client_secret\n",[192,1231,1233],{"id":1232},"accessing-environment-variables","Accessing Environment Variables",[200,1235,1237],{"className":202,"code":1236,"language":204,"meta":205,"style":205},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  runtimeConfig: {\n    secret: {\n      password: {\n        client_id: process.env.NUXT_AUTH_PASSWORD_CLIENT_ID,\n        client_secret: process.env.NUXT_AUTH_PASSWORD_CLIENT_SECRET,\n        grant_type: 'password'\n      }\n    }\n  }\n})\n",[207,1238,1239,1243,1255,1263,1271,1279,1297,1315,1327,1331,1335,1339],{"__ignoreMap":205},[210,1240,1241],{"class":212,"line":213},[210,1242,217],{"class":216},[210,1244,1245,1247,1249,1251,1253],{"class":212,"line":220},[210,1246,224],{"class":223},[210,1248,227],{"class":223},[210,1250,231],{"class":230},[210,1252,235],{"class":234},[210,1254,239],{"class":238},[210,1256,1257,1259,1261],{"class":212,"line":242},[210,1258,246],{"class":245},[210,1260,249],{"class":238},[210,1262,252],{"class":238},[210,1264,1265,1267,1269],{"class":212,"line":255},[210,1266,264],{"class":245},[210,1268,249],{"class":238},[210,1270,252],{"class":238},[210,1272,1273,1275,1277],{"class":212,"line":261},[210,1274,274],{"class":245},[210,1276,249],{"class":238},[210,1278,252],{"class":238},[210,1280,1281,1283,1285,1287,1289,1291,1293,1295],{"class":212,"line":271},[210,1282,284],{"class":245},[210,1284,249],{"class":238},[210,1286,289],{"class":234},[210,1288,292],{"class":238},[210,1290,295],{"class":234},[210,1292,292],{"class":238},[210,1294,300],{"class":234},[210,1296,303],{"class":238},[210,1298,1299,1301,1303,1305,1307,1309,1311,1313],{"class":212,"line":281},[210,1300,309],{"class":245},[210,1302,249],{"class":238},[210,1304,289],{"class":234},[210,1306,292],{"class":238},[210,1308,295],{"class":234},[210,1310,292],{"class":238},[210,1312,322],{"class":234},[210,1314,303],{"class":238},[210,1316,1317,1319,1321,1323,1325],{"class":212,"line":306},[210,1318,330],{"class":245},[210,1320,249],{"class":238},[210,1322,335],{"class":238},[210,1324,339],{"class":338},[210,1326,342],{"class":238},[210,1328,1329],{"class":212,"line":327},[210,1330,348],{"class":238},[210,1332,1333],{"class":212,"line":345},[210,1334,354],{"class":238},[210,1336,1337],{"class":212,"line":351},[210,1338,360],{"class":238},[210,1340,1341,1343],{"class":212,"line":357},[210,1342,366],{"class":238},[210,1344,369],{"class":234},[192,1346,1348],{"id":1347},"environment-specific-config","Environment-Specific Config",[200,1350,1352],{"className":202,"code":1351,"language":204,"meta":205,"style":205},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  runtimeConfig: {\n    secret: {\n      password: {\n        client_id: process.env.NODE_ENV === 'production' \n          ? process.env.NUXT_AUTH_PASSWORD_CLIENT_ID \n          : process.env.NUXT_AUTH_PASSWORD_CLIENT_ID,\n        client_secret: process.env.NODE_ENV === 'production'\n          ? process.env.NUXT_AUTH_PASSWORD_CLIENT_SECRET\n          : process.env.NUXT_AUTH_PASSWORD_CLIENT_SECRET,\n        grant_type: 'password'\n      }\n    }\n  }\n})\n",[207,1353,1354,1358,1370,1378,1386,1394,1424,1440,1457,1481,1496,1512,1524,1528,1532,1536],{"__ignoreMap":205},[210,1355,1356],{"class":212,"line":213},[210,1357,217],{"class":216},[210,1359,1360,1362,1364,1366,1368],{"class":212,"line":220},[210,1361,224],{"class":223},[210,1363,227],{"class":223},[210,1365,231],{"class":230},[210,1367,235],{"class":234},[210,1369,239],{"class":238},[210,1371,1372,1374,1376],{"class":212,"line":242},[210,1373,246],{"class":245},[210,1375,249],{"class":238},[210,1377,252],{"class":238},[210,1379,1380,1382,1384],{"class":212,"line":255},[210,1381,264],{"class":245},[210,1383,249],{"class":238},[210,1385,252],{"class":238},[210,1387,1388,1390,1392],{"class":212,"line":261},[210,1389,274],{"class":245},[210,1391,249],{"class":238},[210,1393,252],{"class":238},[210,1395,1396,1398,1400,1402,1404,1406,1408,1411,1414,1416,1419,1421],{"class":212,"line":271},[210,1397,284],{"class":245},[210,1399,249],{"class":238},[210,1401,289],{"class":234},[210,1403,292],{"class":238},[210,1405,295],{"class":234},[210,1407,292],{"class":238},[210,1409,1410],{"class":234},"NODE_ENV ",[210,1412,1413],{"class":238},"===",[210,1415,335],{"class":238},[210,1417,1418],{"class":338},"production",[210,1420,443],{"class":238},[210,1422,1423],{"class":234}," \n",[210,1425,1426,1429,1431,1433,1435,1437],{"class":212,"line":281},[210,1427,1428],{"class":238},"          ?",[210,1430,289],{"class":234},[210,1432,292],{"class":238},[210,1434,295],{"class":234},[210,1436,292],{"class":238},[210,1438,1439],{"class":234},"NUXT_AUTH_PASSWORD_CLIENT_ID \n",[210,1441,1442,1445,1447,1449,1451,1453,1455],{"class":212,"line":306},[210,1443,1444],{"class":238},"          :",[210,1446,289],{"class":234},[210,1448,292],{"class":238},[210,1450,295],{"class":234},[210,1452,292],{"class":238},[210,1454,300],{"class":234},[210,1456,303],{"class":238},[210,1458,1459,1461,1463,1465,1467,1469,1471,1473,1475,1477,1479],{"class":212,"line":327},[210,1460,309],{"class":245},[210,1462,249],{"class":238},[210,1464,289],{"class":234},[210,1466,292],{"class":238},[210,1468,295],{"class":234},[210,1470,292],{"class":238},[210,1472,1410],{"class":234},[210,1474,1413],{"class":238},[210,1476,335],{"class":238},[210,1478,1418],{"class":338},[210,1480,342],{"class":238},[210,1482,1483,1485,1487,1489,1491,1493],{"class":212,"line":345},[210,1484,1428],{"class":238},[210,1486,289],{"class":234},[210,1488,292],{"class":238},[210,1490,295],{"class":234},[210,1492,292],{"class":238},[210,1494,1495],{"class":234},"NUXT_AUTH_PASSWORD_CLIENT_SECRET\n",[210,1497,1498,1500,1502,1504,1506,1508,1510],{"class":212,"line":351},[210,1499,1444],{"class":238},[210,1501,289],{"class":234},[210,1503,292],{"class":238},[210,1505,295],{"class":234},[210,1507,292],{"class":238},[210,1509,322],{"class":234},[210,1511,303],{"class":238},[210,1513,1514,1516,1518,1520,1522],{"class":212,"line":357},[210,1515,330],{"class":245},[210,1517,249],{"class":238},[210,1519,335],{"class":238},[210,1521,339],{"class":338},[210,1523,342],{"class":238},[210,1525,1526],{"class":212,"line":363},[210,1527,348],{"class":238},[210,1529,1530],{"class":212,"line":520},[210,1531,354],{"class":238},[210,1533,1534],{"class":212,"line":526},[210,1535,360],{"class":238},[210,1537,1538,1540],{"class":212,"line":532},[210,1539,366],{"class":238},[210,1541,369],{"class":234},[180,1543,1545],{"id":1544},"accessing-runtime-config","Accessing Runtime Config",[192,1547,1549],{"id":1548},"server-side-access","Server-Side Access",[200,1551,1553],{"className":202,"code":1552,"language":204,"meta":205,"style":205},"\u002F\u002F server\u002Fapi\u002Fconfig.get.ts\nexport default defineEventHandler((event) => {\n  const config = useRuntimeConfig()\n  const secret = config.secret.password\n  \n  return {\n    clientId: secret.client_id\n    \u002F\u002F Never expose client_secret!\n  }\n})\n",[207,1554,1555,1560,1586,1603,1624,1629,1636,1650,1655,1659],{"__ignoreMap":205},[210,1556,1557],{"class":212,"line":213},[210,1558,1559],{"class":216},"\u002F\u002F server\u002Fapi\u002Fconfig.get.ts\n",[210,1561,1562,1564,1566,1569,1571,1573,1577,1580,1584],{"class":212,"line":220},[210,1563,224],{"class":223},[210,1565,227],{"class":223},[210,1567,1568],{"class":230}," defineEventHandler",[210,1570,235],{"class":234},[210,1572,235],{"class":238},[210,1574,1576],{"class":1575},"sHdIc","event",[210,1578,1579],{"class":238},")",[210,1581,1583],{"class":1582},"spNyl"," =>",[210,1585,252],{"class":238},[210,1587,1588,1591,1594,1597,1600],{"class":212,"line":242},[210,1589,1590],{"class":1582},"  const",[210,1592,1593],{"class":234}," config",[210,1595,1596],{"class":238}," =",[210,1598,1599],{"class":230}," useRuntimeConfig",[210,1601,1602],{"class":245},"()\n",[210,1604,1605,1607,1610,1612,1614,1616,1619,1621],{"class":212,"line":255},[210,1606,1590],{"class":1582},[210,1608,1609],{"class":234}," secret",[210,1611,1596],{"class":238},[210,1613,1593],{"class":234},[210,1615,292],{"class":238},[210,1617,1618],{"class":234},"secret",[210,1620,292],{"class":238},[210,1622,1623],{"class":234},"password\n",[210,1625,1626],{"class":212,"line":261},[210,1627,1628],{"class":245},"  \n",[210,1630,1631,1634],{"class":212,"line":271},[210,1632,1633],{"class":223},"  return",[210,1635,252],{"class":238},[210,1637,1638,1641,1643,1645,1647],{"class":212,"line":281},[210,1639,1640],{"class":245},"    clientId",[210,1642,249],{"class":238},[210,1644,1609],{"class":234},[210,1646,292],{"class":238},[210,1648,1649],{"class":234},"client_id\n",[210,1651,1652],{"class":212,"line":306},[210,1653,1654],{"class":216},"    \u002F\u002F Never expose client_secret!\n",[210,1656,1657],{"class":212,"line":327},[210,1658,360],{"class":238},[210,1660,1661,1663],{"class":212,"line":345},[210,1662,366],{"class":238},[210,1664,369],{"class":234},[192,1666,1668],{"id":1667},"client-side-access-public-config-only","Client-Side Access (Public Config Only)",[200,1670,1672],{"className":202,"code":1671,"language":204,"meta":205,"style":205},"\u002F\u002F In components\nconst config = useRuntimeConfig()\nconst authConfig = config.public.auth\n\nconsole.log(authConfig.provider) \u002F\u002F 'sanctum' or 'passport'\n",[207,1673,1674,1679,1693,1714,1718],{"__ignoreMap":205},[210,1675,1676],{"class":212,"line":213},[210,1677,1678],{"class":216},"\u002F\u002F In components\n",[210,1680,1681,1684,1687,1689,1691],{"class":212,"line":220},[210,1682,1683],{"class":1582},"const",[210,1685,1686],{"class":234}," config ",[210,1688,1161],{"class":238},[210,1690,1599],{"class":230},[210,1692,1602],{"class":234},[210,1694,1695,1697,1700,1702,1704,1706,1709,1711],{"class":212,"line":242},[210,1696,1683],{"class":1582},[210,1698,1699],{"class":234}," authConfig ",[210,1701,1161],{"class":238},[210,1703,1593],{"class":234},[210,1705,292],{"class":238},[210,1707,1708],{"class":234},"public",[210,1710,292],{"class":238},[210,1712,1713],{"class":234},"auth\n",[210,1715,1716],{"class":212,"line":255},[210,1717,1179],{"emptyLinePlaceholder":1178},[210,1719,1720,1723,1725,1728,1731,1733,1736],{"class":212,"line":261},[210,1721,1722],{"class":234},"console",[210,1724,292],{"class":238},[210,1726,1727],{"class":230},"log",[210,1729,1730],{"class":234},"(authConfig",[210,1732,292],{"class":238},[210,1734,1735],{"class":234},"provider) ",[210,1737,1738],{"class":216},"\u002F\u002F 'sanctum' or 'passport'\n",[180,1740,1742],{"id":1741},"validation","Validation",[176,1744,1745],{},"The module automatically validates runtime config:",[192,1747,1749],{"id":1748},"secret-validation","Secret Validation",[176,1751,1752],{},"For Passport provider, the module validates:",[1754,1755,1756,1813,2017],"ol",{},[1757,1758,1759,1763],"li",{},[1760,1761,1762],"strong",{},"Secret exists",[200,1764,1766],{"className":202,"code":1765,"language":204,"meta":205,"style":205},"if (!runtimeConfig.secret) {\n  logger.error('Missing \"runtimeConfig.secret\" in nuxt.config.ts')\n}\n",[207,1767,1768,1788,1809],{"__ignoreMap":205},[210,1769,1770,1773,1776,1779,1781,1783,1786],{"class":212,"line":213},[210,1771,1772],{"class":223},"if",[210,1774,1775],{"class":234}," (",[210,1777,1778],{"class":238},"!",[210,1780,573],{"class":234},[210,1782,292],{"class":238},[210,1784,1785],{"class":234},"secret) ",[210,1787,239],{"class":238},[210,1789,1790,1793,1795,1798,1800,1802,1805,1807],{"class":212,"line":220},[210,1791,1792],{"class":234},"  logger",[210,1794,292],{"class":238},[210,1796,1797],{"class":230},"error",[210,1799,235],{"class":245},[210,1801,443],{"class":238},[210,1803,1804],{"class":338},"Missing \"runtimeConfig.secret\" in nuxt.config.ts",[210,1806,443],{"class":238},[210,1808,369],{"class":245},[210,1810,1811],{"class":212,"line":242},[210,1812,663],{"class":238},[1757,1814,1815,1818],{},[1760,1816,1817],{},"Secret structure is valid",[200,1819,1821],{"className":202,"code":1820,"language":204,"meta":205,"style":205},"function isValidSecretConfig(secret: unknown): secret is Record\u003Cstring, AuthSecretConfig> {\n  return typeof secret === 'object' && secret !== null && \n         Object.values(secret).every(config => \n           typeof config === 'object' && \n           config !== null &&\n           'client_id' in config &&\n           'client_secret' in config &&\n           'grant_type' in config\n         )\n}\n",[207,1822,1823,1867,1901,1931,1950,1962,1979,1994,2008,2013],{"__ignoreMap":205},[210,1824,1825,1828,1831,1833,1835,1837,1840,1843,1845,1848,1851,1854,1857,1859,1862,1865],{"class":212,"line":213},[210,1826,1827],{"class":1582},"function",[210,1829,1830],{"class":230}," isValidSecretConfig",[210,1832,235],{"class":238},[210,1834,1618],{"class":1575},[210,1836,249],{"class":238},[210,1838,1839],{"class":572}," unknown",[210,1841,1842],{"class":238},"):",[210,1844,1609],{"class":1575},[210,1846,1847],{"class":238}," is",[210,1849,1850],{"class":572}," Record",[210,1852,1853],{"class":238},"\u003C",[210,1855,1856],{"class":572},"string",[210,1858,764],{"class":238},[210,1860,1861],{"class":572}," AuthSecretConfig",[210,1863,1864],{"class":238},">",[210,1866,252],{"class":238},[210,1868,1869,1871,1874,1876,1879,1881,1884,1886,1889,1891,1894,1897,1899],{"class":212,"line":220},[210,1870,1633],{"class":223},[210,1872,1873],{"class":238}," typeof",[210,1875,1609],{"class":234},[210,1877,1878],{"class":238}," ===",[210,1880,335],{"class":238},[210,1882,1883],{"class":338},"object",[210,1885,443],{"class":238},[210,1887,1888],{"class":238}," &&",[210,1890,1609],{"class":234},[210,1892,1893],{"class":238}," !==",[210,1895,1896],{"class":238}," null",[210,1898,1888],{"class":238},[210,1900,1423],{"class":245},[210,1902,1903,1906,1908,1911,1913,1915,1917,1919,1922,1924,1927,1929],{"class":212,"line":242},[210,1904,1905],{"class":234},"         Object",[210,1907,292],{"class":238},[210,1909,1910],{"class":230},"values",[210,1912,235],{"class":245},[210,1914,1618],{"class":234},[210,1916,1579],{"class":245},[210,1918,292],{"class":238},[210,1920,1921],{"class":230},"every",[210,1923,235],{"class":245},[210,1925,1926],{"class":1575},"config",[210,1928,1583],{"class":1582},[210,1930,1423],{"class":245},[210,1932,1933,1936,1938,1940,1942,1944,1946,1948],{"class":212,"line":255},[210,1934,1935],{"class":238},"           typeof",[210,1937,1593],{"class":234},[210,1939,1878],{"class":238},[210,1941,335],{"class":238},[210,1943,1883],{"class":338},[210,1945,443],{"class":238},[210,1947,1888],{"class":238},[210,1949,1423],{"class":245},[210,1951,1952,1955,1957,1959],{"class":212,"line":261},[210,1953,1954],{"class":234},"           config",[210,1956,1893],{"class":238},[210,1958,1896],{"class":238},[210,1960,1961],{"class":238}," &&\n",[210,1963,1964,1967,1970,1972,1975,1977],{"class":212,"line":271},[210,1965,1966],{"class":238},"           '",[210,1968,1969],{"class":338},"client_id",[210,1971,443],{"class":238},[210,1973,1974],{"class":238}," in",[210,1976,1593],{"class":234},[210,1978,1961],{"class":238},[210,1980,1981,1983,1986,1988,1990,1992],{"class":212,"line":281},[210,1982,1966],{"class":238},[210,1984,1985],{"class":338},"client_secret",[210,1987,443],{"class":238},[210,1989,1974],{"class":238},[210,1991,1593],{"class":234},[210,1993,1961],{"class":238},[210,1995,1996,1998,2001,2003,2005],{"class":212,"line":306},[210,1997,1966],{"class":238},[210,1999,2000],{"class":338},"grant_type",[210,2002,443],{"class":238},[210,2004,1974],{"class":238},[210,2006,2007],{"class":234}," config\n",[210,2009,2010],{"class":212,"line":327},[210,2011,2012],{"class":245},"         )\n",[210,2014,2015],{"class":212,"line":345},[210,2016,663],{"class":238},[1757,2018,2019,2022],{},[1760,2020,2021],{},"Strategy correspondence",[200,2023,2025],{"className":202,"code":2024,"language":204,"meta":205,"style":205},"Object.entries(runtimeConfig.secret).forEach(([key, config]) => {\n  if (!options.strategies[key]) {\n    logger.error(`Strategy \"${key}\" found in secret but not in strategies`)\n  }\n})\n",[207,2026,2027,2069,2096,2127,2131],{"__ignoreMap":205},[210,2028,2029,2032,2034,2037,2040,2042,2045,2047,2050,2052,2055,2058,2060,2062,2065,2067],{"class":212,"line":213},[210,2030,2031],{"class":234},"Object",[210,2033,292],{"class":238},[210,2035,2036],{"class":230},"entries",[210,2038,2039],{"class":234},"(runtimeConfig",[210,2041,292],{"class":238},[210,2043,2044],{"class":234},"secret)",[210,2046,292],{"class":238},[210,2048,2049],{"class":230},"forEach",[210,2051,235],{"class":234},[210,2053,2054],{"class":238},"([",[210,2056,2057],{"class":1575},"key",[210,2059,764],{"class":238},[210,2061,1593],{"class":1575},[210,2063,2064],{"class":238},"])",[210,2066,1583],{"class":1582},[210,2068,252],{"class":238},[210,2070,2071,2074,2076,2078,2081,2083,2086,2089,2091,2094],{"class":212,"line":220},[210,2072,2073],{"class":223},"  if",[210,2075,1775],{"class":245},[210,2077,1778],{"class":238},[210,2079,2080],{"class":234},"options",[210,2082,292],{"class":238},[210,2084,2085],{"class":234},"strategies",[210,2087,2088],{"class":245},"[",[210,2090,2057],{"class":234},[210,2092,2093],{"class":245},"]) ",[210,2095,239],{"class":238},[210,2097,2098,2101,2103,2105,2107,2110,2113,2116,2118,2120,2123,2125],{"class":212,"line":242},[210,2099,2100],{"class":234},"    logger",[210,2102,292],{"class":238},[210,2104,1797],{"class":230},[210,2106,235],{"class":245},[210,2108,2109],{"class":238},"`",[210,2111,2112],{"class":338},"Strategy \"",[210,2114,2115],{"class":238},"${",[210,2117,2057],{"class":234},[210,2119,366],{"class":238},[210,2121,2122],{"class":338},"\" found in secret but not in strategies",[210,2124,2109],{"class":238},[210,2126,369],{"class":245},[210,2128,2129],{"class":212,"line":255},[210,2130,360],{"class":238},[210,2132,2133,2135],{"class":212,"line":261},[210,2134,366],{"class":238},[210,2136,369],{"class":234},[192,2138,2140],{"id":2139},"common-validation-errors","Common Validation Errors",[176,2142,2143],{},[1760,2144,2145],{},"Missing runtimeConfig.secret",[200,2147,2152],{"className":2148,"code":2150,"language":2151,"meta":205},[2149],"language-text","Error: Missing \"runtimeConfig.secret\" in nuxt.config.ts\n","text",[207,2153,2150],{"__ignoreMap":205},[176,2155,2156,249],{},[1760,2157,2158],{},"Solution",[200,2160,2162],{"className":202,"code":2161,"language":204,"meta":205,"style":205},"runtimeConfig: {\n  secret: {\n    password: {\n      client_id: process.env.NUXT_AUTH_PASSWORD_CLIENT_ID,\n      client_secret: process.env.NUXT_AUTH_PASSWORD_CLIENT_SECRET,\n      grant_type: 'password'\n    }\n  }\n}\n",[207,2163,2164,2172,2180,2188,2206,2224,2236,2240,2244],{"__ignoreMap":205},[210,2165,2166,2168,2170],{"class":212,"line":213},[210,2167,573],{"class":572},[210,2169,249],{"class":238},[210,2171,252],{"class":238},[210,2173,2174,2176,2178],{"class":212,"line":220},[210,2175,582],{"class":572},[210,2177,249],{"class":238},[210,2179,252],{"class":238},[210,2181,2182,2184,2186],{"class":212,"line":242},[210,2183,1003],{"class":572},[210,2185,249],{"class":238},[210,2187,252],{"class":238},[210,2189,2190,2192,2194,2196,2198,2200,2202,2204],{"class":212,"line":255},[210,2191,604],{"class":572},[210,2193,249],{"class":238},[210,2195,289],{"class":234},[210,2197,292],{"class":238},[210,2199,295],{"class":234},[210,2201,292],{"class":238},[210,2203,300],{"class":234},[210,2205,303],{"class":238},[210,2207,2208,2210,2212,2214,2216,2218,2220,2222],{"class":212,"line":261},[210,2209,622],{"class":572},[210,2211,249],{"class":238},[210,2213,289],{"class":234},[210,2215,292],{"class":238},[210,2217,295],{"class":234},[210,2219,292],{"class":238},[210,2221,322],{"class":234},[210,2223,303],{"class":238},[210,2225,2226,2228,2230,2232,2234],{"class":212,"line":271},[210,2227,633],{"class":572},[210,2229,249],{"class":238},[210,2231,335],{"class":238},[210,2233,339],{"class":338},[210,2235,342],{"class":238},[210,2237,2238],{"class":212,"line":281},[210,2239,354],{"class":238},[210,2241,2242],{"class":212,"line":306},[210,2243,360],{"class":238},[210,2245,2246],{"class":212,"line":327},[210,2247,663],{"class":238},[176,2249,2250],{},[1760,2251,2252],{},"Invalid secret structure",[200,2254,2257],{"className":2255,"code":2256,"language":2151,"meta":205},[2149],"Error: Invalid \"runtimeConfig.secret\" structure in nuxt.config.ts\n",[207,2258,2256],{"__ignoreMap":205},[176,2260,2261,2263,2264,2266,2267,2269,2270,292],{},[1760,2262,2158],{},": Ensure each secret has ",[207,2265,1969],{},", ",[207,2268,1985],{},", and ",[207,2271,2000],{},[176,2273,2274],{},[1760,2275,2276],{},"Strategy not found",[200,2278,2281],{"className":2279,"code":2280,"language":2151,"meta":205},[2149],"Error: Strategy \"password\" found in secret but not in options.strategies\n",[207,2282,2280],{"__ignoreMap":205},[176,2284,2285,2287,2288,2290,2291,292],{},[1760,2286,2158],{},": Ensure strategy names match between ",[207,2289,2085],{}," and ",[207,2292,1618],{},[180,2294,2296],{"id":2295},"security-best-practices","Security Best Practices",[192,2298,2300],{"id":2299},"never-expose-secrets","Never Expose Secrets",[200,2302,2304],{"className":202,"code":2303,"language":204,"meta":205,"style":205},"\u002F\u002F ❌ BAD - Exposes secret to client\nexport default defineNuxtConfig({\n  runtimeConfig: {\n    public: {\n      secret: {\n        client_secret: 'secret'  \u002F\u002F This will be in client bundle!\n      }\n    }\n  }\n})\n\n\u002F\u002F ✅ GOOD - Secret stays on server\nexport default defineNuxtConfig({\n  runtimeConfig: {\n    secret: {\n      client_secret: process.env.NUXT_AUTH_PASSWORD_CLIENT_SECRET\n    }\n  }\n})\n",[207,2305,2306,2311,2323,2331,2339,2348,2363,2367,2371,2375,2381,2385,2390,2402,2410,2418,2434,2438,2442],{"__ignoreMap":205},[210,2307,2308],{"class":212,"line":213},[210,2309,2310],{"class":216},"\u002F\u002F ❌ BAD - Exposes secret to client\n",[210,2312,2313,2315,2317,2319,2321],{"class":212,"line":220},[210,2314,224],{"class":223},[210,2316,227],{"class":223},[210,2318,231],{"class":230},[210,2320,235],{"class":234},[210,2322,239],{"class":238},[210,2324,2325,2327,2329],{"class":212,"line":242},[210,2326,246],{"class":245},[210,2328,249],{"class":238},[210,2330,252],{"class":238},[210,2332,2333,2335,2337],{"class":212,"line":255},[210,2334,410],{"class":245},[210,2336,249],{"class":238},[210,2338,252],{"class":238},[210,2340,2341,2344,2346],{"class":212,"line":261},[210,2342,2343],{"class":245},"      secret",[210,2345,249],{"class":238},[210,2347,252],{"class":238},[210,2349,2350,2352,2354,2356,2358,2360],{"class":212,"line":271},[210,2351,309],{"class":245},[210,2353,249],{"class":238},[210,2355,335],{"class":238},[210,2357,1618],{"class":338},[210,2359,443],{"class":238},[210,2361,2362],{"class":216},"  \u002F\u002F This will be in client bundle!\n",[210,2364,2365],{"class":212,"line":281},[210,2366,348],{"class":238},[210,2368,2369],{"class":212,"line":306},[210,2370,354],{"class":238},[210,2372,2373],{"class":212,"line":327},[210,2374,360],{"class":238},[210,2376,2377,2379],{"class":212,"line":345},[210,2378,366],{"class":238},[210,2380,369],{"class":234},[210,2382,2383],{"class":212,"line":351},[210,2384,1179],{"emptyLinePlaceholder":1178},[210,2386,2387],{"class":212,"line":357},[210,2388,2389],{"class":216},"\u002F\u002F ✅ GOOD - Secret stays on server\n",[210,2391,2392,2394,2396,2398,2400],{"class":212,"line":363},[210,2393,224],{"class":223},[210,2395,227],{"class":223},[210,2397,231],{"class":230},[210,2399,235],{"class":234},[210,2401,239],{"class":238},[210,2403,2404,2406,2408],{"class":212,"line":520},[210,2405,246],{"class":245},[210,2407,249],{"class":238},[210,2409,252],{"class":238},[210,2411,2412,2414,2416],{"class":212,"line":526},[210,2413,264],{"class":245},[210,2415,249],{"class":238},[210,2417,252],{"class":238},[210,2419,2420,2422,2424,2426,2428,2430,2432],{"class":212,"line":532},[210,2421,622],{"class":245},[210,2423,249],{"class":238},[210,2425,289],{"class":234},[210,2427,292],{"class":238},[210,2429,295],{"class":234},[210,2431,292],{"class":238},[210,2433,1495],{"class":234},[210,2435,2436],{"class":212,"line":537},[210,2437,354],{"class":238},[210,2439,2440],{"class":212,"line":542},[210,2441,360],{"class":238},[210,2443,2444,2446],{"class":212,"line":547},[210,2445,366],{"class":238},[210,2447,369],{"class":234},[192,2449,2451],{"id":2450},"use-environment-variables","Use Environment Variables",[200,2453,2455],{"className":1145,"code":2454,"language":1147,"meta":205,"style":205},"# .env\nNUXT_AUTH_PASSWORD_CLIENT_SECRET=your_secret_here\n\n# Add to .gitignore\n.env\n.env.local\n.env.*.local\n",[207,2456,2457,2461,2470,2474,2479,2484,2489],{"__ignoreMap":205},[210,2458,2459],{"class":212,"line":213},[210,2460,1154],{"class":216},[210,2462,2463,2465,2467],{"class":212,"line":220},[210,2464,322],{"class":234},[210,2466,1161],{"class":238},[210,2468,2469],{"class":338},"your_secret_here\n",[210,2471,2472],{"class":212,"line":242},[210,2473,1179],{"emptyLinePlaceholder":1178},[210,2475,2476],{"class":212,"line":255},[210,2477,2478],{"class":216},"# Add to .gitignore\n",[210,2480,2481],{"class":212,"line":261},[210,2482,2483],{"class":572},".env\n",[210,2485,2486],{"class":212,"line":271},[210,2487,2488],{"class":572},".env.local\n",[210,2490,2491],{"class":212,"line":281},[210,2492,2493],{"class":572},".env.*.local\n",[192,2495,2497],{"id":2496},"validate-at-build-time","Validate at Build Time",[200,2499,2501],{"className":202,"code":2500,"language":204,"meta":205,"style":205},"\u002F\u002F nuxt.config.ts\nif (!process.env.NUXT_AUTH_PASSWORD_CLIENT_SECRET) {\n  throw new Error('NUXT_AUTH_PASSWORD_CLIENT_SECRET environment variable is required')\n}\n",[207,2502,2503,2507,2529,2551],{"__ignoreMap":205},[210,2504,2505],{"class":212,"line":213},[210,2506,217],{"class":216},[210,2508,2509,2511,2513,2515,2518,2520,2522,2524,2527],{"class":212,"line":220},[210,2510,1772],{"class":223},[210,2512,1775],{"class":234},[210,2514,1778],{"class":238},[210,2516,2517],{"class":234},"process",[210,2519,292],{"class":238},[210,2521,295],{"class":234},[210,2523,292],{"class":238},[210,2525,2526],{"class":234},"NUXT_AUTH_PASSWORD_CLIENT_SECRET) ",[210,2528,239],{"class":238},[210,2530,2531,2534,2537,2540,2542,2544,2547,2549],{"class":212,"line":242},[210,2532,2533],{"class":223},"  throw",[210,2535,2536],{"class":238}," new",[210,2538,2539],{"class":230}," Error",[210,2541,235],{"class":245},[210,2543,443],{"class":238},[210,2545,2546],{"class":338},"NUXT_AUTH_PASSWORD_CLIENT_SECRET environment variable is required",[210,2548,443],{"class":238},[210,2550,369],{"class":245},[210,2552,2553],{"class":212,"line":255},[210,2554,663],{"class":238},[192,2556,2558],{"id":2557},"use-different-secrets-per-environment","Use Different Secrets per Environment",[200,2560,2562],{"className":1145,"code":2561,"language":1147,"meta":205,"style":205},"# .env.development\nNUXT_AUTH_PASSWORD_CLIENT_SECRET=dev_secret\n\n# .env.staging\nNUXT_AUTH_PASSWORD_CLIENT_SECRET=staging_secret\n\n# .env.production\nNUXT_AUTH_PASSWORD_CLIENT_SECRET=prod_secret\n",[207,2563,2564,2568,2577,2581,2586,2595,2599,2603],{"__ignoreMap":205},[210,2565,2566],{"class":212,"line":213},[210,2567,1211],{"class":216},[210,2569,2570,2572,2574],{"class":212,"line":220},[210,2571,322],{"class":234},[210,2573,1161],{"class":238},[210,2575,2576],{"class":338},"dev_secret\n",[210,2578,2579],{"class":212,"line":242},[210,2580,1179],{"emptyLinePlaceholder":1178},[210,2582,2583],{"class":212,"line":255},[210,2584,2585],{"class":216},"# .env.staging\n",[210,2587,2588,2590,2592],{"class":212,"line":261},[210,2589,322],{"class":234},[210,2591,1161],{"class":238},[210,2593,2594],{"class":338},"staging_secret\n",[210,2596,2597],{"class":212,"line":271},[210,2598,1179],{"emptyLinePlaceholder":1178},[210,2600,2601],{"class":212,"line":281},[210,2602,1184],{"class":216},[210,2604,2605,2607,2609],{"class":212,"line":306},[210,2606,322],{"class":234},[210,2608,1161],{"class":238},[210,2610,2611],{"class":338},"prod_secret\n",[180,2613,2615],{"id":2614},"common-patterns","Common Patterns",[192,2617,2619],{"id":2618},"multi-environment-configuration","Multi-Environment Configuration",[200,2621,2623],{"className":202,"code":2622,"language":204,"meta":205,"style":205},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  auth: {\n    provider: 'passport',\n    cookie: {\n      prefix: process.env.NODE_ENV === 'production' ? '__Secure-' : 'auth.',\n      options: {\n        secure: process.env.NODE_ENV === 'production',\n        httpOnly: process.env.NODE_ENV === 'production',\n        sameSite: process.env.NODE_ENV === 'production' ? 'Strict' : 'Lax'\n      }\n    }\n  },\n  runtimeConfig: {\n    secret: {\n      password: {\n        client_id: process.env.NUXT_AUTH_PASSWORD_CLIENT_ID,\n        client_secret: process.env.NUXT_AUTH_PASSWORD_CLIENT_SECRET,\n        grant_type: 'password'\n      }\n    }\n  }\n})\n",[207,2624,2625,2629,2641,2649,2663,2672,2718,2727,2754,2781,2823,2827,2831,2835,2843,2851,2859,2877,2895,2907,2911,2915,2919],{"__ignoreMap":205},[210,2626,2627],{"class":212,"line":213},[210,2628,217],{"class":216},[210,2630,2631,2633,2635,2637,2639],{"class":212,"line":220},[210,2632,224],{"class":223},[210,2634,227],{"class":223},[210,2636,231],{"class":230},[210,2638,235],{"class":234},[210,2640,239],{"class":238},[210,2642,2643,2645,2647],{"class":212,"line":242},[210,2644,693],{"class":245},[210,2646,249],{"class":238},[210,2648,252],{"class":238},[210,2650,2651,2653,2655,2657,2659,2661],{"class":212,"line":255},[210,2652,702],{"class":245},[210,2654,249],{"class":238},[210,2656,335],{"class":238},[210,2658,709],{"class":338},[210,2660,443],{"class":238},[210,2662,303],{"class":238},[210,2664,2665,2668,2670],{"class":212,"line":261},[210,2666,2667],{"class":245},"    cookie",[210,2669,249],{"class":238},[210,2671,252],{"class":238},[210,2673,2674,2677,2679,2681,2683,2685,2687,2689,2691,2693,2695,2697,2700,2702,2705,2707,2710,2712,2714,2716],{"class":212,"line":271},[210,2675,2676],{"class":245},"      prefix",[210,2678,249],{"class":238},[210,2680,289],{"class":234},[210,2682,292],{"class":238},[210,2684,295],{"class":234},[210,2686,292],{"class":238},[210,2688,1410],{"class":234},[210,2690,1413],{"class":238},[210,2692,335],{"class":238},[210,2694,1418],{"class":338},[210,2696,443],{"class":238},[210,2698,2699],{"class":238}," ?",[210,2701,335],{"class":238},[210,2703,2704],{"class":338},"__Secure-",[210,2706,443],{"class":238},[210,2708,2709],{"class":238}," :",[210,2711,335],{"class":238},[210,2713,466],{"class":338},[210,2715,443],{"class":238},[210,2717,303],{"class":238},[210,2719,2720,2723,2725],{"class":212,"line":281},[210,2721,2722],{"class":245},"      options",[210,2724,249],{"class":238},[210,2726,252],{"class":238},[210,2728,2729,2732,2734,2736,2738,2740,2742,2744,2746,2748,2750,2752],{"class":212,"line":306},[210,2730,2731],{"class":245},"        secure",[210,2733,249],{"class":238},[210,2735,289],{"class":234},[210,2737,292],{"class":238},[210,2739,295],{"class":234},[210,2741,292],{"class":238},[210,2743,1410],{"class":234},[210,2745,1413],{"class":238},[210,2747,335],{"class":238},[210,2749,1418],{"class":338},[210,2751,443],{"class":238},[210,2753,303],{"class":238},[210,2755,2756,2759,2761,2763,2765,2767,2769,2771,2773,2775,2777,2779],{"class":212,"line":327},[210,2757,2758],{"class":245},"        httpOnly",[210,2760,249],{"class":238},[210,2762,289],{"class":234},[210,2764,292],{"class":238},[210,2766,295],{"class":234},[210,2768,292],{"class":238},[210,2770,1410],{"class":234},[210,2772,1413],{"class":238},[210,2774,335],{"class":238},[210,2776,1418],{"class":338},[210,2778,443],{"class":238},[210,2780,303],{"class":238},[210,2782,2783,2786,2788,2790,2792,2794,2796,2798,2800,2802,2804,2806,2808,2810,2813,2815,2817,2819,2821],{"class":212,"line":345},[210,2784,2785],{"class":245},"        sameSite",[210,2787,249],{"class":238},[210,2789,289],{"class":234},[210,2791,292],{"class":238},[210,2793,295],{"class":234},[210,2795,292],{"class":238},[210,2797,1410],{"class":234},[210,2799,1413],{"class":238},[210,2801,335],{"class":238},[210,2803,1418],{"class":338},[210,2805,443],{"class":238},[210,2807,2699],{"class":238},[210,2809,335],{"class":238},[210,2811,2812],{"class":338},"Strict",[210,2814,443],{"class":238},[210,2816,2709],{"class":238},[210,2818,335],{"class":238},[210,2820,515],{"class":338},[210,2822,342],{"class":238},[210,2824,2825],{"class":212,"line":351},[210,2826,348],{"class":238},[210,2828,2829],{"class":212,"line":357},[210,2830,354],{"class":238},[210,2832,2833],{"class":212,"line":363},[210,2834,875],{"class":238},[210,2836,2837,2839,2841],{"class":212,"line":520},[210,2838,246],{"class":245},[210,2840,249],{"class":238},[210,2842,252],{"class":238},[210,2844,2845,2847,2849],{"class":212,"line":526},[210,2846,264],{"class":245},[210,2848,249],{"class":238},[210,2850,252],{"class":238},[210,2852,2853,2855,2857],{"class":212,"line":532},[210,2854,274],{"class":245},[210,2856,249],{"class":238},[210,2858,252],{"class":238},[210,2860,2861,2863,2865,2867,2869,2871,2873,2875],{"class":212,"line":537},[210,2862,284],{"class":245},[210,2864,249],{"class":238},[210,2866,289],{"class":234},[210,2868,292],{"class":238},[210,2870,295],{"class":234},[210,2872,292],{"class":238},[210,2874,300],{"class":234},[210,2876,303],{"class":238},[210,2878,2879,2881,2883,2885,2887,2889,2891,2893],{"class":212,"line":542},[210,2880,309],{"class":245},[210,2882,249],{"class":238},[210,2884,289],{"class":234},[210,2886,292],{"class":238},[210,2888,295],{"class":234},[210,2890,292],{"class":238},[210,2892,322],{"class":234},[210,2894,303],{"class":238},[210,2896,2897,2899,2901,2903,2905],{"class":212,"line":547},[210,2898,330],{"class":245},[210,2900,249],{"class":238},[210,2902,335],{"class":238},[210,2904,339],{"class":338},[210,2906,342],{"class":238},[210,2908,2909],{"class":212,"line":894},[210,2910,348],{"class":238},[210,2912,2913],{"class":212,"line":903},[210,2914,354],{"class":238},[210,2916,2917],{"class":212,"line":922},[210,2918,360],{"class":238},[210,2920,2921,2923],{"class":212,"line":941},[210,2922,366],{"class":238},[210,2924,369],{"class":234},[192,2926,2928],{"id":2927},"feature-flag-configuration","Feature Flag Configuration",[200,2930,2932],{"className":202,"code":2931,"language":204,"meta":205,"style":205},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  runtimeConfig: {\n    public: {\n      auth: {\n        provider: process.env.AUTH_PROVIDER || 'sanctum',\n        enable2FA: process.env.ENABLE_2FA === 'true'\n      }\n    }\n  }\n})\n",[207,2933,2934,2938,2950,2958,2966,2974,3002,3029,3033,3037,3041],{"__ignoreMap":205},[210,2935,2936],{"class":212,"line":213},[210,2937,217],{"class":216},[210,2939,2940,2942,2944,2946,2948],{"class":212,"line":220},[210,2941,224],{"class":223},[210,2943,227],{"class":223},[210,2945,231],{"class":230},[210,2947,235],{"class":234},[210,2949,239],{"class":238},[210,2951,2952,2954,2956],{"class":212,"line":242},[210,2953,246],{"class":245},[210,2955,249],{"class":238},[210,2957,252],{"class":238},[210,2959,2960,2962,2964],{"class":212,"line":255},[210,2961,410],{"class":245},[210,2963,249],{"class":238},[210,2965,252],{"class":238},[210,2967,2968,2970,2972],{"class":212,"line":261},[210,2969,424],{"class":245},[210,2971,249],{"class":238},[210,2973,252],{"class":238},[210,2975,2976,2978,2980,2982,2984,2986,2988,2991,2994,2996,2998,3000],{"class":212,"line":271},[210,2977,433],{"class":245},[210,2979,249],{"class":238},[210,2981,289],{"class":234},[210,2983,292],{"class":238},[210,2985,295],{"class":234},[210,2987,292],{"class":238},[210,2989,2990],{"class":234},"AUTH_PROVIDER ",[210,2992,2993],{"class":238},"||",[210,2995,335],{"class":238},[210,2997,440],{"class":338},[210,2999,443],{"class":238},[210,3001,303],{"class":238},[210,3003,3004,3007,3009,3011,3013,3015,3017,3020,3022,3024,3027],{"class":212,"line":281},[210,3005,3006],{"class":245},"        enable2FA",[210,3008,249],{"class":238},[210,3010,289],{"class":234},[210,3012,292],{"class":238},[210,3014,295],{"class":234},[210,3016,292],{"class":238},[210,3018,3019],{"class":234},"ENABLE_2FA ",[210,3021,1413],{"class":238},[210,3023,335],{"class":238},[210,3025,3026],{"class":338},"true",[210,3028,342],{"class":238},[210,3030,3031],{"class":212,"line":306},[210,3032,348],{"class":238},[210,3034,3035],{"class":212,"line":327},[210,3036,354],{"class":238},[210,3038,3039],{"class":212,"line":345},[210,3040,360],{"class":238},[210,3042,3043,3045],{"class":212,"line":351},[210,3044,366],{"class":238},[210,3046,369],{"class":234},[192,3048,3050],{"id":3049},"dynamic-endpoint-configuration","Dynamic Endpoint Configuration",[200,3052,3054],{"className":202,"code":3053,"language":204,"meta":205,"style":205},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  runtimeConfig: {\n    public: {\n      auth: {\n        apiBase: process.env.API_BASE_URL || 'https:\u002F\u002Fapi.example.com'\n      }\n    }\n  }\n})\n\n\u002F\u002F Use in strategy configuration\nstrategies: {\n  default: {\n    endpoints: {\n      login: { \n        url: `${useRuntimeConfig().public.auth.apiBase}\u002Flogin`,\n        method: 'post' \n      }\n    }\n  }\n}\n",[207,3055,3056,3060,3072,3080,3088,3096,3123,3127,3131,3135,3141,3145,3150,3158,3168,3177,3188,3225,3240,3244,3248,3252],{"__ignoreMap":205},[210,3057,3058],{"class":212,"line":213},[210,3059,217],{"class":216},[210,3061,3062,3064,3066,3068,3070],{"class":212,"line":220},[210,3063,224],{"class":223},[210,3065,227],{"class":223},[210,3067,231],{"class":230},[210,3069,235],{"class":234},[210,3071,239],{"class":238},[210,3073,3074,3076,3078],{"class":212,"line":242},[210,3075,246],{"class":245},[210,3077,249],{"class":238},[210,3079,252],{"class":238},[210,3081,3082,3084,3086],{"class":212,"line":255},[210,3083,410],{"class":245},[210,3085,249],{"class":238},[210,3087,252],{"class":238},[210,3089,3090,3092,3094],{"class":212,"line":261},[210,3091,424],{"class":245},[210,3093,249],{"class":238},[210,3095,252],{"class":238},[210,3097,3098,3101,3103,3105,3107,3109,3111,3114,3116,3118,3121],{"class":212,"line":271},[210,3099,3100],{"class":245},"        apiBase",[210,3102,249],{"class":238},[210,3104,289],{"class":234},[210,3106,292],{"class":238},[210,3108,295],{"class":234},[210,3110,292],{"class":238},[210,3112,3113],{"class":234},"API_BASE_URL ",[210,3115,2993],{"class":238},[210,3117,335],{"class":238},[210,3119,3120],{"class":338},"https:\u002F\u002Fapi.example.com",[210,3122,342],{"class":238},[210,3124,3125],{"class":212,"line":281},[210,3126,348],{"class":238},[210,3128,3129],{"class":212,"line":306},[210,3130,354],{"class":238},[210,3132,3133],{"class":212,"line":327},[210,3134,360],{"class":238},[210,3136,3137,3139],{"class":212,"line":345},[210,3138,366],{"class":238},[210,3140,369],{"class":234},[210,3142,3143],{"class":212,"line":351},[210,3144,1179],{"emptyLinePlaceholder":1178},[210,3146,3147],{"class":212,"line":357},[210,3148,3149],{"class":216},"\u002F\u002F Use in strategy configuration\n",[210,3151,3152,3154,3156],{"class":212,"line":363},[210,3153,2085],{"class":572},[210,3155,249],{"class":238},[210,3157,252],{"class":238},[210,3159,3160,3163,3166],{"class":212,"line":520},[210,3161,3162],{"class":223},"  default",[210,3164,3165],{"class":245},": ",[210,3167,239],{"class":238},[210,3169,3170,3173,3175],{"class":212,"line":526},[210,3171,3172],{"class":245},"    endpoints",[210,3174,249],{"class":238},[210,3176,252],{"class":238},[210,3178,3179,3182,3184,3186],{"class":212,"line":532},[210,3180,3181],{"class":245},"      login",[210,3183,249],{"class":238},[210,3185,749],{"class":238},[210,3187,1423],{"class":245},[210,3189,3190,3193,3195,3198,3201,3204,3206,3208,3210,3212,3214,3217,3219,3221,3223],{"class":212,"line":537},[210,3191,3192],{"class":245},"        url",[210,3194,249],{"class":238},[210,3196,3197],{"class":238}," `${",[210,3199,3200],{"class":230},"useRuntimeConfig",[210,3202,3203],{"class":234},"()",[210,3205,292],{"class":238},[210,3207,1708],{"class":234},[210,3209,292],{"class":238},[210,3211,112],{"class":234},[210,3213,292],{"class":238},[210,3215,3216],{"class":234},"apiBase",[210,3218,366],{"class":238},[210,3220,840],{"class":338},[210,3222,2109],{"class":238},[210,3224,303],{"class":238},[210,3226,3227,3230,3232,3234,3236,3238],{"class":212,"line":542},[210,3228,3229],{"class":245},"        method",[210,3231,249],{"class":238},[210,3233,335],{"class":238},[210,3235,774],{"class":338},[210,3237,443],{"class":238},[210,3239,1423],{"class":245},[210,3241,3242],{"class":212,"line":547},[210,3243,348],{"class":238},[210,3245,3246],{"class":212,"line":894},[210,3247,354],{"class":238},[210,3249,3250],{"class":212,"line":903},[210,3251,360],{"class":238},[210,3253,3254],{"class":212,"line":922},[210,3255,663],{"class":238},[180,3257,3259],{"id":3258},"deployment-configuration","Deployment Configuration",[192,3261,3263],{"id":3262},"vercel","Vercel",[200,3265,3267],{"className":1145,"code":3266,"language":1147,"meta":205,"style":205},"# Set environment variables in Vercel dashboard\nNUXT_AUTH_PASSWORD_CLIENT_ID=your_client_id\nNUXT_AUTH_PASSWORD_CLIENT_SECRET=your_client_secret\n",[207,3268,3269,3274,3282],{"__ignoreMap":205},[210,3270,3271],{"class":212,"line":213},[210,3272,3273],{"class":216},"# Set environment variables in Vercel dashboard\n",[210,3275,3276,3278,3280],{"class":212,"line":220},[210,3277,300],{"class":234},[210,3279,1161],{"class":238},[210,3281,1164],{"class":338},[210,3283,3284,3286,3288],{"class":212,"line":242},[210,3285,322],{"class":234},[210,3287,1161],{"class":238},[210,3289,1173],{"class":338},[192,3291,3293],{"id":3292},"netlify","Netlify",[200,3295,3297],{"className":1145,"code":3296,"language":1147,"meta":205,"style":205},"# Set in Netlify environment variables\nNUXT_AUTH_PASSWORD_CLIENT_ID=your_client_id\nNUXT_AUTH_PASSWORD_CLIENT_SECRET=your_client_secret\n",[207,3298,3299,3304,3312],{"__ignoreMap":205},[210,3300,3301],{"class":212,"line":213},[210,3302,3303],{"class":216},"# Set in Netlify environment variables\n",[210,3305,3306,3308,3310],{"class":212,"line":220},[210,3307,300],{"class":234},[210,3309,1161],{"class":238},[210,3311,1164],{"class":338},[210,3313,3314,3316,3318],{"class":212,"line":242},[210,3315,322],{"class":234},[210,3317,1161],{"class":238},[210,3319,1173],{"class":338},[192,3321,3323],{"id":3322},"docker","Docker",[200,3325,3329],{"className":3326,"code":3327,"language":3328,"meta":205,"style":205},"language-dockerfile shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Dockerfile\nENV NUXT_AUTH_PASSWORD_CLIENT_ID=your_client_id\n# Secret injected at runtime via docker-compose.yml or deployment platform\n","dockerfile",[207,3330,3331,3336,3341],{"__ignoreMap":205},[210,3332,3333],{"class":212,"line":213},[210,3334,3335],{},"# Dockerfile\n",[210,3337,3338],{"class":212,"line":220},[210,3339,3340],{},"ENV NUXT_AUTH_PASSWORD_CLIENT_ID=your_client_id\n",[210,3342,3343],{"class":212,"line":242},[210,3344,3345],{},"# Secret injected at runtime via docker-compose.yml or deployment platform\n",[200,3347,3351],{"className":3348,"code":3349,"language":3350,"meta":205,"style":205},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# docker-compose.yml\nservices:\n  app:\n    environment:\n      - NUXT_AUTH_PASSWORD_CLIENT_ID=${NUXT_AUTH_PASSWORD_CLIENT_ID}\n      - NUXT_AUTH_PASSWORD_CLIENT_SECRET=${NUXT_AUTH_PASSWORD_CLIENT_SECRET}\n","yaml",[207,3352,3353,3358,3366,3373,3380,3388],{"__ignoreMap":205},[210,3354,3355],{"class":212,"line":213},[210,3356,3357],{"class":216},"# docker-compose.yml\n",[210,3359,3360,3363],{"class":212,"line":220},[210,3361,3362],{"class":245},"services",[210,3364,3365],{"class":238},":\n",[210,3367,3368,3371],{"class":212,"line":242},[210,3369,3370],{"class":245},"  app",[210,3372,3365],{"class":238},[210,3374,3375,3378],{"class":212,"line":255},[210,3376,3377],{"class":245},"    environment",[210,3379,3365],{"class":238},[210,3381,3382,3385],{"class":212,"line":261},[210,3383,3384],{"class":238},"      -",[210,3386,3387],{"class":338}," NUXT_AUTH_PASSWORD_CLIENT_ID=${NUXT_AUTH_PASSWORD_CLIENT_ID}\n",[210,3389,3390,3392],{"class":212,"line":271},[210,3391,3384],{"class":238},[210,3393,3394],{"class":338}," NUXT_AUTH_PASSWORD_CLIENT_SECRET=${NUXT_AUTH_PASSWORD_CLIENT_SECRET}\n",[192,3396,3398],{"id":3397},"traditional-server","Traditional Server",[200,3400,3402],{"className":1145,"code":3401,"language":1147,"meta":205,"style":205},"# Set environment variables\nexport NUXT_AUTH_PASSWORD_CLIENT_ID=your_client_id\nexport NUXT_AUTH_PASSWORD_CLIENT_SECRET=your_client_secret\n\n# Or use .env file\ncp .env.example .env\n# Edit .env with your values\n",[207,3403,3404,3409,3420,3431,3435,3440,3451],{"__ignoreMap":205},[210,3405,3406],{"class":212,"line":213},[210,3407,3408],{"class":216},"# Set environment variables\n",[210,3410,3411,3413,3416,3418],{"class":212,"line":220},[210,3412,224],{"class":1582},[210,3414,3415],{"class":234}," NUXT_AUTH_PASSWORD_CLIENT_ID",[210,3417,1161],{"class":238},[210,3419,1164],{"class":234},[210,3421,3422,3424,3427,3429],{"class":212,"line":242},[210,3423,224],{"class":1582},[210,3425,3426],{"class":234}," NUXT_AUTH_PASSWORD_CLIENT_SECRET",[210,3428,1161],{"class":238},[210,3430,1173],{"class":234},[210,3432,3433],{"class":212,"line":255},[210,3434,1179],{"emptyLinePlaceholder":1178},[210,3436,3437],{"class":212,"line":261},[210,3438,3439],{"class":216},"# Or use .env file\n",[210,3441,3442,3445,3448],{"class":212,"line":271},[210,3443,3444],{"class":572},"cp",[210,3446,3447],{"class":338}," .env.example",[210,3449,3450],{"class":338}," .env\n",[210,3452,3453],{"class":212,"line":281},[210,3454,3455],{"class":216},"# Edit .env with your values\n",[180,3457,3459],{"id":3458},"troubleshooting","Troubleshooting",[192,3461,3463],{"id":3462},"config-not-loading","Config Not Loading",[176,3465,3466,3469],{},[1760,3467,3468],{},"Problem",": Runtime config not available",[176,3471,3472,249],{},[1760,3473,2158],{},[1754,3475,3476,3479,3485,3488],{},[1757,3477,3478],{},"Restart dev server after config changes",[1757,3480,3481,3482],{},"Check that config is in ",[207,3483,3484],{},"nuxt.config.ts",[1757,3486,3487],{},"Verify environment variables are set",[1757,3489,3490],{},"Check for typos in config keys",[192,3492,3494],{"id":3493},"secrets-not-working","Secrets Not Working",[176,3496,3497,3499],{},[1760,3498,3468],{},": Passport secrets not being used",[176,3501,3502,249],{},[1760,3503,2158],{},[1754,3505,3506,3513,3516,3519],{},[1757,3507,3508,3509,3512],{},"Verify ",[207,3510,3511],{},"runtimeConfig.secret"," structure",[1757,3514,3515],{},"Check that strategy names match",[1757,3517,3518],{},"Ensure environment variables are set",[1757,3520,3521],{},"Check module logs for validation errors",[192,3523,3525],{"id":3524},"environment-variables-not-available","Environment Variables Not Available",[176,3527,3528,3165,3530,3533],{},[1760,3529,3468],{},[207,3531,3532],{},"process.env"," values are undefined",[176,3535,3536,249],{},[1760,3537,2158],{},[1754,3539,3540,3547,3553,3556],{},[1757,3541,3542,3543,3546],{},"Ensure ",[207,3544,3545],{},".env"," file exists",[1757,3548,3549,3550,3552],{},"Check that ",[207,3551,3545],{}," is in project root",[1757,3554,3555],{},"Verify variable names match",[1757,3557,3558],{},"Restart dev server after adding variables",[192,3560,3562],{"id":3561},"public-config-exposing-secrets","Public Config Exposing Secrets",[176,3564,3565,3567],{},[1760,3566,3468],{},": Sensitive data in client bundle",[176,3569,3570,249],{},[1760,3571,2158],{},[1754,3573,3574,3582,3585,3592],{},[1757,3575,3576,3577,3579,3580],{},"Move secrets from ",[207,3578,1708],{}," to root ",[207,3581,573],{},[1757,3583,3584],{},"Check browser network tab for exposed data",[1757,3586,3587,3588,3591],{},"Use ",[207,3589,3590],{},"nuxi build"," and inspect bundle",[1757,3593,3594,3595,3598],{},"Review ",[207,3596,3597],{},"runtimeConfig.public"," contents",[180,3600,3602],{"id":3601},"best-practices-summary","Best Practices Summary",[3604,3605,3606,3612,3618,3624,3630,3642,3648,3654,3660,3666],"ul",{},[1757,3607,3608,3611],{},[1760,3609,3610],{},"Always use runtime config for secrets",": Never put secrets in public config",[1757,3613,3614,3617],{},[1760,3615,3616],{},"Use environment variables",": Keep secrets out of code",[1757,3619,3620,3623],{},[1760,3621,3622],{},"Validate at build time",": Fail fast if config is missing",[1757,3625,3626,3629],{},[1760,3627,3628],{},"Different environments",": Use different secrets per environment",[1757,3631,3632,3635,3636,3638,3639],{},[1760,3633,3634],{},"Never commit secrets",": Add ",[207,3637,3545],{}," to ",[207,3640,3641],{},".gitignore",[1757,3643,3644,3647],{},[1760,3645,3646],{},"Rotate secrets regularly",": Update secrets periodically",[1757,3649,3650,3653],{},[1760,3651,3652],{},"Use strong secrets",": Generate random, complex secrets",[1757,3655,3656,3659],{},[1760,3657,3658],{},"Monitor for leaks",": Check bundles and network traffic",[1757,3661,3662,3665],{},[1760,3663,3664],{},"Document config",": Document required environment variables",[1757,3667,3668,3671],{},[1760,3669,3670],{},"Use type safety",": Leverage TypeScript for config validation",[180,3673,3675],{"id":3674},"configuration-template","Configuration Template",[192,3677,3679],{"id":3678},"complete-example","Complete Example",[200,3681,3683],{"className":202,"code":3682,"language":204,"meta":205,"style":205},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  \u002F\u002F Auth module configuration (public)\n  auth: {\n    provider: process.env.AUTH_PROVIDER || 'sanctum',\n    cookie: {\n      prefix: process.env.NODE_ENV === 'production' ? '__Secure-' : 'auth.',\n      options: {\n        httpOnly: process.env.NODE_ENV === 'production',\n        secure: process.env.NODE_ENV === 'production',\n        sameSite: process.env.NODE_ENV === 'production' ? 'Strict' : 'Lax',\n        priority: 'high'\n      }\n    },\n    strategies: {\n      default: {\n        endpoints: {\n          login: { url: '\u002Flogin', method: 'post' },\n          user: { url: '\u002Fapi\u002Fuser', method: 'get' },\n          logout: { url: '\u002Flogout', method: 'post' }\n        },\n        redirect: {\n          login: '\u002Flogin',\n          logout: '\u002F',\n          home: '\u002Fdashboard'\n        }\n      }\n    }\n  },\n\n  \u002F\u002F Runtime configuration\n  runtimeConfig: {\n    \u002F\u002F Server-side only (secrets)\n    secret: {\n      password: {\n        client_id: process.env.NUXT_AUTH_PASSWORD_CLIENT_ID,\n        client_secret: process.env.NUXT_AUTH_PASSWORD_CLIENT_SECRET,\n        grant_type: 'password'\n      }\n    },\n\n    \u002F\u002F Public (client and server)\n    public: {\n      auth: {\n        provider: process.env.AUTH_PROVIDER || 'sanctum',\n        apiBase: process.env.API_BASE_URL || 'https:\u002F\u002Fapi.example.com'\n      }\n    }\n  }\n})\n",[207,3684,3685,3689,3701,3706,3714,3740,3748,3790,3798,3824,3850,3892,3906,3910,3914,3922,3931,3939,3971,4003,4036,4040,4048,4062,4076,4090,4094,4098,4103,4108,4113,4119,4128,4134,4143,4152,4171,4190,4203,4208,4213,4218,4224,4233,4242,4269,4294,4299,4304,4309],{"__ignoreMap":205},[210,3686,3687],{"class":212,"line":213},[210,3688,217],{"class":216},[210,3690,3691,3693,3695,3697,3699],{"class":212,"line":220},[210,3692,224],{"class":223},[210,3694,227],{"class":223},[210,3696,231],{"class":230},[210,3698,235],{"class":234},[210,3700,239],{"class":238},[210,3702,3703],{"class":212,"line":242},[210,3704,3705],{"class":216},"  \u002F\u002F Auth module configuration (public)\n",[210,3707,3708,3710,3712],{"class":212,"line":255},[210,3709,693],{"class":245},[210,3711,249],{"class":238},[210,3713,252],{"class":238},[210,3715,3716,3718,3720,3722,3724,3726,3728,3730,3732,3734,3736,3738],{"class":212,"line":261},[210,3717,702],{"class":245},[210,3719,249],{"class":238},[210,3721,289],{"class":234},[210,3723,292],{"class":238},[210,3725,295],{"class":234},[210,3727,292],{"class":238},[210,3729,2990],{"class":234},[210,3731,2993],{"class":238},[210,3733,335],{"class":238},[210,3735,440],{"class":338},[210,3737,443],{"class":238},[210,3739,303],{"class":238},[210,3741,3742,3744,3746],{"class":212,"line":271},[210,3743,2667],{"class":245},[210,3745,249],{"class":238},[210,3747,252],{"class":238},[210,3749,3750,3752,3754,3756,3758,3760,3762,3764,3766,3768,3770,3772,3774,3776,3778,3780,3782,3784,3786,3788],{"class":212,"line":281},[210,3751,2676],{"class":245},[210,3753,249],{"class":238},[210,3755,289],{"class":234},[210,3757,292],{"class":238},[210,3759,295],{"class":234},[210,3761,292],{"class":238},[210,3763,1410],{"class":234},[210,3765,1413],{"class":238},[210,3767,335],{"class":238},[210,3769,1418],{"class":338},[210,3771,443],{"class":238},[210,3773,2699],{"class":238},[210,3775,335],{"class":238},[210,3777,2704],{"class":338},[210,3779,443],{"class":238},[210,3781,2709],{"class":238},[210,3783,335],{"class":238},[210,3785,466],{"class":338},[210,3787,443],{"class":238},[210,3789,303],{"class":238},[210,3791,3792,3794,3796],{"class":212,"line":306},[210,3793,2722],{"class":245},[210,3795,249],{"class":238},[210,3797,252],{"class":238},[210,3799,3800,3802,3804,3806,3808,3810,3812,3814,3816,3818,3820,3822],{"class":212,"line":327},[210,3801,2758],{"class":245},[210,3803,249],{"class":238},[210,3805,289],{"class":234},[210,3807,292],{"class":238},[210,3809,295],{"class":234},[210,3811,292],{"class":238},[210,3813,1410],{"class":234},[210,3815,1413],{"class":238},[210,3817,335],{"class":238},[210,3819,1418],{"class":338},[210,3821,443],{"class":238},[210,3823,303],{"class":238},[210,3825,3826,3828,3830,3832,3834,3836,3838,3840,3842,3844,3846,3848],{"class":212,"line":345},[210,3827,2731],{"class":245},[210,3829,249],{"class":238},[210,3831,289],{"class":234},[210,3833,292],{"class":238},[210,3835,295],{"class":234},[210,3837,292],{"class":238},[210,3839,1410],{"class":234},[210,3841,1413],{"class":238},[210,3843,335],{"class":238},[210,3845,1418],{"class":338},[210,3847,443],{"class":238},[210,3849,303],{"class":238},[210,3851,3852,3854,3856,3858,3860,3862,3864,3866,3868,3870,3872,3874,3876,3878,3880,3882,3884,3886,3888,3890],{"class":212,"line":351},[210,3853,2785],{"class":245},[210,3855,249],{"class":238},[210,3857,289],{"class":234},[210,3859,292],{"class":238},[210,3861,295],{"class":234},[210,3863,292],{"class":238},[210,3865,1410],{"class":234},[210,3867,1413],{"class":238},[210,3869,335],{"class":238},[210,3871,1418],{"class":338},[210,3873,443],{"class":238},[210,3875,2699],{"class":238},[210,3877,335],{"class":238},[210,3879,2812],{"class":338},[210,3881,443],{"class":238},[210,3883,2709],{"class":238},[210,3885,335],{"class":238},[210,3887,515],{"class":338},[210,3889,443],{"class":238},[210,3891,303],{"class":238},[210,3893,3894,3897,3899,3901,3904],{"class":212,"line":357},[210,3895,3896],{"class":245},"        priority",[210,3898,249],{"class":238},[210,3900,335],{"class":238},[210,3902,3903],{"class":338},"high",[210,3905,342],{"class":238},[210,3907,3908],{"class":212,"line":363},[210,3909,348],{"class":238},[210,3911,3912],{"class":212,"line":520},[210,3913,1060],{"class":238},[210,3915,3916,3918,3920],{"class":212,"line":526},[210,3917,718],{"class":245},[210,3919,249],{"class":238},[210,3921,252],{"class":238},[210,3923,3924,3927,3929],{"class":212,"line":532},[210,3925,3926],{"class":245},"      default",[210,3928,249],{"class":238},[210,3930,252],{"class":238},[210,3932,3933,3935,3937],{"class":212,"line":537},[210,3934,735],{"class":245},[210,3936,249],{"class":238},[210,3938,252],{"class":238},[210,3940,3941,3943,3945,3947,3949,3951,3953,3955,3957,3959,3961,3963,3965,3967,3969],{"class":212,"line":542},[210,3942,744],{"class":245},[210,3944,249],{"class":238},[210,3946,749],{"class":238},[210,3948,752],{"class":245},[210,3950,249],{"class":238},[210,3952,335],{"class":238},[210,3954,840],{"class":338},[210,3956,443],{"class":238},[210,3958,764],{"class":238},[210,3960,767],{"class":245},[210,3962,249],{"class":238},[210,3964,335],{"class":238},[210,3966,774],{"class":338},[210,3968,443],{"class":238},[210,3970,779],{"class":238},[210,3972,3973,3975,3977,3979,3981,3983,3985,3987,3989,3991,3993,3995,3997,3999,4001],{"class":212,"line":547},[210,3974,784],{"class":245},[210,3976,249],{"class":238},[210,3978,749],{"class":238},[210,3980,752],{"class":245},[210,3982,249],{"class":238},[210,3984,335],{"class":238},[210,3986,797],{"class":338},[210,3988,443],{"class":238},[210,3990,764],{"class":238},[210,3992,767],{"class":245},[210,3994,249],{"class":238},[210,3996,335],{"class":238},[210,3998,810],{"class":338},[210,4000,443],{"class":238},[210,4002,779],{"class":238},[210,4004,4005,4007,4009,4011,4013,4015,4017,4020,4022,4024,4026,4028,4030,4032,4034],{"class":212,"line":894},[210,4006,849],{"class":245},[210,4008,249],{"class":238},[210,4010,749],{"class":238},[210,4012,752],{"class":245},[210,4014,249],{"class":238},[210,4016,335],{"class":238},[210,4018,4019],{"class":338},"\u002Flogout",[210,4021,443],{"class":238},[210,4023,764],{"class":238},[210,4025,767],{"class":245},[210,4027,249],{"class":238},[210,4029,335],{"class":238},[210,4031,774],{"class":338},[210,4033,443],{"class":238},[210,4035,815],{"class":238},[210,4037,4038],{"class":212,"line":903},[210,4039,820],{"class":238},[210,4041,4042,4044,4046],{"class":212,"line":922},[210,4043,825],{"class":245},[210,4045,249],{"class":238},[210,4047,252],{"class":238},[210,4049,4050,4052,4054,4056,4058,4060],{"class":212,"line":941},[210,4051,744],{"class":245},[210,4053,249],{"class":238},[210,4055,335],{"class":238},[210,4057,840],{"class":338},[210,4059,443],{"class":238},[210,4061,303],{"class":238},[210,4063,4064,4066,4068,4070,4072,4074],{"class":212,"line":954},[210,4065,849],{"class":245},[210,4067,249],{"class":238},[210,4069,335],{"class":238},[210,4071,856],{"class":338},[210,4073,443],{"class":238},[210,4075,303],{"class":238},[210,4077,4078,4081,4083,4085,4088],{"class":212,"line":959},[210,4079,4080],{"class":245},"          home",[210,4082,249],{"class":238},[210,4084,335],{"class":238},[210,4086,4087],{"class":338},"\u002Fdashboard",[210,4089,342],{"class":238},[210,4091,4092],{"class":212,"line":964},[210,4093,529],{"class":238},[210,4095,4096],{"class":212,"line":969},[210,4097,348],{"class":238},[210,4099,4101],{"class":212,"line":4100},28,[210,4102,354],{"class":238},[210,4104,4106],{"class":212,"line":4105},29,[210,4107,875],{"class":238},[210,4109,4111],{"class":212,"line":4110},30,[210,4112,1179],{"emptyLinePlaceholder":1178},[210,4114,4116],{"class":212,"line":4115},31,[210,4117,4118],{"class":216},"  \u002F\u002F Runtime configuration\n",[210,4120,4122,4124,4126],{"class":212,"line":4121},32,[210,4123,246],{"class":245},[210,4125,249],{"class":238},[210,4127,252],{"class":238},[210,4129,4131],{"class":212,"line":4130},33,[210,4132,4133],{"class":216},"    \u002F\u002F Server-side only (secrets)\n",[210,4135,4137,4139,4141],{"class":212,"line":4136},34,[210,4138,264],{"class":245},[210,4140,249],{"class":238},[210,4142,252],{"class":238},[210,4144,4146,4148,4150],{"class":212,"line":4145},35,[210,4147,274],{"class":245},[210,4149,249],{"class":238},[210,4151,252],{"class":238},[210,4153,4155,4157,4159,4161,4163,4165,4167,4169],{"class":212,"line":4154},36,[210,4156,284],{"class":245},[210,4158,249],{"class":238},[210,4160,289],{"class":234},[210,4162,292],{"class":238},[210,4164,295],{"class":234},[210,4166,292],{"class":238},[210,4168,300],{"class":234},[210,4170,303],{"class":238},[210,4172,4174,4176,4178,4180,4182,4184,4186,4188],{"class":212,"line":4173},37,[210,4175,309],{"class":245},[210,4177,249],{"class":238},[210,4179,289],{"class":234},[210,4181,292],{"class":238},[210,4183,295],{"class":234},[210,4185,292],{"class":238},[210,4187,322],{"class":234},[210,4189,303],{"class":238},[210,4191,4193,4195,4197,4199,4201],{"class":212,"line":4192},38,[210,4194,330],{"class":245},[210,4196,249],{"class":238},[210,4198,335],{"class":238},[210,4200,339],{"class":338},[210,4202,342],{"class":238},[210,4204,4206],{"class":212,"line":4205},39,[210,4207,348],{"class":238},[210,4209,4211],{"class":212,"line":4210},40,[210,4212,1060],{"class":238},[210,4214,4216],{"class":212,"line":4215},41,[210,4217,1179],{"emptyLinePlaceholder":1178},[210,4219,4221],{"class":212,"line":4220},42,[210,4222,4223],{"class":216},"    \u002F\u002F Public (client and server)\n",[210,4225,4227,4229,4231],{"class":212,"line":4226},43,[210,4228,410],{"class":245},[210,4230,249],{"class":238},[210,4232,252],{"class":238},[210,4234,4236,4238,4240],{"class":212,"line":4235},44,[210,4237,424],{"class":245},[210,4239,249],{"class":238},[210,4241,252],{"class":238},[210,4243,4245,4247,4249,4251,4253,4255,4257,4259,4261,4263,4265,4267],{"class":212,"line":4244},45,[210,4246,433],{"class":245},[210,4248,249],{"class":238},[210,4250,289],{"class":234},[210,4252,292],{"class":238},[210,4254,295],{"class":234},[210,4256,292],{"class":238},[210,4258,2990],{"class":234},[210,4260,2993],{"class":238},[210,4262,335],{"class":238},[210,4264,440],{"class":338},[210,4266,443],{"class":238},[210,4268,303],{"class":238},[210,4270,4272,4274,4276,4278,4280,4282,4284,4286,4288,4290,4292],{"class":212,"line":4271},46,[210,4273,3100],{"class":245},[210,4275,249],{"class":238},[210,4277,289],{"class":234},[210,4279,292],{"class":238},[210,4281,295],{"class":234},[210,4283,292],{"class":238},[210,4285,3113],{"class":234},[210,4287,2993],{"class":238},[210,4289,335],{"class":238},[210,4291,3120],{"class":338},[210,4293,342],{"class":238},[210,4295,4297],{"class":212,"line":4296},47,[210,4298,348],{"class":238},[210,4300,4302],{"class":212,"line":4301},48,[210,4303,354],{"class":238},[210,4305,4307],{"class":212,"line":4306},49,[210,4308,360],{"class":238},[210,4310,4312,4314],{"class":212,"line":4311},50,[210,4313,366],{"class":238},[210,4315,369],{"class":234},[192,4317,4319],{"id":4318},"environment-file-template","Environment File Template",[200,4321,4323],{"className":1145,"code":4322,"language":1147,"meta":205,"style":205},"# .env.example\nAUTH_PROVIDER=sanctum\nAPI_BASE_URL=https:\u002F\u002Fapi.example.com\n\n# Passport (if using passport provider)\nNUXT_AUTH_PASSWORD_CLIENT_ID=your_client_id\nNUXT_AUTH_PASSWORD_CLIENT_SECRET=your_client_secret\n\n# Sanctum (if using sanctum provider)\nSANCTUM_CSRF_URL=\u002Fsanctum\u002Fcsrf-cookie\n",[207,4324,4325,4330,4340,4350,4354,4359,4367,4375,4379,4384],{"__ignoreMap":205},[210,4326,4327],{"class":212,"line":213},[210,4328,4329],{"class":216},"# .env.example\n",[210,4331,4332,4335,4337],{"class":212,"line":220},[210,4333,4334],{"class":234},"AUTH_PROVIDER",[210,4336,1161],{"class":238},[210,4338,4339],{"class":338},"sanctum\n",[210,4341,4342,4345,4347],{"class":212,"line":242},[210,4343,4344],{"class":234},"API_BASE_URL",[210,4346,1161],{"class":238},[210,4348,4349],{"class":338},"https:\u002F\u002Fapi.example.com\n",[210,4351,4352],{"class":212,"line":255},[210,4353,1179],{"emptyLinePlaceholder":1178},[210,4355,4356],{"class":212,"line":261},[210,4357,4358],{"class":216},"# Passport (if using passport provider)\n",[210,4360,4361,4363,4365],{"class":212,"line":271},[210,4362,300],{"class":234},[210,4364,1161],{"class":238},[210,4366,1164],{"class":338},[210,4368,4369,4371,4373],{"class":212,"line":281},[210,4370,322],{"class":234},[210,4372,1161],{"class":238},[210,4374,1173],{"class":338},[210,4376,4377],{"class":212,"line":306},[210,4378,1179],{"emptyLinePlaceholder":1178},[210,4380,4381],{"class":212,"line":327},[210,4382,4383],{"class":216},"# Sanctum (if using sanctum provider)\n",[210,4385,4386,4389,4391],{"class":212,"line":345},[210,4387,4388],{"class":234},"SANCTUM_CSRF_URL",[210,4390,1161],{"class":238},[210,4392,4393],{"class":338},"\u002Fsanctum\u002Fcsrf-cookie\n",[4395,4396,4397],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":205,"searchDepth":213,"depth":220,"links":4399},[4400,4401,4405,4410,4415,4419,4423,4429,4434,4440,4446,4447],{"id":182,"depth":220,"text":183},{"id":189,"depth":220,"text":190,"children":4402},[4403,4404],{"id":194,"depth":242,"text":195},{"id":372,"depth":242,"text":373},{"id":554,"depth":220,"text":555,"children":4406},[4407,4408,4409],{"id":561,"depth":242,"text":562},{"id":666,"depth":242,"text":667},{"id":976,"depth":242,"text":977},{"id":1134,"depth":220,"text":1135,"children":4411},[4412,4413,4414],{"id":1138,"depth":242,"text":1139},{"id":1232,"depth":242,"text":1233},{"id":1347,"depth":242,"text":1348},{"id":1544,"depth":220,"text":1545,"children":4416},[4417,4418],{"id":1548,"depth":242,"text":1549},{"id":1667,"depth":242,"text":1668},{"id":1741,"depth":220,"text":1742,"children":4420},[4421,4422],{"id":1748,"depth":242,"text":1749},{"id":2139,"depth":242,"text":2140},{"id":2295,"depth":220,"text":2296,"children":4424},[4425,4426,4427,4428],{"id":2299,"depth":242,"text":2300},{"id":2450,"depth":242,"text":2451},{"id":2496,"depth":242,"text":2497},{"id":2557,"depth":242,"text":2558},{"id":2614,"depth":220,"text":2615,"children":4430},[4431,4432,4433],{"id":2618,"depth":242,"text":2619},{"id":2927,"depth":242,"text":2928},{"id":3049,"depth":242,"text":3050},{"id":3258,"depth":220,"text":3259,"children":4435},[4436,4437,4438,4439],{"id":3262,"depth":242,"text":3263},{"id":3292,"depth":242,"text":3293},{"id":3322,"depth":242,"text":3323},{"id":3397,"depth":242,"text":3398},{"id":3458,"depth":220,"text":3459,"children":4441},[4442,4443,4444,4445],{"id":3462,"depth":242,"text":3463},{"id":3493,"depth":242,"text":3494},{"id":3524,"depth":242,"text":3525},{"id":3561,"depth":242,"text":3562},{"id":3601,"depth":220,"text":3602},{"id":3674,"depth":220,"text":3675,"children":4448},[4449,4450],{"id":3678,"depth":242,"text":3679},{"id":4318,"depth":242,"text":4319},"Runtime config and secrets management for Nuxt Umbu","md",null,{},{"icon":169},{"title":166,"description":4451},"h2EeAsLYjCFwLX6qUy478iGjCk1utTECRT2AhBRWdMk",[4459,4453],{"title":162,"path":163,"stem":164,"description":4460,"icon":37,"children":-1},"CSRF protection and two-factor authentication (2FA) implementation",1785126615979]