[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f30r277ag21rfj":3,"module-auth-utils":2411,"versions":13570},[4,1159,1643,2205],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":106},"Docs","i-lucide-book-marked","\u002Fdocs\u002F5.x","1.getting-started\u002F01.introduction",[10,107,258,493,1017,1054,1105],{"title":11,"titleTemplate":12,"icon":13,"path":14,"stem":8,"children":15,"page":106},"Get Started","%s · Get Started with Nuxt","i-lucide-rocket","\u002Fdocs\u002F5.x\u002Fgetting-started",[16,21,26,31,36,41,46,51,56,61,66,71,76,81,86,91,96,101],{"title":17,"description":18,"path":19,"stem":8,"icon":20},"Introduction","Nuxt's goal is to make web development intuitive and performant with a great Developer Experience in mind.","\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fintroduction","i-lucide-info",{"title":22,"description":23,"path":24,"stem":25},"Installation","Get started with Nuxt quickly with our online starters or start locally with your terminal.","\u002Fdocs\u002F5.x\u002Fgetting-started\u002Finstallation","1.getting-started\u002F02.installation",{"title":27,"description":28,"path":29,"stem":30},"Configuration","Nuxt is configured with sensible defaults to make you productive.","\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F03.configuration",{"title":32,"description":33,"path":34,"stem":35},"Views","Nuxt provides several component layers to implement the user interface of your application.","\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fviews","1.getting-started\u002F04.views",{"title":37,"description":38,"path":39,"stem":40},"Assets","Nuxt offers two options for your assets.","\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fassets","1.getting-started\u002F05.assets",{"title":42,"description":43,"path":44,"stem":45},"Styling","Learn how to style your Nuxt application.","\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fstyling","1.getting-started\u002F06.styling",{"title":47,"description":48,"path":49,"stem":50},"Routing","Nuxt file-system routing creates a route for every file in the pages\u002F directory.","\u002Fdocs\u002F5.x\u002Fgetting-started\u002Frouting","1.getting-started\u002F07.routing",{"title":52,"description":53,"path":54,"stem":55},"SEO and Meta","Improve your Nuxt app's SEO with powerful head config, composables and components.","\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fseo-meta","1.getting-started\u002F08.seo-meta",{"title":57,"description":58,"path":59,"stem":60},"Transitions","Apply transitions between pages and layouts with Vue or native browser View Transitions.","\u002Fdocs\u002F5.x\u002Fgetting-started\u002Ftransitions","1.getting-started\u002F09.transitions",{"title":62,"description":63,"path":64,"stem":65},"Data Fetching","Nuxt provides composables to handle data fetching within your application.","\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fdata-fetching","1.getting-started\u002F10.data-fetching",{"title":67,"description":68,"path":69,"stem":70},"State Management","Nuxt provides powerful state management libraries and the useState composable to create a reactive and SSR-friendly shared state.","\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fstate-management","1.getting-started\u002F11.state-management",{"title":72,"description":73,"path":74,"stem":75},"Error Handling","Learn how to catch and handle errors in Nuxt.","\u002Fdocs\u002F5.x\u002Fgetting-started\u002Ferror-handling","1.getting-started\u002F12.error-handling",{"title":77,"description":78,"path":79,"stem":80},"Server","Build full-stack applications with Nuxt's server framework. You can fetch data from your database or another server, create APIs, or even generate static server-side content like a sitemap or a RSS feed - all from a single codebase.","\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fserver","1.getting-started\u002F13.server",{"title":82,"description":83,"path":84,"stem":85},"Layers","Nuxt provides a powerful system that allows you to extend the default files, configs, and much more.","\u002Fdocs\u002F5.x\u002Fgetting-started\u002Flayers","1.getting-started\u002F14.layers",{"title":87,"description":88,"path":89,"stem":90},"Prerendering","Nuxt allows pages to be statically rendered at build time to improve certain performance or SEO metrics","\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fprerendering","1.getting-started\u002F15.prerendering",{"title":92,"description":93,"path":94,"stem":95},"Deployment","Learn how to deploy your Nuxt application to any hosting provider.","\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fdeployment","1.getting-started\u002F16.deployment",{"title":97,"description":98,"path":99,"stem":100},"Testing","How to test your Nuxt application.","\u002Fdocs\u002F5.x\u002Fgetting-started\u002Ftesting","1.getting-started\u002F17.testing",{"title":102,"description":103,"path":104,"stem":105},"Upgrade Guide","Learn how to upgrade to the latest Nuxt version.","\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fupgrade","1.getting-started\u002F18.upgrade",false,{"title":108,"titleTemplate":109,"icon":110,"path":111,"stem":112,"children":113,"page":106},"Directory Structure","%s · Nuxt Directory Structure","i-vscode-icons-default-folder","\u002Fdocs\u002F5.x\u002Fdirectory-structure","2.directory-structure\u002F0.nuxt",[114,118,123,183,188,193,198,203,208,213,218,223,228,233,238,243,248,253],{"title":115,"description":116,"path":117,"stem":112},".nuxt","Nuxt uses the .nuxt\u002F directory in development to generate your Vue application.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnuxt",{"title":119,"description":120,"path":121,"stem":122},".output","Nuxt creates the .output\u002F directory when building your application for production.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Foutput","2.directory-structure\u002F0.output",{"title":124,"titleTemplate":109,"icon":125,"path":126,"stem":127,"children":128,"page":106},"app","i-vscode-icons-folder-type-app","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp","2.directory-structure\u002F1.app\u002F1.assets",[129,133,138,143,148,153,158,163,168,173,178],{"title":130,"description":131,"path":132,"stem":127},"assets","The assets\u002F directory is used to add all the website's assets that the build tool will process.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fassets",{"title":134,"description":135,"path":136,"stem":137},"components","The components\u002F directory is where you put all your Vue components.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fcomponents","2.directory-structure\u002F1.app\u002F1.components",{"title":139,"description":140,"path":141,"stem":142},"composables","Use the composables\u002F directory to auto-import your Vue composables into your application.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fcomposables","2.directory-structure\u002F1.app\u002F1.composables",{"title":144,"description":145,"path":146,"stem":147},"layouts","Nuxt provides a layouts framework to extract common UI patterns into reusable layouts.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Flayouts","2.directory-structure\u002F1.app\u002F1.layouts",{"title":149,"description":150,"path":151,"stem":152},"middleware","Nuxt provides middleware to run code before navigating to a particular route.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fmiddleware","2.directory-structure\u002F1.app\u002F1.middleware",{"title":154,"description":155,"path":156,"stem":157},"pages","Nuxt provides file-based routing to create routes within your web application.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fpages","2.directory-structure\u002F1.app\u002F1.pages",{"title":159,"description":160,"path":161,"stem":162},"plugins","Nuxt has a plugins system to use Vue plugins and more at the creation of your Vue application.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fplugins","2.directory-structure\u002F1.app\u002F1.plugins",{"title":164,"description":165,"path":166,"stem":167},"utils","Use the utils\u002F directory to auto-import your utility functions throughout your application.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Futils","2.directory-structure\u002F1.app\u002F1.utils",{"title":169,"description":170,"path":171,"stem":172},"app.vue","The app.vue file is the main component of your Nuxt application.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fapp","2.directory-structure\u002F1.app\u002F3.app",{"title":174,"description":175,"path":176,"stem":177},"app.config.ts","Expose reactive configuration within your application with the App Config file.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fapp-config","2.directory-structure\u002F1.app\u002F3.app-config",{"title":179,"description":180,"path":181,"stem":182},"error.vue","The error.vue file is the error page in your Nuxt application.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Ferror","2.directory-structure\u002F1.app\u002F3.error",{"title":184,"description":185,"path":186,"stem":187},"content","Use the content\u002F directory to create a file-based CMS for your application.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fcontent","2.directory-structure\u002F1.content",{"title":189,"description":190,"path":191,"stem":192},"layers","Use the layers\u002F directory to organize and auto-register local layers within your application.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Flayers","2.directory-structure\u002F1.layers",{"title":194,"description":195,"path":196,"stem":197},"modules","Use the modules\u002F directory to automatically register local modules within your application.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fmodules","2.directory-structure\u002F1.modules",{"title":199,"description":200,"path":201,"stem":202},"node_modules","The package manager stores the dependencies of your project in the node_modules\u002F directory.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnode_modules","2.directory-structure\u002F1.node_modules",{"title":204,"description":205,"path":206,"stem":207},"public","The public\u002F directory is used to serve your website's static assets.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fpublic","2.directory-structure\u002F1.public",{"title":209,"description":210,"path":211,"stem":212},"server","The server\u002F directory is used to register API and server handlers to your application.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fserver","2.directory-structure\u002F1.server",{"title":214,"description":215,"path":216,"stem":217},"shared","Use the shared\u002F directory to share functionality between the Vue app and the Nitro server.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fshared","2.directory-structure\u002F1.shared",{"title":219,"description":220,"path":221,"stem":222},"test","Use the test\u002F directory to organize unit, Nuxt, and end-to-end tests for your application.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Ftest","2.directory-structure\u002F1.test",{"title":224,"description":225,"path":226,"stem":227},".env","A .env file specifies your build\u002Fdev-time environment variables.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fenv","2.directory-structure\u002F2.env",{"title":229,"description":230,"path":231,"stem":232},".gitignore","A .gitignore file specifies intentionally untracked files that git should ignore.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fgitignore","2.directory-structure\u002F2.gitignore",{"title":234,"description":235,"path":236,"stem":237},".nuxtignore","The .nuxtignore file lets Nuxt ignore files in your project’s root directory during the build phase.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnuxtignore","2.directory-structure\u002F2.nuxtignore",{"title":239,"description":240,"path":241,"stem":242},".nuxtrc","The .nuxtrc file allows you to define nuxt configurations in a flat syntax.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnuxtrc","2.directory-structure\u002F2.nuxtrc",{"title":244,"description":245,"path":246,"stem":247},"nuxt.config.ts","Nuxt can be easily configured with a single nuxt.config file.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnuxt-config","2.directory-structure\u002F3.nuxt-config",{"title":249,"description":250,"path":251,"stem":252},"package.json","The package.json file contains all the dependencies and scripts for your application.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fpackage","2.directory-structure\u002F3.package",{"title":254,"description":255,"path":256,"stem":257},"tsconfig.json","Learn how Nuxt manages TypeScript configuration across different parts of your project.","\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Ftsconfig","2.directory-structure\u002F3.tsconfig",{"title":259,"icon":260,"path":261,"stem":262,"children":263,"page":106},"Guide","i-lucide-book-open","\u002Fdocs\u002F5.x\u002Fguide","3.guide\u002F1.concepts\u002F1.rendering",[264,309,340,356,402,433],{"title":265,"titleTemplate":266,"icon":267,"path":268,"stem":262,"children":269,"page":106},"Key Concepts","%s · Nuxt Concepts","i-lucide-medal","\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts",[270,274,279,284,289,294,299,304],{"title":271,"description":272,"path":273,"stem":262},"Rendering Modes","Learn about the different rendering modes available in Nuxt.","\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Frendering",{"title":275,"description":276,"path":277,"stem":278},"Nuxt Lifecycle","Understanding the lifecycle of Nuxt applications can help you gain deeper insights into how the framework operates, especially for both server-side and client-side rendering.","\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fnuxt-lifecycle","3.guide\u002F1.concepts\u002F2.nuxt-lifecycle",{"title":280,"description":281,"path":282,"stem":283},"Auto-imports","Nuxt auto-imports components, composables, helper functions and Vue APIs.","\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fauto-imports","3.guide\u002F1.concepts\u002F3.auto-imports",{"title":285,"description":286,"path":287,"stem":288},"Server Engine","Nuxt is powered by a new server engine: Nitro.","\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fserver-engine","3.guide\u002F1.concepts\u002F4.server-engine",{"title":290,"description":291,"path":292,"stem":293},"Modules","Nuxt provides a module system to extend the framework core and simplify integrations.","\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fmodules","3.guide\u002F1.concepts\u002F5.modules",{"title":295,"description":296,"path":297,"stem":298},"Server Components","Render individual components on the server only, keeping their JavaScript out of your client bundle.","\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fserver-components","3.guide\u002F1.concepts\u002F6.server-components",{"title":300,"description":301,"path":302,"stem":303},"TypeScript","Nuxt is fully typed and provides helpful shortcuts to ensure you have access to accurate type information when you are coding.","\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Ftypescript","3.guide\u002F1.concepts\u002F8.typescript",{"title":305,"description":306,"path":307,"stem":308},"Code Style","Nuxt supports ESLint out of the box","\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fcode-style","3.guide\u002F1.concepts\u002F9.code-style",{"title":310,"titleTemplate":311,"icon":312,"path":313,"stem":314,"children":315,"page":106},"Best Practices","%s · Best Practices","i-lucide-square-check","\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices","3.guide\u002F2.best-practices\u002Faccessibility",[316,320,325,330,335],{"title":317,"description":318,"path":319,"stem":314},"Nuxt accessibility","Best practices for accessibility in Nuxt apps.","\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices\u002Faccessibility",{"title":321,"description":322,"path":323,"stem":324},"Dev Containers","Set up or open a Nuxt project in a dev container for a consistent development environment.","\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices\u002Fdevcontainers","3.guide\u002F2.best-practices\u002Fdevcontainers",{"title":326,"description":327,"path":328,"stem":329},"Nuxt and Hydration","Why fixing hydration issues is important","\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices\u002Fhydration","3.guide\u002F2.best-practices\u002Fhydration",{"title":331,"description":332,"path":333,"stem":334},"Nuxt performance","Best practices for improving performance of Nuxt apps.","\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices\u002Fperformance","3.guide\u002F2.best-practices\u002Fperformance",{"title":336,"description":337,"path":338,"stem":339},"Nuxt Plugins","Best practices when using Nuxt plugins.","\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices\u002Fplugins","3.guide\u002F2.best-practices\u002Fplugins",{"title":341,"titleTemplate":342,"icon":343,"path":344,"stem":345,"children":346,"page":106},"Working with AI","Working with AI: %s","i-lucide-bot","\u002Fdocs\u002F5.x\u002Fguide\u002Fai","3.guide\u002F3.ai\u002F1.mcp",[347,351],{"title":348,"description":349,"path":350,"stem":345},"Nuxt MCP Server","Use Nuxt documentation in your AI assistants with Model Context Protocol support.","\u002Fdocs\u002F5.x\u002Fguide\u002Fai\u002Fmcp",{"title":352,"description":353,"path":354,"stem":355},"Nuxt LLMs.txt","How to get AI tools like Cursor, Windsurf, GitHub Copilot, ChatGPT, and Claude to understand Nuxt concepts, APIs, and best practices.","\u002Fdocs\u002F5.x\u002Fguide\u002Fai\u002Fllms-txt","3.guide\u002F3.ai\u002F2.llms-txt",{"title":357,"titleTemplate":358,"icon":359,"path":360,"stem":361,"children":362,"page":106},"Module Author Guide","%s · Nuxt Modules Author Guide","i-lucide-box","\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules","3.guide\u002F4.modules\u002F1.getting-started",[363,367,372,377,382,387,392,397],{"title":364,"description":365,"path":366,"stem":361},"Create Your First Module","Learn how to create your first Nuxt module using the official starter template.","\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fgetting-started",{"title":368,"description":369,"path":370,"stem":371},"Understand Module Structure","Learn how Nuxt modules are structured and how to define them.","\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fmodule-anatomy","3.guide\u002F4.modules\u002F2.module-anatomy",{"title":373,"description":374,"path":375,"stem":376},"Add Plugins, Components & More","Learn how to inject plugins, components, composables and server routes from your module.","\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Frecipes-basics","3.guide\u002F4.modules\u002F3.recipes-basics",{"title":378,"description":379,"path":380,"stem":381},"Module Dependencies","Declare dependencies on other modules with version constraints and configuration merging.","\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fmodule-dependencies","3.guide\u002F4.modules\u002F4.module-dependencies",{"title":383,"description":384,"path":385,"stem":386},"Use Hooks & Extend Types","Master lifecycle hooks, virtual files and TypeScript declarations in your modules.","\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Frecipes-advanced","3.guide\u002F4.modules\u002F5.recipes-advanced",{"title":388,"description":389,"path":390,"stem":391},"Test Your Module","Learn how to test your Nuxt module with unit, integration and E2E tests.","\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Ftesting","3.guide\u002F4.modules\u002F6.testing",{"title":393,"description":394,"path":395,"stem":396},"Follow Best Practices","Build performant and maintainable Nuxt modules with these guidelines.","\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fbest-practices","3.guide\u002F4.modules\u002F7.best-practices",{"title":398,"description":399,"path":400,"stem":401},"Publish & Share Your Module","Join the Nuxt module ecosystem and publish your module to npm.","\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fecosystem","3.guide\u002F4.modules\u002F8.ecosystem",{"title":403,"titleTemplate":404,"icon":405,"path":406,"stem":407,"children":408,"page":106},"Recipes","%s · Recipes","i-lucide-cooking-pot","\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes","3.guide\u002F5.recipes\u002F1.custom-routing",[409,413,418,423,428],{"title":410,"description":411,"path":412,"stem":407},"Custom Routing","In Nuxt, your routing is defined by the structure of your files inside the pages directory. However, since it uses vue-router under the hood, Nuxt offers you several ways to add custom routes in your project.","\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes\u002Fcustom-routing",{"title":414,"description":415,"path":416,"stem":417},"Using Vite Plugins in Nuxt","Learn how to integrate Vite plugins into your Nuxt project.","\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes\u002Fvite-plugin","3.guide\u002F5.recipes\u002F2.vite-plugin",{"title":419,"description":420,"path":421,"stem":422},"Custom useFetch in Nuxt","How to create a custom fetcher for calling your external API in Nuxt.","\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes\u002Fcustom-usefetch","3.guide\u002F5.recipes\u002F3.custom-usefetch",{"title":424,"description":425,"path":426,"stem":427},"Sessions and Authentication","Authentication is an extremely common requirement in web apps. This recipe will show you how to implement basic user registration and authentication in your Nuxt app.","\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes\u002Fsessions-and-authentication","3.guide\u002F5.recipes\u002F4.sessions-and-authentication",{"title":429,"description":430,"path":431,"stem":432},"Mostly-Static Sites","Ship near-zero JavaScript for content and marketing sites while keeping islands of interactivity.","\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes\u002Fmostly-static-sites","3.guide\u002F5.recipes\u002F5.mostly-static-sites",{"title":434,"titleTemplate":435,"icon":436,"path":437,"stem":438,"children":439,"page":106},"Going Further","%s · Nuxt Advanced","i-lucide-star","\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further","3.guide\u002F6.going-further\u002F1.events",[440,444,449,454,459,464,469,473,478,483,488],{"title":441,"description":442,"path":443,"stem":438},"Creating Custom Events","Nuxt provides a powerful event system powered by hookable.","\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fevents",{"title":445,"description":446,"path":447,"stem":448},"Experimental Features","Enable Nuxt experimental features to unlock new possibilities.","\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fexperimental-features","3.guide\u002F6.going-further\u002F1.experimental-features",{"title":450,"description":451,"path":452,"stem":453},"Features","Enable or disable optional Nuxt features to unlock new possibilities.","\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Ffeatures","3.guide\u002F6.going-further\u002F1.features",{"title":455,"description":456,"path":457,"stem":458},"Lifecycle Hooks","Nuxt provides a powerful hooking system to expand almost every aspect using hooks.","\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fhooks","3.guide\u002F6.going-further\u002F2.hooks",{"title":460,"description":461,"path":462,"stem":463},"Nuxt Kit","@nuxt\u002Fkit provides features for module authors.","\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fkit","3.guide\u002F6.going-further\u002F4.kit",{"title":465,"description":466,"path":467,"stem":468},"NuxtApp","In Nuxt, you can access runtime app context within composables, components and plugins.","\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fnuxt-app","3.guide\u002F6.going-further\u002F6.nuxt-app",{"title":470,"description":83,"path":471,"stem":472},"Authoring Nuxt Layers","\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Flayers","3.guide\u002F6.going-further\u002F7.layers",{"title":474,"description":475,"path":476,"stem":477},"Creating a Builder","Learn how Nuxt builders work and how to author your own.","\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fbuilders","3.guide\u002F6.going-further\u002F8.builders",{"title":479,"description":480,"path":481,"stem":482},"Debugging","In Nuxt, you can get started with debugging your application directly in the browser as well as in your IDE.","\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fdebugging","3.guide\u002F6.going-further\u002F9.debugging",{"title":484,"description":485,"path":486,"stem":487},"Runtime Config","Nuxt provides a runtime config API to expose configuration and secrets within your application.","\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fruntime-config","3.guide\u002F6.going-further\u002F10.runtime-config",{"title":489,"description":490,"path":491,"stem":492},"Nightly Release Channel","The nightly release channel allows using Nuxt built directly from the latest commits to the repository.","\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fnightly-release-channel","3.guide\u002F6.going-further\u002F11.nightly-release-channel",{"title":494,"titleTemplate":495,"icon":496,"path":497,"stem":498,"children":499,"page":106},"API","%s · Nuxt API","i-lucide-code-xml","\u002Fdocs\u002F5.x\u002Fapi","4.api\u002F1.components\u002F1.client-only",[500,584,755,905,999,1012],{"title":501,"titleTemplate":502,"icon":359,"path":503,"stem":498,"children":504,"page":106},"Components","%s · Nuxt Components","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents",[505,509,514,519,524,529,534,539,544,549,554,559,564,569,574,579],{"title":506,"description":507,"path":508,"stem":498},"\u003CClientOnly>","Render components only in client-side with the \u003CClientOnly> component.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fclient-only",{"title":510,"description":511,"path":512,"stem":513},"\u003CDevOnly>","Render components only during development with the \u003CDevOnly> component.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fdev-only","4.api\u002F1.components\u002F1.dev-only",{"title":515,"description":516,"path":517,"stem":518},"\u003CNuxtClientFallback>","Nuxt provides the \u003CNuxtClientFallback> component to render its content on the client if any of its children trigger an error in SSR","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-client-fallback","4.api\u002F1.components\u002F1.nuxt-client-fallback",{"title":520,"description":521,"path":522,"stem":523},"\u003CNuxtPage>","The \u003CNuxtPage> component is required to display pages located in the pages\u002F directory.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-page","4.api\u002F1.components\u002F2.nuxt-page",{"title":525,"description":526,"path":527,"stem":528},"\u003CNuxtLayout>","Nuxt provides the \u003CNuxtLayout> component to show layouts on pages and error pages.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-layout","4.api\u002F1.components\u002F3.nuxt-layout",{"title":530,"description":531,"path":532,"stem":533},"\u003CNuxtLink>","Nuxt provides \u003CNuxtLink> component to handle any kind of links within your application.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-link","4.api\u002F1.components\u002F4.nuxt-link",{"title":535,"description":536,"path":537,"stem":538},"\u003CNuxtLoadingIndicator>","Display a progress bar between page navigations.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-loading-indicator","4.api\u002F1.components\u002F5.nuxt-loading-indicator",{"title":540,"description":541,"path":542,"stem":543},"\u003CNuxtErrorBoundary>","The \u003CNuxtErrorBoundary> component handles client-side errors happening in its default slot.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-error-boundary","4.api\u002F1.components\u002F6.nuxt-error-boundary",{"title":545,"description":546,"path":547,"stem":548},"\u003CNuxtWelcome>","The \u003CNuxtWelcome> component greets users in new projects made from the starter template.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-welcome","4.api\u002F1.components\u002F7.nuxt-welcome",{"title":550,"description":551,"path":552,"stem":553},"\u003CNuxtIsland>","Nuxt provides the \u003CNuxtIsland> component to render a non-interactive component without any client JS.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-island","4.api\u002F1.components\u002F8.nuxt-island",{"title":555,"description":556,"path":557,"stem":558},"\u003CNuxtImg>","Nuxt provides a \u003CNuxtImg> component to handle automatic image optimization.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-img","4.api\u002F1.components\u002F9.nuxt-img",{"title":560,"description":561,"path":562,"stem":563},"\u003CNuxtPicture>","Nuxt provides a \u003CNuxtPicture> component to handle automatic image optimization.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-picture","4.api\u002F1.components\u002F10.nuxt-picture",{"title":565,"description":566,"path":567,"stem":568},"\u003CTeleport>","The \u003CTeleport> component teleports a component to a different location in the DOM.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fteleports","4.api\u002F1.components\u002F11.teleports",{"title":570,"description":571,"path":572,"stem":573},"\u003CNuxtRouteAnnouncer>","The \u003CNuxtRouteAnnouncer> component adds a hidden element with the page title to announce route changes to assistive technologies.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-route-announcer","4.api\u002F1.components\u002F12.nuxt-route-announcer",{"title":575,"description":576,"path":577,"stem":578},"\u003CNuxtTime>","The \u003CNuxtTime> component displays time in a locale-friendly format with server-client consistency.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-time","4.api\u002F1.components\u002F13.nuxt-time",{"title":580,"description":581,"path":582,"stem":583},"\u003CNuxtAnnouncer>","The \u003CNuxtAnnouncer> component adds a hidden element to announce dynamic content changes to assistive technologies.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-announcer","4.api\u002F1.components\u002F14.nuxt-announcer",{"title":585,"titleTemplate":586,"icon":587,"path":588,"stem":589,"children":590,"page":106},"Composables","%s · Nuxt Composables","i-lucide-arrow-left-right","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables","4.api\u002F2.composables\u002Fcreate-use-async-data",[591,595,600,605,610,615,620,625,630,635,640,645,650,655,660,665,670,675,680,685,690,695,700,705,710,715,720,725,730,735,740,745,750],{"title":592,"description":593,"path":594,"stem":589},"createUseAsyncData","A factory function to create a custom useAsyncData composable with pre-defined default options.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fcreate-use-async-data",{"title":596,"description":597,"path":598,"stem":599},"createUseFetch","A factory function to create a custom useFetch composable with pre-defined default options.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fcreate-use-fetch","4.api\u002F2.composables\u002Fcreate-use-fetch",{"title":601,"description":602,"path":603,"stem":604},"onPrehydrate","Use onPrehydrate to run a callback on the client immediately before Nuxt hydrates the page.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fon-prehydrate","4.api\u002F2.composables\u002Fon-prehydrate",{"title":606,"description":607,"path":608,"stem":609},"useAnnouncer","A composable for announcing messages to screen readers.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-announcer","4.api\u002F2.composables\u002Fuse-announcer",{"title":611,"description":612,"path":613,"stem":614},"useAppConfig","Access the reactive app config defined in the project.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-app-config","4.api\u002F2.composables\u002Fuse-app-config",{"title":616,"description":617,"path":618,"stem":619},"useAsyncData","useAsyncData provides access to data that resolves asynchronously in an SSR-friendly composable.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-async-data","4.api\u002F2.composables\u002Fuse-async-data",{"title":621,"description":622,"path":623,"stem":624},"useCookie","useCookie is an SSR-friendly composable to read and write cookies.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-cookie","4.api\u002F2.composables\u002Fuse-cookie",{"title":626,"description":627,"path":628,"stem":629},"useError","useError composable returns the global Nuxt error that is being handled.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-error","4.api\u002F2.composables\u002Fuse-error",{"title":631,"description":632,"path":633,"stem":634},"useFetch","Fetch data from an API endpoint with an SSR-friendly composable.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-fetch","4.api\u002F2.composables\u002Fuse-fetch",{"title":636,"description":637,"path":638,"stem":639},"useHead","useHead customizes the head properties of individual pages of your Nuxt app.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-head","4.api\u002F2.composables\u002Fuse-head",{"title":641,"description":642,"path":643,"stem":644},"useHeadSafe","The recommended way to provide head data with user input.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-head-safe","4.api\u002F2.composables\u002Fuse-head-safe",{"title":646,"description":647,"path":648,"stem":649},"useHydration","Allows full control of the hydration cycle to set and receive data from the server.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-hydration","4.api\u002F2.composables\u002Fuse-hydration",{"title":651,"description":652,"path":653,"stem":654},"useLayout","useLayout returns the layout resolved for the current route.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-layout","4.api\u002F2.composables\u002Fuse-layout",{"title":656,"description":657,"path":658,"stem":659},"useLazyAsyncData","This wrapper around useAsyncData triggers navigation immediately.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-async-data","4.api\u002F2.composables\u002Fuse-lazy-async-data",{"title":661,"description":662,"path":663,"stem":664},"useLazyFetch","This wrapper around useFetch triggers navigation immediately.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-fetch","4.api\u002F2.composables\u002Fuse-lazy-fetch",{"title":666,"description":667,"path":668,"stem":669},"useLoadingIndicator","This composable gives you access to the loading state of the app page.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-loading-indicator","4.api\u002F2.composables\u002Fuse-loading-indicator",{"title":671,"description":672,"path":673,"stem":674},"useNuxtApp","Access the shared runtime context of the Nuxt Application.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-app","4.api\u002F2.composables\u002Fuse-nuxt-app",{"title":676,"description":677,"path":678,"stem":679},"useNuxtData","Access the current cached value of data fetching composables.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-data","4.api\u002F2.composables\u002Fuse-nuxt-data",{"title":681,"description":682,"path":683,"stem":684},"usePreviewMode","Use usePreviewMode to check and control preview mode in Nuxt","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-preview-mode","4.api\u002F2.composables\u002Fuse-preview-mode",{"title":686,"description":687,"path":688,"stem":689},"useRequestEvent","Access the incoming request event with the useRequestEvent composable.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-event","4.api\u002F2.composables\u002Fuse-request-event",{"title":691,"description":692,"path":693,"stem":694},"useRequestFetch","Forward the request context and headers for server-side fetch requests with the useRequestFetch composable.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-fetch","4.api\u002F2.composables\u002Fuse-request-fetch",{"title":696,"description":697,"path":698,"stem":699},"useRequestHeader","Use useRequestHeader to access a certain incoming request header.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-header","4.api\u002F2.composables\u002Fuse-request-header",{"title":701,"description":702,"path":703,"stem":704},"useRequestHeaders","Use useRequestHeaders to access the incoming request headers.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-headers","4.api\u002F2.composables\u002Fuse-request-headers",{"title":706,"description":707,"path":708,"stem":709},"useRequestURL","Access the incoming request URL with the useRequestURL composable.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-url","4.api\u002F2.composables\u002Fuse-request-url",{"title":711,"description":712,"path":713,"stem":714},"useResponseHeader","Use useResponseHeader to set a server response header.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-response-header","4.api\u002F2.composables\u002Fuse-response-header",{"title":716,"description":717,"path":718,"stem":719},"useRoute","The useRoute composable returns the current route.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-route","4.api\u002F2.composables\u002Fuse-route",{"title":721,"description":722,"path":723,"stem":724},"useRouteAnnouncer","This composable observes the page title changes and updates the announcer message accordingly.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-route-announcer","4.api\u002F2.composables\u002Fuse-route-announcer",{"title":726,"description":727,"path":728,"stem":729},"useRouter","The useRouter composable returns the router instance.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-router","4.api\u002F2.composables\u002Fuse-router",{"title":731,"description":732,"path":733,"stem":734},"useRuntimeConfig","Access runtime config variables with the useRuntimeConfig composable.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-config","4.api\u002F2.composables\u002Fuse-runtime-config",{"title":736,"description":737,"path":738,"stem":739},"useRuntimeHook","Registers a runtime hook in a Nuxt application and ensures it is properly disposed of when the scope is destroyed.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-hook","4.api\u002F2.composables\u002Fuse-runtime-hook",{"title":741,"description":742,"path":743,"stem":744},"useSeoMeta","The useSeoMeta composable lets you define your site's SEO meta tags as a flat object with full TypeScript support.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-seo-meta","4.api\u002F2.composables\u002Fuse-seo-meta",{"title":746,"description":747,"path":748,"stem":749},"useServerSeoMeta","The useServerSeoMeta composable lets you define your site's SEO meta tags as a flat object with full TypeScript support.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-server-seo-meta","4.api\u002F2.composables\u002Fuse-server-seo-meta",{"title":751,"description":752,"path":753,"stem":754},"useState","The useState composable creates a reactive and SSR-friendly shared state.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-state","4.api\u002F2.composables\u002Fuse-state",{"title":756,"titleTemplate":757,"path":758,"stem":759,"children":760,"page":106},"Utils","%s · Nuxt Utils","\u002Fdocs\u002F5.x\u002Fapi\u002Futils","4.api\u002F3.utils\u002F$fetch",[761,765,770,775,780,785,790,795,800,805,810,815,820,825,830,835,840,845,850,855,860,865,870,875,880,885,890,895,900],{"title":762,"description":763,"path":764,"stem":759},"$fetch","Nuxt uses ofetch to expose globally the $fetch helper for making HTTP requests.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdollarfetch",{"title":766,"description":767,"path":768,"stem":769},"abortNavigation","abortNavigation is a helper function that prevents navigation from taking place and throws an error if one is set as a parameter.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fabort-navigation","4.api\u002F3.utils\u002Fabort-navigation",{"title":771,"description":772,"path":773,"stem":774},"addRouteMiddleware","addRouteMiddleware() is a helper function to dynamically add middleware in your application.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fadd-route-middleware","4.api\u002F3.utils\u002Fadd-route-middleware",{"title":776,"description":777,"path":778,"stem":779},"callOnce","Run a given function or block of code once during SSR or CSR.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fcall-once","4.api\u002F3.utils\u002Fcall-once",{"title":781,"description":782,"path":783,"stem":784},"clearError","The clearError composable clears all handled errors.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fclear-error","4.api\u002F3.utils\u002Fclear-error",{"title":786,"description":787,"path":788,"stem":789},"clearNuxtData","Delete cached data, error status and pending promises of useAsyncData and useFetch.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fclear-nuxt-data","4.api\u002F3.utils\u002Fclear-nuxt-data",{"title":791,"description":792,"path":793,"stem":794},"clearNuxtState","Delete the cached state of useState.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fclear-nuxt-state","4.api\u002F3.utils\u002Fclear-nuxt-state",{"title":796,"description":797,"path":798,"stem":799},"createError","Create an error object with additional metadata.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fcreate-error","4.api\u002F3.utils\u002Fcreate-error",{"title":801,"description":802,"path":803,"stem":804},"defineLazyHydrationComponent","Define a lazy hydration component with a specific strategy.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-lazy-hydration-component","4.api\u002F3.utils\u002Fdefine-lazy-hydration-component",{"title":806,"description":807,"path":808,"stem":809},"defineNuxtComponent","defineNuxtComponent() is a helper function for defining type safe components with Options API.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-nuxt-component","4.api\u002F3.utils\u002Fdefine-nuxt-component",{"title":811,"description":812,"path":813,"stem":814},"defineNuxtPlugin","defineNuxtPlugin() is a helper function for creating Nuxt plugins.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-nuxt-plugin","4.api\u002F3.utils\u002Fdefine-nuxt-plugin",{"title":816,"description":817,"path":818,"stem":819},"defineNuxtRouteMiddleware","Create named route middleware using defineNuxtRouteMiddleware helper function.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-nuxt-route-middleware","4.api\u002F3.utils\u002Fdefine-nuxt-route-middleware",{"title":821,"description":822,"path":823,"stem":824},"definePageMeta","Define metadata for your page components.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-page-meta","4.api\u002F3.utils\u002Fdefine-page-meta",{"title":826,"description":827,"path":828,"stem":829},"defineRouteRules","Define route rules for hybrid rendering at the page level.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-route-rules","4.api\u002F3.utils\u002Fdefine-route-rules",{"title":831,"description":832,"path":833,"stem":834},"navigateTo","navigateTo is a helper function that programmatically navigates users.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fnavigate-to","4.api\u002F3.utils\u002Fnavigate-to",{"title":836,"description":837,"path":838,"stem":839},"onBeforeRouteLeave","The onBeforeRouteLeave composable allows registering a route guard within a component.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fon-before-route-leave","4.api\u002F3.utils\u002Fon-before-route-leave",{"title":841,"description":842,"path":843,"stem":844},"onBeforeRouteUpdate","The onBeforeRouteUpdate composable allows registering a route guard within a component.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fon-before-route-update","4.api\u002F3.utils\u002Fon-before-route-update",{"title":846,"description":847,"path":848,"stem":849},"onNuxtReady","The onNuxtReady composable allows running a callback after your app has finished initializing.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fon-nuxt-ready","4.api\u002F3.utils\u002Fon-nuxt-ready",{"title":851,"description":852,"path":853,"stem":854},"prefetchComponents","Nuxt provides utilities to give you control over prefetching components.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fprefetch-components","4.api\u002F3.utils\u002Fprefetch-components",{"title":856,"description":857,"path":858,"stem":859},"preloadComponents","Nuxt provides utilities to give you control over preloading components.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fpreload-components","4.api\u002F3.utils\u002Fpreload-components",{"title":861,"description":862,"path":863,"stem":864},"preloadRouteComponents","preloadRouteComponents allows you to manually preload individual pages in your Nuxt app.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fpreload-route-components","4.api\u002F3.utils\u002Fpreload-route-components",{"title":866,"description":867,"path":868,"stem":869},"prerenderRoutes","prerenderRoutes hints to Nitro to prerender an additional route.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fprerender-routes","4.api\u002F3.utils\u002Fprerender-routes",{"title":871,"description":872,"path":873,"stem":874},"refreshCookie","Refresh useCookie values manually when a cookie has changed","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Frefresh-cookie","4.api\u002F3.utils\u002Frefresh-cookie",{"title":876,"description":877,"path":878,"stem":879},"refreshNuxtData","Refresh all or specific asyncData instances in Nuxt","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Frefresh-nuxt-data","4.api\u002F3.utils\u002Frefresh-nuxt-data",{"title":881,"description":882,"path":883,"stem":884},"reloadNuxtApp","reloadNuxtApp will perform a hard reload of the page.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Freload-nuxt-app","4.api\u002F3.utils\u002Freload-nuxt-app",{"title":886,"description":887,"path":888,"stem":889},"setPageLayout","setPageLayout allows you to dynamically change the layout of a page.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fset-page-layout","4.api\u002F3.utils\u002Fset-page-layout",{"title":891,"description":892,"path":893,"stem":894},"setResponseStatus","setResponseStatus sets the status (and optionally the statusText) of the response.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fset-response-status","4.api\u002F3.utils\u002Fset-response-status",{"title":896,"description":897,"path":898,"stem":899},"showError","Nuxt provides a quick and simple way to show a full screen error page if needed.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fshow-error","4.api\u002F3.utils\u002Fshow-error",{"title":901,"description":902,"path":903,"stem":904},"updateAppConfig","Update the App Config at runtime.","\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fupdate-app-config","4.api\u002F3.utils\u002Fupdate-app-config",{"title":460,"titleTemplate":906,"path":907,"stem":908,"children":909,"page":106},"%s · Nuxt Kit","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit","4.api\u002F5.kit\u002F1.modules",[910,913,918,923,927,931,936,941,946,951,956,960,965,970,975,980,985,990,995],{"title":290,"description":911,"path":912,"stem":908},"Nuxt Kit provides a set of utilities to help you create and use modules. You can use these utilities to create your own modules or to reuse existing modules.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fmodules",{"title":914,"description":915,"path":916,"stem":917},"Programmatic Usage","Nuxt Kit provides a set of utilities to help you work with Nuxt programmatically. These functions allow you to load Nuxt, build Nuxt, and load Nuxt configuration.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fprogrammatic","4.api\u002F5.kit\u002F2.programmatic",{"title":919,"description":920,"path":921,"stem":922},"Compatibility","Nuxt Kit provides a set of utilities to help you check the compatibility of your modules with different Nuxt versions.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fcompatibility","4.api\u002F5.kit\u002F3.compatibility",{"title":280,"description":924,"path":925,"stem":926},"Nuxt Kit provides a set of utilities to help you work with auto-imports. These functions allow you to register your own utils, composables and Vue APIs.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fautoimports","4.api\u002F5.kit\u002F4.autoimports",{"title":501,"description":928,"path":929,"stem":930},"Nuxt Kit provides a set of utilities to help you work with components. You can register components globally or locally, and also add directories to be scanned for components.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fcomponents","4.api\u002F5.kit\u002F5.components",{"title":932,"description":933,"path":934,"stem":935},"Context","Nuxt Kit provides a set of utilities to help you work with context.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fcontext","4.api\u002F5.kit\u002F6.context",{"title":937,"description":938,"path":939,"stem":940},"Pages","Nuxt Kit provides a set of utilities to help you create and use pages. You can use these utilities to manipulate the pages configuration or to define route rules.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fpages","4.api\u002F5.kit\u002F7.pages",{"title":942,"description":943,"path":944,"stem":945},"Layout","Nuxt Kit provides a set of utilities to help you work with layouts.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Flayout","4.api\u002F5.kit\u002F8.layout",{"title":947,"description":948,"path":949,"stem":950},"Head","Nuxt Kit provides utilities to help you manage head configuration in modules.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fhead","4.api\u002F5.kit\u002F9.head",{"title":952,"description":953,"path":954,"stem":955},"Plugins","Nuxt Kit provides a set of utilities to help you create and use plugins. You can add plugins or plugin templates to your module using these functions.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fplugins","4.api\u002F5.kit\u002F9.plugins",{"title":484,"description":957,"path":958,"stem":959},"Nuxt Kit provides a set of utilities to help you access and modify Nuxt runtime configuration.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fruntime-config","4.api\u002F5.kit\u002F10.runtime-config",{"title":961,"description":962,"path":963,"stem":964},"Templates","Nuxt Kit provides a set of utilities to help you work with templates. These functions allow you to generate extra files during development and build time.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Ftemplates","4.api\u002F5.kit\u002F10.templates",{"title":966,"description":967,"path":968,"stem":969},"App Config","Nuxt Kit provides a set of utilities to help you access and modify Nuxt app configuration.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fapp-config","4.api\u002F5.kit\u002F11.app-config",{"title":971,"description":972,"path":973,"stem":974},"Nitro","Nuxt Kit provides a set of utilities to help you work with Nitro. These functions allow you to add server handlers, plugins, and prerender routes.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fnitro","4.api\u002F5.kit\u002F12.nitro",{"title":976,"description":977,"path":978,"stem":979},"Resolving","Nuxt Kit provides utilities to resolve paths from the Nuxt root directory or a custom base.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fresolving","4.api\u002F5.kit\u002F13.resolving",{"title":981,"description":982,"path":983,"stem":984},"Logging","Nuxt Kit provides a set of utilities to help you work with logging. These functions allow you to log messages with extra features.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Flogging","4.api\u002F5.kit\u002F14.logging",{"title":986,"description":987,"path":988,"stem":989},"Builder","Nuxt Kit provides a set of utilities to help you work with the builder. These functions allow you to extend the Vite and webpack configurations.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fbuilder","4.api\u002F5.kit\u002F15.builder",{"title":991,"description":992,"path":993,"stem":994},"Examples","Examples of Nuxt Kit utilities in use.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fexamples","4.api\u002F5.kit\u002F16.examples",{"title":82,"description":996,"path":997,"stem":998},"Nuxt Kit provides utilities to help you work with layers and their directory structures.","\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Flayers","4.api\u002F5.kit\u002F17.layers",{"icon":1000,"title":1001,"path":1002,"stem":1003,"children":1004,"page":106},"i-lucide-brain","Advanced","\u002Fdocs\u002F5.x\u002Fapi\u002Fadvanced","4.api\u002F6.advanced\u002F1.hooks",[1005,1007],{"title":455,"description":456,"path":1006,"stem":1003},"\u002Fdocs\u002F5.x\u002Fapi\u002Fadvanced\u002Fhooks",{"title":1008,"description":1009,"path":1010,"stem":1011},"Import meta","Understand where your code is running using `import.meta`.","\u002Fdocs\u002F5.x\u002Fapi\u002Fadvanced\u002Fimport-meta","4.api\u002F6.advanced\u002F2.import-meta",{"title":1013,"description":1014,"path":1015,"stem":1016},"Nuxt Configuration","Discover all the options you can use in your nuxt.config.ts file.","\u002Fdocs\u002F5.x\u002Fapi\u002Fnuxt-config","4.api\u002F6.nuxt-config",{"title":1018,"titleTemplate":1019,"icon":1020,"path":1021,"stem":1022,"children":1023,"page":106},"Community","%s · Nuxt Community","i-lucide-messages-square","\u002Fdocs\u002F5.x\u002Fcommunity","5.community\u002F2.getting-help",[1024,1029,1034,1039,1044,1049],{"title":1025,"description":1026,"path":1027,"stem":1022,"icon":1028},"Getting Help","We're a friendly community of developers and we'd love to help.","\u002Fdocs\u002F5.x\u002Fcommunity\u002Fgetting-help","i-lucide-life-buoy",{"title":1030,"description":1031,"path":1032,"stem":1033},"Reporting Bugs","One of the most valuable roles in open source is taking the time to report bugs helpfully.","\u002Fdocs\u002F5.x\u002Fcommunity\u002Freporting-bugs","5.community\u002F3.reporting-bugs",{"title":1035,"description":1036,"path":1037,"stem":1038},"Contribution","Nuxt is a community project - and so we love contributions of all kinds! ❤️","\u002Fdocs\u002F5.x\u002Fcommunity\u002Fcontribution","5.community\u002F4.contribution",{"title":1040,"description":1041,"path":1042,"stem":1043},"Framework","Some specific points about contributions to the framework repository.","\u002Fdocs\u002F5.x\u002Fcommunity\u002Fframework-contribution","5.community\u002F5.framework-contribution",{"title":1045,"description":1046,"path":1047,"stem":1048},"Roadmap","Nuxt is constantly evolving, with new features and modules being added all the time.","\u002Fdocs\u002F5.x\u002Fcommunity\u002Froadmap","5.community\u002F6.roadmap",{"title":1050,"description":1051,"path":1052,"stem":1053},"Releases","Discover the latest releases of Nuxt & Nuxt official modules.","\u002Fdocs\u002F5.x\u002Fcommunity\u002Fchangelog","5.community\u002F7.changelog",{"title":1055,"titleTemplate":1056,"icon":1057,"path":1058,"stem":1059,"children":1060,"page":106},"Migrate to Nuxt Bridge","Migrate to Nuxt Bridge: %s","i-lucide-ship","\u002Fdocs\u002F5.x\u002Fbridge","6.bridge\u002F1.overview",[1061,1065,1069,1074,1079,1084,1089,1092,1096,1101],{"title":1062,"description":1063,"path":1064,"stem":1059},"Overview","Reduce the differences with Nuxt 3 and reduce the burden of migration to Nuxt 3.","\u002Fdocs\u002F5.x\u002Fbridge\u002Foverview",{"title":300,"description":1066,"path":1067,"stem":1068},"Learn how to use TypeScript with Nuxt Bridge.","\u002Fdocs\u002F5.x\u002Fbridge\u002Ftypescript","6.bridge\u002F2.typescript",{"title":1070,"description":1071,"path":1072,"stem":1073},"Legacy Composition API","Learn how to migrate to Composition API with Nuxt Bridge.","\u002Fdocs\u002F5.x\u002Fbridge\u002Fbridge-composition-api","6.bridge\u002F3.bridge-composition-api",{"title":1075,"description":1076,"path":1077,"stem":1078},"Plugins and Middleware","Learn how to migrate from Nuxt 2 to Nuxt Bridge new plugins and middleware.","\u002Fdocs\u002F5.x\u002Fbridge\u002Fplugins-and-middleware","6.bridge\u002F4.plugins-and-middleware",{"title":1080,"description":1081,"path":1082,"stem":1083},"New Composition API","Nuxt Bridge implements composables compatible with Nuxt 3.","\u002Fdocs\u002F5.x\u002Fbridge\u002Fnuxt3-compatible-api","6.bridge\u002F5.nuxt3-compatible-api",{"title":1085,"description":1086,"path":1087,"stem":1088},"Meta Tags","Learn how to migrate from Nuxt 2 to Nuxt Bridge new meta tags.","\u002Fdocs\u002F5.x\u002Fbridge\u002Fmeta","6.bridge\u002F6.meta",{"title":484,"description":485,"path":1090,"stem":1091},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fruntime-config","6.bridge\u002F7.runtime-config",{"title":971,"description":1093,"path":1094,"stem":1095},"Activate Nitro to your Nuxt 2 application with Nuxt Bridge.","\u002Fdocs\u002F5.x\u002Fbridge\u002Fnitro","6.bridge\u002F8.nitro",{"title":1097,"description":1098,"path":1099,"stem":1100},"Vite","Activate Vite to your Nuxt 2 application with Nuxt Bridge.","\u002Fdocs\u002F5.x\u002Fbridge\u002Fvite","6.bridge\u002F9.vite",{"title":27,"description":1102,"path":1103,"stem":1104},"Learn how to configure Nuxt Bridge to your own needs.","\u002Fdocs\u002F5.x\u002Fbridge\u002Fconfiguration","6.bridge\u002F10.configuration",{"title":1106,"titleTemplate":1107,"icon":1108,"path":1109,"stem":1110,"children":1111,"page":106},"Migrate to Nuxt 3","Migrate to Nuxt 3: %s","i-lucide-circle-arrow-up","\u002Fdocs\u002F5.x\u002Fmigration","7.migration\u002F1.overview",[1112,1115,1119,1124,1128,1132,1137,1142,1146,1151,1155],{"title":1062,"description":1113,"path":1114,"stem":1110},"Nuxt 3 is a complete rewrite of Nuxt 2, and also based on a new set of underlying technologies.","\u002Fdocs\u002F5.x\u002Fmigration\u002Foverview",{"title":27,"description":1116,"path":1117,"stem":1118},"Learn how to migrate from Nuxt 2 to Nuxt 3 new configuration.","\u002Fdocs\u002F5.x\u002Fmigration\u002Fconfiguration","7.migration\u002F2.configuration",{"title":1120,"description":1121,"path":1122,"stem":1123},"Auto Imports","Nuxt 3 adopts a minimal friction approach, meaning wherever possible components and composables are auto-imported.","\u002Fdocs\u002F5.x\u002Fmigration\u002Fauto-imports","7.migration\u002F3.auto-imports",{"title":1085,"description":1125,"path":1126,"stem":1127},"Manage your meta tags, from Nuxt 2 to Nuxt 3.","\u002Fdocs\u002F5.x\u002Fmigration\u002Fmeta","7.migration\u002F4.meta",{"title":1075,"description":1129,"path":1130,"stem":1131},"Learn how to migrate from Nuxt 2 to Nuxt 3 plugins and middleware.","\u002Fdocs\u002F5.x\u002Fmigration\u002Fplugins-and-middleware","7.migration\u002F5.plugins-and-middleware",{"title":1133,"description":1134,"path":1135,"stem":1136},"Pages and Layouts","Learn how to migrate from Nuxt 2 to Nuxt 3 pages and layouts.","\u002Fdocs\u002F5.x\u002Fmigration\u002Fpages-and-layouts","7.migration\u002F6.pages-and-layouts",{"title":1138,"description":1139,"path":1140,"stem":1141},"Component Options","Learn how to migrate from Nuxt 2 components options to Nuxt 3 composables.","\u002Fdocs\u002F5.x\u002Fmigration\u002Fcomponent-options","7.migration\u002F7.component-options",{"title":484,"description":1143,"path":1144,"stem":1145},"Learn how to migrate from Nuxt 2 to Nuxt 3 runtime config.","\u002Fdocs\u002F5.x\u002Fmigration\u002Fruntime-config","7.migration\u002F8.runtime-config",{"title":1147,"description":1148,"path":1149,"stem":1150},"Build Tooling","Learn how to migrate from Nuxt 2 to Nuxt 3 build tooling.","\u002Fdocs\u002F5.x\u002Fmigration\u002Fbundling","7.migration\u002F10.bundling",{"title":77,"description":1152,"path":1153,"stem":1154},"Learn how to migrate from Nuxt 2 to Nuxt 3 server.","\u002Fdocs\u002F5.x\u002Fmigration\u002Fserver","7.migration\u002F11.server",{"title":290,"description":1156,"path":1157,"stem":1158},"Learn how to migrate from Nuxt 2 to Nuxt 3 modules.","\u002Fdocs\u002F5.x\u002Fmigration\u002Fmodule-authors","7.migration\u002F20.module-authors",{"title":5,"icon":6,"path":1160,"stem":8,"children":1161,"page":106},"\u002Fdocs\u002F4.x",[1162,1201,1263,1362,1580,1595,1618],{"title":11,"titleTemplate":12,"icon":13,"path":1163,"stem":8,"children":1164,"page":106},"\u002Fdocs\u002F4.x\u002Fgetting-started",[1165,1167,1169,1171,1173,1175,1177,1179,1181,1183,1185,1187,1189,1191,1193,1195,1197,1199],{"title":17,"description":18,"path":1166,"stem":8,"icon":20},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fintroduction",{"title":22,"description":23,"path":1168,"stem":25},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Finstallation",{"title":27,"description":28,"path":1170,"stem":30},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fconfiguration",{"title":32,"description":33,"path":1172,"stem":35},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fviews",{"title":37,"description":38,"path":1174,"stem":40},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fassets",{"title":42,"description":43,"path":1176,"stem":45},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fstyling",{"title":47,"description":48,"path":1178,"stem":50},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Frouting",{"title":52,"description":53,"path":1180,"stem":55},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fseo-meta",{"title":57,"description":58,"path":1182,"stem":60},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Ftransitions",{"title":62,"description":63,"path":1184,"stem":65},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fdata-fetching",{"title":67,"description":68,"path":1186,"stem":70},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fstate-management",{"title":72,"description":73,"path":1188,"stem":75},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Ferror-handling",{"title":77,"description":78,"path":1190,"stem":80},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fserver",{"title":82,"description":83,"path":1192,"stem":85},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Flayers",{"title":87,"description":88,"path":1194,"stem":90},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fprerendering",{"title":92,"description":93,"path":1196,"stem":95},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fdeployment",{"title":97,"description":98,"path":1198,"stem":100},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Ftesting",{"title":102,"description":103,"path":1200,"stem":105},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fupgrade",{"title":108,"titleTemplate":109,"icon":110,"path":1202,"stem":112,"children":1203,"page":106},"\u002Fdocs\u002F4.x\u002Fdirectory-structure",[1204,1206,1208,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261],{"title":115,"description":116,"path":1205,"stem":112},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fnuxt",{"title":119,"description":120,"path":1207,"stem":122},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Foutput",{"title":124,"titleTemplate":109,"icon":125,"path":1209,"stem":127,"children":1210,"page":106},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp",[1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231],{"title":130,"description":131,"path":1212,"stem":127},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fassets",{"title":134,"description":135,"path":1214,"stem":137},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fcomponents",{"title":139,"description":140,"path":1216,"stem":142},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fcomposables",{"title":144,"description":145,"path":1218,"stem":147},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Flayouts",{"title":149,"description":150,"path":1220,"stem":152},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fmiddleware",{"title":154,"description":155,"path":1222,"stem":157},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fpages",{"title":159,"description":160,"path":1224,"stem":162},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fplugins",{"title":164,"description":165,"path":1226,"stem":167},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Futils",{"title":169,"description":170,"path":1228,"stem":172},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fapp",{"title":174,"description":175,"path":1230,"stem":177},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fapp-config",{"title":179,"description":180,"path":1232,"stem":182},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Ferror",{"title":184,"description":185,"path":1234,"stem":187},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fcontent",{"title":189,"description":190,"path":1236,"stem":192},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Flayers",{"title":194,"description":195,"path":1238,"stem":197},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fmodules",{"title":199,"description":200,"path":1240,"stem":202},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fnode_modules",{"title":204,"description":205,"path":1242,"stem":207},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fpublic",{"title":209,"description":210,"path":1244,"stem":212},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fserver",{"title":214,"description":215,"path":1246,"stem":217},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fshared",{"title":219,"description":220,"path":1248,"stem":222},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Ftest",{"title":224,"description":225,"path":1250,"stem":227},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fenv",{"title":229,"description":230,"path":1252,"stem":232},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fgitignore",{"title":234,"description":235,"path":1254,"stem":237},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fnuxtignore",{"title":239,"description":240,"path":1256,"stem":242},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fnuxtrc",{"title":244,"description":245,"path":1258,"stem":247},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fnuxt-config",{"title":249,"description":250,"path":1260,"stem":252},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fpackage",{"title":254,"description":255,"path":1262,"stem":257},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Ftsconfig",{"title":259,"icon":260,"path":1264,"stem":262,"children":1265,"page":106},"\u002Fdocs\u002F4.x\u002Fguide",[1266,1285,1298,1305,1324,1337],{"title":265,"titleTemplate":266,"icon":267,"path":1267,"stem":262,"children":1268,"page":106},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts",[1269,1271,1273,1275,1277,1279,1281,1283],{"title":271,"description":272,"path":1270,"stem":262},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Frendering",{"title":275,"description":276,"path":1272,"stem":278},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Fnuxt-lifecycle",{"title":280,"description":281,"path":1274,"stem":283},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Fauto-imports",{"title":285,"description":286,"path":1276,"stem":288},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Fserver-engine",{"title":290,"description":291,"path":1278,"stem":293},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Fmodules",{"title":295,"description":296,"path":1280,"stem":298},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Fserver-components",{"title":300,"description":301,"path":1282,"stem":303},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Ftypescript",{"title":305,"description":306,"path":1284,"stem":308},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Fcode-style",{"title":310,"titleTemplate":311,"icon":312,"path":1286,"stem":314,"children":1287,"page":106},"\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices",[1288,1290,1292,1294,1296],{"title":317,"description":318,"path":1289,"stem":314},"\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices\u002Faccessibility",{"title":321,"description":322,"path":1291,"stem":324},"\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices\u002Fdevcontainers",{"title":326,"description":327,"path":1293,"stem":329},"\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices\u002Fhydration",{"title":331,"description":332,"path":1295,"stem":334},"\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices\u002Fperformance",{"title":336,"description":337,"path":1297,"stem":339},"\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices\u002Fplugins",{"title":341,"titleTemplate":342,"icon":343,"path":1299,"stem":345,"children":1300,"page":106},"\u002Fdocs\u002F4.x\u002Fguide\u002Fai",[1301,1303],{"title":348,"description":349,"path":1302,"stem":345},"\u002Fdocs\u002F4.x\u002Fguide\u002Fai\u002Fmcp",{"title":352,"description":353,"path":1304,"stem":355},"\u002Fdocs\u002F4.x\u002Fguide\u002Fai\u002Fllms-txt",{"title":357,"titleTemplate":358,"icon":359,"path":1306,"stem":361,"children":1307,"page":106},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules",[1308,1310,1312,1314,1316,1318,1320,1322],{"title":364,"description":365,"path":1309,"stem":361},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fgetting-started",{"title":368,"description":369,"path":1311,"stem":371},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fmodule-anatomy",{"title":373,"description":374,"path":1313,"stem":376},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Frecipes-basics",{"title":378,"description":379,"path":1315,"stem":381},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fmodule-dependencies",{"title":383,"description":384,"path":1317,"stem":386},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Frecipes-advanced",{"title":388,"description":389,"path":1319,"stem":391},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Ftesting",{"title":393,"description":394,"path":1321,"stem":396},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fbest-practices",{"title":398,"description":399,"path":1323,"stem":401},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fecosystem",{"title":403,"titleTemplate":404,"icon":405,"path":1325,"stem":407,"children":1326,"page":106},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes",[1327,1329,1331,1333,1335],{"title":410,"description":411,"path":1328,"stem":407},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes\u002Fcustom-routing",{"title":414,"description":415,"path":1330,"stem":417},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes\u002Fvite-plugin",{"title":419,"description":420,"path":1332,"stem":422},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes\u002Fcustom-usefetch",{"title":424,"description":425,"path":1334,"stem":427},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes\u002Fsessions-and-authentication",{"title":429,"description":430,"path":1336,"stem":432},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes\u002Fmostly-static-sites",{"title":434,"titleTemplate":435,"icon":436,"path":1338,"stem":438,"children":1339,"page":106},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further",[1340,1342,1344,1346,1348,1350,1352,1354,1356,1358,1360],{"title":441,"description":442,"path":1341,"stem":438},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fevents",{"title":445,"description":446,"path":1343,"stem":448},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fexperimental-features",{"title":450,"description":451,"path":1345,"stem":453},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Ffeatures",{"title":455,"description":456,"path":1347,"stem":458},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fhooks",{"title":460,"description":461,"path":1349,"stem":463},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fkit",{"title":465,"description":466,"path":1351,"stem":468},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fnuxt-app",{"title":470,"description":83,"path":1353,"stem":472},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Flayers",{"title":474,"description":475,"path":1355,"stem":477},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fbuilders",{"title":479,"description":480,"path":1357,"stem":482},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fdebugging",{"title":484,"description":485,"path":1359,"stem":487},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fruntime-config",{"title":489,"description":490,"path":1361,"stem":492},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fnightly-release-channel",{"title":494,"titleTemplate":495,"icon":496,"path":1363,"stem":498,"children":1364,"page":106},"\u002Fdocs\u002F4.x\u002Fapi",[1365,1400,1469,1530,1571,1578],{"title":501,"titleTemplate":502,"icon":359,"path":1366,"stem":498,"children":1367,"page":106},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents",[1368,1370,1372,1374,1376,1378,1380,1382,1384,1386,1388,1390,1392,1394,1396,1398],{"title":506,"description":507,"path":1369,"stem":498},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fclient-only",{"title":510,"description":511,"path":1371,"stem":513},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fdev-only",{"title":515,"description":516,"path":1373,"stem":518},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-client-fallback",{"title":520,"description":521,"path":1375,"stem":523},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-page",{"title":525,"description":526,"path":1377,"stem":528},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-layout",{"title":530,"description":531,"path":1379,"stem":533},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-link",{"title":535,"description":536,"path":1381,"stem":538},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-loading-indicator",{"title":540,"description":541,"path":1383,"stem":543},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-error-boundary",{"title":545,"description":546,"path":1385,"stem":548},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-welcome",{"title":550,"description":551,"path":1387,"stem":553},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-island",{"title":555,"description":556,"path":1389,"stem":558},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-img",{"title":560,"description":561,"path":1391,"stem":563},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-picture",{"title":565,"description":566,"path":1393,"stem":568},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fteleports",{"title":570,"description":571,"path":1395,"stem":573},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-route-announcer",{"title":575,"description":576,"path":1397,"stem":578},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-time",{"title":580,"description":581,"path":1399,"stem":583},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-announcer",{"title":585,"titleTemplate":586,"icon":587,"path":1401,"stem":589,"children":1402,"page":106},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables",[1403,1405,1407,1409,1411,1413,1415,1417,1419,1421,1423,1425,1427,1429,1431,1433,1435,1437,1439,1441,1443,1445,1447,1449,1451,1453,1455,1457,1459,1461,1463,1465,1467],{"title":592,"description":593,"path":1404,"stem":589},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fcreate-use-async-data",{"title":596,"description":597,"path":1406,"stem":599},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fcreate-use-fetch",{"title":601,"description":602,"path":1408,"stem":604},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fon-prehydrate",{"title":606,"description":607,"path":1410,"stem":609},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-announcer",{"title":611,"description":612,"path":1412,"stem":614},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-app-config",{"title":616,"description":617,"path":1414,"stem":619},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-async-data",{"title":621,"description":622,"path":1416,"stem":624},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-cookie",{"title":626,"description":627,"path":1418,"stem":629},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-error",{"title":631,"description":632,"path":1420,"stem":634},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-fetch",{"title":636,"description":637,"path":1422,"stem":639},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-head",{"title":641,"description":642,"path":1424,"stem":644},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-head-safe",{"title":646,"description":647,"path":1426,"stem":649},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-hydration",{"title":651,"description":652,"path":1428,"stem":654},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-layout",{"title":656,"description":657,"path":1430,"stem":659},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-async-data",{"title":661,"description":662,"path":1432,"stem":664},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-fetch",{"title":666,"description":667,"path":1434,"stem":669},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-loading-indicator",{"title":671,"description":672,"path":1436,"stem":674},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-app",{"title":676,"description":677,"path":1438,"stem":679},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-data",{"title":681,"description":682,"path":1440,"stem":684},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-preview-mode",{"title":686,"description":687,"path":1442,"stem":689},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-event",{"title":691,"description":692,"path":1444,"stem":694},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-fetch",{"title":696,"description":697,"path":1446,"stem":699},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-header",{"title":701,"description":702,"path":1448,"stem":704},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-headers",{"title":706,"description":707,"path":1450,"stem":709},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-url",{"title":711,"description":712,"path":1452,"stem":714},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-response-header",{"title":716,"description":717,"path":1454,"stem":719},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-route",{"title":721,"description":722,"path":1456,"stem":724},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-route-announcer",{"title":726,"description":727,"path":1458,"stem":729},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-router",{"title":731,"description":732,"path":1460,"stem":734},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-config",{"title":736,"description":737,"path":1462,"stem":739},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-hook",{"title":741,"description":742,"path":1464,"stem":744},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-seo-meta",{"title":746,"description":747,"path":1466,"stem":749},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-server-seo-meta",{"title":751,"description":752,"path":1468,"stem":754},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-state",{"title":756,"titleTemplate":757,"path":1470,"stem":759,"children":1471,"page":106},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils",[1472,1474,1476,1478,1480,1482,1484,1486,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510,1512,1514,1516,1518,1520,1522,1524,1526,1528],{"title":762,"description":763,"path":1473,"stem":759},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdollarfetch",{"title":766,"description":767,"path":1475,"stem":769},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fabort-navigation",{"title":771,"description":772,"path":1477,"stem":774},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fadd-route-middleware",{"title":776,"description":777,"path":1479,"stem":779},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fcall-once",{"title":781,"description":782,"path":1481,"stem":784},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fclear-error",{"title":786,"description":787,"path":1483,"stem":789},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fclear-nuxt-data",{"title":791,"description":792,"path":1485,"stem":794},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fclear-nuxt-state",{"title":796,"description":797,"path":1487,"stem":799},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fcreate-error",{"title":801,"description":802,"path":1489,"stem":804},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-lazy-hydration-component",{"title":806,"description":807,"path":1491,"stem":809},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-nuxt-component",{"title":811,"description":812,"path":1493,"stem":814},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-nuxt-plugin",{"title":816,"description":817,"path":1495,"stem":819},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-nuxt-route-middleware",{"title":821,"description":822,"path":1497,"stem":824},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-page-meta",{"title":826,"description":827,"path":1499,"stem":829},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-route-rules",{"title":831,"description":832,"path":1501,"stem":834},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fnavigate-to",{"title":836,"description":837,"path":1503,"stem":839},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fon-before-route-leave",{"title":841,"description":842,"path":1505,"stem":844},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fon-before-route-update",{"title":846,"description":847,"path":1507,"stem":849},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fon-nuxt-ready",{"title":851,"description":852,"path":1509,"stem":854},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fprefetch-components",{"title":856,"description":857,"path":1511,"stem":859},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fpreload-components",{"title":861,"description":862,"path":1513,"stem":864},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fpreload-route-components",{"title":866,"description":867,"path":1515,"stem":869},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fprerender-routes",{"title":871,"description":872,"path":1517,"stem":874},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Frefresh-cookie",{"title":876,"description":877,"path":1519,"stem":879},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Frefresh-nuxt-data",{"title":881,"description":882,"path":1521,"stem":884},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Freload-nuxt-app",{"title":886,"description":887,"path":1523,"stem":889},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fset-page-layout",{"title":891,"description":892,"path":1525,"stem":894},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fset-response-status",{"title":896,"description":897,"path":1527,"stem":899},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fshow-error",{"title":901,"description":902,"path":1529,"stem":904},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fupdate-app-config",{"title":460,"titleTemplate":906,"path":1531,"stem":908,"children":1532,"page":106},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit",[1533,1535,1537,1539,1541,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561,1563,1565,1567,1569],{"title":290,"description":911,"path":1534,"stem":908},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fmodules",{"title":914,"description":915,"path":1536,"stem":917},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fprogrammatic",{"title":919,"description":920,"path":1538,"stem":922},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fcompatibility",{"title":280,"description":924,"path":1540,"stem":926},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fautoimports",{"title":501,"description":928,"path":1542,"stem":930},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fcomponents",{"title":932,"description":933,"path":1544,"stem":935},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fcontext",{"title":937,"description":938,"path":1546,"stem":940},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fpages",{"title":942,"description":943,"path":1548,"stem":945},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Flayout",{"title":947,"description":948,"path":1550,"stem":950},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fhead",{"title":952,"description":953,"path":1552,"stem":955},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fplugins",{"title":484,"description":957,"path":1554,"stem":959},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fruntime-config",{"title":961,"description":962,"path":1556,"stem":964},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Ftemplates",{"title":966,"description":967,"path":1558,"stem":969},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fapp-config",{"title":971,"description":972,"path":1560,"stem":974},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fnitro",{"title":976,"description":977,"path":1562,"stem":979},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fresolving",{"title":981,"description":982,"path":1564,"stem":984},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Flogging",{"title":986,"description":987,"path":1566,"stem":989},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fbuilder",{"title":991,"description":992,"path":1568,"stem":994},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fexamples",{"title":82,"description":996,"path":1570,"stem":998},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Flayers",{"icon":1000,"title":1001,"path":1572,"stem":1003,"children":1573,"page":106},"\u002Fdocs\u002F4.x\u002Fapi\u002Fadvanced",[1574,1576],{"title":455,"description":456,"path":1575,"stem":1003},"\u002Fdocs\u002F4.x\u002Fapi\u002Fadvanced\u002Fhooks",{"title":1008,"description":1009,"path":1577,"stem":1011},"\u002Fdocs\u002F4.x\u002Fapi\u002Fadvanced\u002Fimport-meta",{"title":1013,"description":1014,"path":1579,"stem":1016},"\u002Fdocs\u002F4.x\u002Fapi\u002Fnuxt-config",{"title":1018,"titleTemplate":1019,"icon":1020,"path":1581,"stem":1022,"children":1582,"page":106},"\u002Fdocs\u002F4.x\u002Fcommunity",[1583,1585,1587,1589,1591,1593],{"title":1025,"description":1026,"path":1584,"stem":1022,"icon":1028},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Fgetting-help",{"title":1030,"description":1031,"path":1586,"stem":1033},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Freporting-bugs",{"title":1035,"description":1036,"path":1588,"stem":1038},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Fcontribution",{"title":1040,"description":1041,"path":1590,"stem":1043},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Fframework-contribution",{"title":1045,"description":1046,"path":1592,"stem":1048},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Froadmap",{"title":1050,"description":1051,"path":1594,"stem":1053},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Fchangelog",{"title":1055,"titleTemplate":1056,"icon":1057,"path":1596,"stem":1059,"children":1597,"page":106},"\u002Fdocs\u002F4.x\u002Fbridge",[1598,1600,1602,1604,1606,1608,1610,1612,1614,1616],{"title":1062,"description":1063,"path":1599,"stem":1059},"\u002Fdocs\u002F4.x\u002Fbridge\u002Foverview",{"title":300,"description":1066,"path":1601,"stem":1068},"\u002Fdocs\u002F4.x\u002Fbridge\u002Ftypescript",{"title":1070,"description":1071,"path":1603,"stem":1073},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fbridge-composition-api",{"title":1075,"description":1076,"path":1605,"stem":1078},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fplugins-and-middleware",{"title":1080,"description":1081,"path":1607,"stem":1083},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fnuxt3-compatible-api",{"title":1085,"description":1086,"path":1609,"stem":1088},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fmeta",{"title":484,"description":485,"path":1611,"stem":1091},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fruntime-config",{"title":971,"description":1093,"path":1613,"stem":1095},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fnitro",{"title":1097,"description":1098,"path":1615,"stem":1100},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fvite",{"title":27,"description":1102,"path":1617,"stem":1104},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fconfiguration",{"title":1106,"titleTemplate":1107,"icon":1108,"path":1619,"stem":1110,"children":1620,"page":106},"\u002Fdocs\u002F4.x\u002Fmigration",[1621,1623,1625,1627,1629,1631,1633,1635,1637,1639,1641],{"title":1062,"description":1113,"path":1622,"stem":1110},"\u002Fdocs\u002F4.x\u002Fmigration\u002Foverview",{"title":27,"description":1116,"path":1624,"stem":1118},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fconfiguration",{"title":1120,"description":1121,"path":1626,"stem":1123},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fauto-imports",{"title":1085,"description":1125,"path":1628,"stem":1127},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fmeta",{"title":1075,"description":1129,"path":1630,"stem":1131},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fplugins-and-middleware",{"title":1133,"description":1134,"path":1632,"stem":1136},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fpages-and-layouts",{"title":1138,"description":1139,"path":1634,"stem":1141},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fcomponent-options",{"title":484,"description":1143,"path":1636,"stem":1145},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fruntime-config",{"title":1147,"description":1148,"path":1638,"stem":1150},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fbundling",{"title":77,"description":1152,"path":1640,"stem":1154},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fserver",{"title":290,"description":1156,"path":1642,"stem":1158},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fmodule-authors",{"title":5,"icon":6,"path":1644,"stem":8,"children":1645,"page":106},"\u002Fdocs\u002F3.x",[1646,1685,1753,1843,2142,2157,2180],{"title":11,"titleTemplate":12,"icon":13,"path":1647,"stem":8,"children":1648,"page":106},"\u002Fdocs\u002F3.x\u002Fgetting-started",[1649,1651,1653,1655,1657,1659,1661,1663,1665,1667,1669,1671,1673,1675,1677,1679,1681,1683],{"title":17,"description":18,"path":1650,"stem":8,"icon":20},"\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fintroduction",{"title":22,"description":23,"path":1652,"stem":25},"\u002Fdocs\u002F3.x\u002Fgetting-started\u002Finstallation",{"title":27,"description":28,"path":1654,"stem":30},"\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fconfiguration",{"title":32,"description":33,"path":1656,"stem":35},"\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fviews",{"title":37,"description":38,"path":1658,"stem":40},"\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fassets",{"title":42,"description":43,"path":1660,"stem":45},"\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fstyling",{"title":47,"description":48,"path":1662,"stem":50},"\u002Fdocs\u002F3.x\u002Fgetting-started\u002Frouting",{"title":52,"description":53,"path":1664,"stem":55},"\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fseo-meta",{"title":57,"description":58,"path":1666,"stem":60},"\u002Fdocs\u002F3.x\u002Fgetting-started\u002Ftransitions",{"title":62,"description":63,"path":1668,"stem":65},"\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fdata-fetching",{"title":67,"description":68,"path":1670,"stem":70},"\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fstate-management",{"title":72,"description":73,"path":1672,"stem":75},"\u002Fdocs\u002F3.x\u002Fgetting-started\u002Ferror-handling",{"title":77,"description":78,"path":1674,"stem":80},"\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fserver",{"title":82,"description":83,"path":1676,"stem":85},"\u002Fdocs\u002F3.x\u002Fgetting-started\u002Flayers",{"title":87,"description":88,"path":1678,"stem":90},"\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fprerendering",{"title":92,"description":93,"path":1680,"stem":95},"\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fdeployment",{"title":97,"description":98,"path":1682,"stem":100},"\u002Fdocs\u002F3.x\u002Fgetting-started\u002Ftesting",{"title":102,"description":103,"path":1684,"stem":105},"\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fupgrade",{"title":108,"titleTemplate":109,"icon":110,"path":1686,"stem":112,"children":1687,"page":106},"\u002Fdocs\u002F3.x\u002Fdirectory-structure",[1688,1690,1692,1695,1698,1701,1703,1705,1708,1711,1713,1715,1718,1721,1723,1725,1727,1730,1732,1734,1736,1738,1741,1744,1747,1749,1751],{"title":115,"description":116,"path":1689,"stem":112},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fnuxt",{"title":119,"description":120,"path":1691,"stem":122},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Foutput",{"title":130,"description":131,"path":1693,"stem":1694},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fassets","2.directory-structure\u002F1.assets",{"title":134,"description":135,"path":1696,"stem":1697},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fcomponents","2.directory-structure\u002F1.components",{"title":139,"description":140,"path":1699,"stem":1700},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fcomposables","2.directory-structure\u002F1.composables",{"title":184,"description":185,"path":1702,"stem":187},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fcontent",{"title":189,"description":190,"path":1704,"stem":192},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Flayers",{"title":144,"description":145,"path":1706,"stem":1707},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Flayouts","2.directory-structure\u002F1.layouts",{"title":149,"description":150,"path":1709,"stem":1710},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fmiddleware","2.directory-structure\u002F1.middleware",{"title":194,"description":195,"path":1712,"stem":197},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fmodules",{"title":199,"description":200,"path":1714,"stem":202},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fnode_modules",{"title":154,"description":155,"path":1716,"stem":1717},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fpages","2.directory-structure\u002F1.pages",{"title":159,"description":160,"path":1719,"stem":1720},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fplugins","2.directory-structure\u002F1.plugins",{"title":204,"description":205,"path":1722,"stem":207},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fpublic",{"title":209,"description":210,"path":1724,"stem":212},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fserver",{"title":214,"description":215,"path":1726,"stem":217},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fshared",{"title":164,"description":165,"path":1728,"stem":1729},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Futils","2.directory-structure\u002F1.utils",{"title":224,"description":225,"path":1731,"stem":227},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fenv",{"title":229,"description":230,"path":1733,"stem":232},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fgitignore",{"title":234,"description":235,"path":1735,"stem":237},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fnuxtignore",{"title":239,"description":240,"path":1737,"stem":242},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fnuxtrc",{"title":169,"description":170,"path":1739,"stem":1740},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fapp","2.directory-structure\u002F3.app",{"title":174,"description":175,"path":1742,"stem":1743},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fapp-config","2.directory-structure\u002F3.app-config",{"title":179,"description":180,"path":1745,"stem":1746},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Ferror","2.directory-structure\u002F3.error",{"title":244,"description":245,"path":1748,"stem":247},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fnuxt-config",{"title":249,"description":250,"path":1750,"stem":252},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fpackage",{"title":254,"description":255,"path":1752,"stem":257},"\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Ftsconfig",{"title":259,"icon":260,"path":1754,"stem":262,"children":1755,"page":106},"\u002Fdocs\u002F3.x\u002Fguide",[1756,1773,1783,1790,1809,1820],{"title":265,"titleTemplate":266,"icon":267,"path":1757,"stem":262,"children":1758,"page":106},"\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts",[1759,1761,1763,1765,1767,1769,1771],{"title":271,"description":272,"path":1760,"stem":262},"\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Frendering",{"title":275,"description":276,"path":1762,"stem":278},"\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Fnuxt-lifecycle",{"title":280,"description":281,"path":1764,"stem":283},"\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Fauto-imports",{"title":285,"description":286,"path":1766,"stem":288},"\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Fserver-engine",{"title":290,"description":291,"path":1768,"stem":293},"\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Fmodules",{"title":300,"description":301,"path":1770,"stem":303},"\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Ftypescript",{"title":305,"description":306,"path":1772,"stem":308},"\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Fcode-style",{"title":310,"titleTemplate":311,"icon":312,"path":1774,"stem":329,"children":1775,"page":106},"\u002Fdocs\u002F3.x\u002Fguide\u002Fbest-practices",[1776,1779,1781],{"title":1777,"description":327,"path":1778,"stem":329},"Nuxt and hydration","\u002Fdocs\u002F3.x\u002Fguide\u002Fbest-practices\u002Fhydration",{"title":331,"description":332,"path":1780,"stem":334},"\u002Fdocs\u002F3.x\u002Fguide\u002Fbest-practices\u002Fperformance",{"title":336,"description":337,"path":1782,"stem":339},"\u002Fdocs\u002F3.x\u002Fguide\u002Fbest-practices\u002Fplugins",{"title":341,"titleTemplate":342,"icon":343,"path":1784,"stem":345,"children":1785,"page":106},"\u002Fdocs\u002F3.x\u002Fguide\u002Fai",[1786,1788],{"title":348,"description":349,"path":1787,"stem":345},"\u002Fdocs\u002F3.x\u002Fguide\u002Fai\u002Fmcp",{"title":352,"description":353,"path":1789,"stem":355},"\u002Fdocs\u002F3.x\u002Fguide\u002Fai\u002Fllms-txt",{"title":357,"titleTemplate":358,"icon":359,"path":1791,"stem":361,"children":1792,"page":106},"\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules",[1793,1795,1797,1799,1801,1803,1805,1807],{"title":364,"description":365,"path":1794,"stem":361},"\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Fgetting-started",{"title":368,"description":369,"path":1796,"stem":371},"\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Fmodule-anatomy",{"title":373,"description":374,"path":1798,"stem":376},"\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Frecipes-basics",{"title":378,"description":379,"path":1800,"stem":381},"\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Fmodule-dependencies",{"title":383,"description":384,"path":1802,"stem":386},"\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Frecipes-advanced",{"title":388,"description":389,"path":1804,"stem":391},"\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Ftesting",{"title":393,"description":394,"path":1806,"stem":396},"\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Fbest-practices",{"title":398,"description":399,"path":1808,"stem":401},"\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Fecosystem",{"title":403,"titleTemplate":404,"icon":405,"path":1810,"stem":407,"children":1811,"page":106},"\u002Fdocs\u002F3.x\u002Fguide\u002Frecipes",[1812,1814,1816,1818],{"title":410,"description":411,"path":1813,"stem":407},"\u002Fdocs\u002F3.x\u002Fguide\u002Frecipes\u002Fcustom-routing",{"title":414,"description":415,"path":1815,"stem":417},"\u002Fdocs\u002F3.x\u002Fguide\u002Frecipes\u002Fvite-plugin",{"title":419,"description":420,"path":1817,"stem":422},"\u002Fdocs\u002F3.x\u002Fguide\u002Frecipes\u002Fcustom-usefetch",{"title":424,"description":425,"path":1819,"stem":427},"\u002Fdocs\u002F3.x\u002Fguide\u002Frecipes\u002Fsessions-and-authentication",{"title":434,"titleTemplate":435,"icon":436,"path":1821,"stem":438,"children":1822,"page":106},"\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further",[1823,1825,1827,1829,1831,1833,1835,1837,1839,1841],{"title":441,"description":442,"path":1824,"stem":438},"\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fevents",{"title":445,"description":446,"path":1826,"stem":448},"\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fexperimental-features",{"title":450,"description":451,"path":1828,"stem":453},"\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Ffeatures",{"title":455,"description":456,"path":1830,"stem":458},"\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fhooks",{"title":460,"description":461,"path":1832,"stem":463},"\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fkit",{"title":465,"description":466,"path":1834,"stem":468},"\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fnuxt-app",{"title":470,"description":83,"path":1836,"stem":472},"\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Flayers",{"title":479,"description":480,"path":1838,"stem":482},"\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fdebugging",{"title":484,"description":485,"path":1840,"stem":487},"\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fruntime-config",{"title":489,"description":490,"path":1842,"stem":492},"\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fnightly-release-channel",{"title":494,"titleTemplate":495,"icon":496,"path":1844,"stem":498,"children":1845,"page":106},"\u002Fdocs\u002F3.x\u002Fapi",[1846,1879,1940,2001,2087,2133,2140],{"title":501,"titleTemplate":502,"icon":359,"path":1847,"stem":498,"children":1848,"page":106},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents",[1849,1851,1853,1855,1857,1859,1861,1863,1865,1867,1869,1871,1873,1875,1877],{"title":506,"description":507,"path":1850,"stem":498},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fclient-only",{"title":510,"description":511,"path":1852,"stem":513},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fdev-only",{"title":515,"description":516,"path":1854,"stem":518},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-client-fallback",{"title":520,"description":521,"path":1856,"stem":523},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-page",{"title":525,"description":526,"path":1858,"stem":528},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-layout",{"title":530,"description":531,"path":1860,"stem":533},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-link",{"title":535,"description":536,"path":1862,"stem":538},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-loading-indicator",{"title":540,"description":541,"path":1864,"stem":543},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-error-boundary",{"title":545,"description":546,"path":1866,"stem":548},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-welcome",{"title":550,"description":551,"path":1868,"stem":553},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-island",{"title":555,"description":556,"path":1870,"stem":558},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-img",{"title":560,"description":561,"path":1872,"stem":563},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-picture",{"title":565,"description":566,"path":1874,"stem":568},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fteleports",{"title":570,"description":571,"path":1876,"stem":573},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-route-announcer",{"title":575,"description":576,"path":1878,"stem":578},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-time",{"title":585,"titleTemplate":586,"icon":587,"path":1880,"stem":604,"children":1881,"page":106},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables",[1882,1884,1886,1888,1890,1892,1894,1896,1898,1900,1902,1904,1906,1908,1910,1912,1914,1916,1918,1920,1922,1924,1926,1928,1930,1932,1934,1936,1938],{"title":601,"description":602,"path":1883,"stem":604},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fon-prehydrate",{"title":611,"description":612,"path":1885,"stem":614},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-app-config",{"title":616,"description":617,"path":1887,"stem":619},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-async-data",{"title":621,"description":622,"path":1889,"stem":624},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-cookie",{"title":626,"description":627,"path":1891,"stem":629},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-error",{"title":631,"description":632,"path":1893,"stem":634},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-fetch",{"title":636,"description":637,"path":1895,"stem":639},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-head",{"title":641,"description":642,"path":1897,"stem":644},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-head-safe",{"title":646,"description":647,"path":1899,"stem":649},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-hydration",{"title":656,"description":657,"path":1901,"stem":659},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-async-data",{"title":661,"description":662,"path":1903,"stem":664},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-fetch",{"title":666,"description":667,"path":1905,"stem":669},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-loading-indicator",{"title":671,"description":672,"path":1907,"stem":674},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-app",{"title":676,"description":677,"path":1909,"stem":679},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-data",{"title":681,"description":682,"path":1911,"stem":684},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-preview-mode",{"title":686,"description":687,"path":1913,"stem":689},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-request-event",{"title":691,"description":692,"path":1915,"stem":694},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-request-fetch",{"title":696,"description":697,"path":1917,"stem":699},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-request-header",{"title":701,"description":702,"path":1919,"stem":704},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-request-headers",{"title":706,"description":707,"path":1921,"stem":709},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-request-url",{"title":711,"description":712,"path":1923,"stem":714},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-response-header",{"title":716,"description":717,"path":1925,"stem":719},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-route",{"title":721,"description":722,"path":1927,"stem":724},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-route-announcer",{"title":726,"description":727,"path":1929,"stem":729},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-router",{"title":731,"description":732,"path":1931,"stem":734},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-config",{"title":736,"description":737,"path":1933,"stem":739},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-hook",{"title":741,"description":742,"path":1935,"stem":744},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-seo-meta",{"title":746,"description":747,"path":1937,"stem":749},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-server-seo-meta",{"title":751,"description":752,"path":1939,"stem":754},"\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-state",{"title":756,"titleTemplate":757,"path":1941,"stem":759,"children":1942,"page":106},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils",[1943,1945,1947,1949,1951,1953,1955,1957,1959,1961,1963,1965,1967,1969,1971,1973,1975,1977,1979,1981,1983,1985,1987,1989,1991,1993,1995,1997,1999],{"title":762,"description":763,"path":1944,"stem":759},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdollarfetch",{"title":766,"description":767,"path":1946,"stem":769},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fabort-navigation",{"title":771,"description":772,"path":1948,"stem":774},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fadd-route-middleware",{"title":776,"description":777,"path":1950,"stem":779},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fcall-once",{"title":781,"description":782,"path":1952,"stem":784},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fclear-error",{"title":786,"description":787,"path":1954,"stem":789},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fclear-nuxt-data",{"title":791,"description":792,"path":1956,"stem":794},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fclear-nuxt-state",{"title":796,"description":797,"path":1958,"stem":799},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fcreate-error",{"title":801,"description":802,"path":1960,"stem":804},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdefine-lazy-hydration-component",{"title":806,"description":807,"path":1962,"stem":809},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdefine-nuxt-component",{"title":811,"description":812,"path":1964,"stem":814},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdefine-nuxt-plugin",{"title":816,"description":817,"path":1966,"stem":819},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdefine-nuxt-route-middleware",{"title":821,"description":822,"path":1968,"stem":824},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdefine-page-meta",{"title":826,"description":827,"path":1970,"stem":829},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdefine-route-rules",{"title":831,"description":832,"path":1972,"stem":834},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fnavigate-to",{"title":836,"description":837,"path":1974,"stem":839},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fon-before-route-leave",{"title":841,"description":842,"path":1976,"stem":844},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fon-before-route-update",{"title":846,"description":847,"path":1978,"stem":849},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fon-nuxt-ready",{"title":851,"description":852,"path":1980,"stem":854},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fprefetch-components",{"title":856,"description":857,"path":1982,"stem":859},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fpreload-components",{"title":861,"description":862,"path":1984,"stem":864},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fpreload-route-components",{"title":866,"description":867,"path":1986,"stem":869},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fprerender-routes",{"title":871,"description":872,"path":1988,"stem":874},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Frefresh-cookie",{"title":876,"description":877,"path":1990,"stem":879},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Frefresh-nuxt-data",{"title":881,"description":882,"path":1992,"stem":884},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Freload-nuxt-app",{"title":886,"description":887,"path":1994,"stem":889},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fset-page-layout",{"title":891,"description":892,"path":1996,"stem":894},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fset-response-status",{"title":896,"description":897,"path":1998,"stem":899},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fshow-error",{"title":901,"description":902,"path":2000,"stem":904},"\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fupdate-app-config",{"title":2002,"titleTemplate":2003,"icon":2004,"path":2005,"stem":2006,"children":2007,"page":106},"Commands","%s · Nuxt Commands","i-lucide-square-terminal","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands","4.api\u002F4.commands\u002Fadd",[2008,2012,2017,2022,2027,2032,2037,2042,2047,2052,2057,2062,2067,2072,2077,2082],{"title":2009,"description":2010,"path":2011,"stem":2006},"nuxt add","Scaffold an entity into your Nuxt application.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fadd",{"title":2013,"description":2014,"path":2015,"stem":2016},"nuxt analyze","Analyze the production bundle or your Nuxt application.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fanalyze","4.api\u002F4.commands\u002Fanalyze",{"title":2018,"description":2019,"path":2020,"stem":2021},"nuxt build","Build your Nuxt application.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fbuild","4.api\u002F4.commands\u002Fbuild",{"title":2023,"description":2024,"path":2025,"stem":2026},"nuxt build-module","Nuxt command to build your Nuxt module before publishing.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fbuild-module","4.api\u002F4.commands\u002Fbuild-module",{"title":2028,"description":2029,"path":2030,"stem":2031},"nuxt cleanup","Remove common generated Nuxt files and caches.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fcleanup","4.api\u002F4.commands\u002Fcleanup",{"title":2033,"description":2034,"path":2035,"stem":2036},"nuxt dev","The dev command starts a development server with hot module replacement at http:\u002F\u002Flocalhost:3000","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fdev","4.api\u002F4.commands\u002Fdev",{"title":2038,"description":2039,"path":2040,"stem":2041},"nuxt devtools","The devtools command allows you to enable or disable Nuxt DevTools on a per-project basis.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fdevtools","4.api\u002F4.commands\u002Fdevtools",{"title":2043,"description":2044,"path":2045,"stem":2046},"nuxt generate","Pre-renders every route of the application and stores the result in plain HTML files.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fgenerate","4.api\u002F4.commands\u002Fgenerate",{"title":2048,"description":2049,"path":2050,"stem":2051},"nuxt info","The info command logs information about the current or specified Nuxt project.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Finfo","4.api\u002F4.commands\u002Finfo",{"title":2053,"description":2054,"path":2055,"stem":2056},"create nuxt","The init command initializes a fresh Nuxt project.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Finit","4.api\u002F4.commands\u002Finit",{"title":2058,"description":2059,"path":2060,"stem":2061},"nuxt module","Search and add modules to your Nuxt application with the command line.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fmodule","4.api\u002F4.commands\u002Fmodule",{"title":2063,"description":2064,"path":2065,"stem":2066},"nuxt prepare","The prepare command creates a .nuxt directory in your application and generates types.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fprepare","4.api\u002F4.commands\u002Fprepare",{"title":2068,"description":2069,"path":2070,"stem":2071},"nuxt preview","The preview command starts a server to preview your application after the build command.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fpreview","4.api\u002F4.commands\u002Fpreview",{"title":2073,"description":2074,"path":2075,"stem":2076},"nuxt test","The test command runs tests using @nuxt\u002Ftest-utils.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Ftest","4.api\u002F4.commands\u002Ftest",{"title":2078,"description":2079,"path":2080,"stem":2081},"nuxt typecheck","The typecheck command runs vue-tsc to check types throughout your app.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Ftypecheck","4.api\u002F4.commands\u002Ftypecheck",{"title":2083,"description":2084,"path":2085,"stem":2086},"nuxt upgrade","The upgrade command upgrades Nuxt to the latest version.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fupgrade","4.api\u002F4.commands\u002Fupgrade",{"title":460,"titleTemplate":906,"path":2088,"stem":908,"children":2089,"page":106},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit",[2090,2092,2094,2096,2098,2100,2102,2104,2106,2108,2110,2112,2114,2117,2121,2124,2127,2130],{"title":290,"description":911,"path":2091,"stem":908},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fmodules",{"title":914,"description":915,"path":2093,"stem":917},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fprogrammatic",{"title":919,"description":920,"path":2095,"stem":922},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fcompatibility",{"title":280,"description":924,"path":2097,"stem":926},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fautoimports",{"title":501,"description":928,"path":2099,"stem":930},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fcomponents",{"title":932,"description":933,"path":2101,"stem":935},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fcontext",{"title":937,"description":938,"path":2103,"stem":940},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fpages",{"title":942,"description":943,"path":2105,"stem":945},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Flayout",{"title":947,"description":948,"path":2107,"stem":950},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fhead",{"title":952,"description":953,"path":2109,"stem":955},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fplugins",{"title":484,"description":957,"path":2111,"stem":959},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fruntime-config",{"title":961,"description":962,"path":2113,"stem":964},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Ftemplates",{"title":971,"description":972,"path":2115,"stem":2116},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fnitro","4.api\u002F5.kit\u002F11.nitro",{"title":976,"description":2118,"path":2119,"stem":2120},"Nuxt Kit provides a set of utilities to help you resolve paths. These functions allow you to resolve paths relative to the current module, with unknown name or extension.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fresolving","4.api\u002F5.kit\u002F12.resolving",{"title":981,"description":982,"path":2122,"stem":2123},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Flogging","4.api\u002F5.kit\u002F13.logging",{"title":986,"description":987,"path":2125,"stem":2126},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fbuilder","4.api\u002F5.kit\u002F14.builder",{"title":991,"description":992,"path":2128,"stem":2129},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fexamples","4.api\u002F5.kit\u002F15.examples",{"title":82,"description":996,"path":2131,"stem":2132},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Flayers","4.api\u002F5.kit\u002F16.layers",{"icon":1000,"title":1001,"path":2134,"stem":1003,"children":2135,"page":106},"\u002Fdocs\u002F3.x\u002Fapi\u002Fadvanced",[2136,2138],{"title":455,"description":456,"path":2137,"stem":1003},"\u002Fdocs\u002F3.x\u002Fapi\u002Fadvanced\u002Fhooks",{"title":1008,"description":1009,"path":2139,"stem":1011},"\u002Fdocs\u002F3.x\u002Fapi\u002Fadvanced\u002Fimport-meta",{"title":1013,"description":1014,"path":2141,"stem":1016},"\u002Fdocs\u002F3.x\u002Fapi\u002Fnuxt-config",{"title":1018,"titleTemplate":1019,"icon":1020,"path":2143,"stem":1022,"children":2144,"page":106},"\u002Fdocs\u002F3.x\u002Fcommunity",[2145,2147,2149,2151,2153,2155],{"title":1025,"description":1026,"path":2146,"stem":1022,"icon":1028},"\u002Fdocs\u002F3.x\u002Fcommunity\u002Fgetting-help",{"title":1030,"description":1031,"path":2148,"stem":1033},"\u002Fdocs\u002F3.x\u002Fcommunity\u002Freporting-bugs",{"title":1035,"description":1036,"path":2150,"stem":1038},"\u002Fdocs\u002F3.x\u002Fcommunity\u002Fcontribution",{"title":1040,"description":1041,"path":2152,"stem":1043},"\u002Fdocs\u002F3.x\u002Fcommunity\u002Fframework-contribution",{"title":1045,"description":1046,"path":2154,"stem":1048},"\u002Fdocs\u002F3.x\u002Fcommunity\u002Froadmap",{"title":1050,"description":1051,"path":2156,"stem":1053},"\u002Fdocs\u002F3.x\u002Fcommunity\u002Fchangelog",{"title":1055,"titleTemplate":1056,"icon":1057,"path":2158,"stem":1059,"children":2159,"page":106},"\u002Fdocs\u002F3.x\u002Fbridge",[2160,2162,2164,2166,2168,2170,2172,2174,2176,2178],{"title":1062,"description":1063,"path":2161,"stem":1059},"\u002Fdocs\u002F3.x\u002Fbridge\u002Foverview",{"title":300,"description":1066,"path":2163,"stem":1068},"\u002Fdocs\u002F3.x\u002Fbridge\u002Ftypescript",{"title":1070,"description":1071,"path":2165,"stem":1073},"\u002Fdocs\u002F3.x\u002Fbridge\u002Fbridge-composition-api",{"title":1075,"description":1076,"path":2167,"stem":1078},"\u002Fdocs\u002F3.x\u002Fbridge\u002Fplugins-and-middleware",{"title":1080,"description":1081,"path":2169,"stem":1083},"\u002Fdocs\u002F3.x\u002Fbridge\u002Fnuxt3-compatible-api",{"title":1085,"description":1086,"path":2171,"stem":1088},"\u002Fdocs\u002F3.x\u002Fbridge\u002Fmeta",{"title":484,"description":485,"path":2173,"stem":1091},"\u002Fdocs\u002F3.x\u002Fbridge\u002Fruntime-config",{"title":971,"description":1093,"path":2175,"stem":1095},"\u002Fdocs\u002F3.x\u002Fbridge\u002Fnitro",{"title":1097,"description":1098,"path":2177,"stem":1100},"\u002Fdocs\u002F3.x\u002Fbridge\u002Fvite",{"title":27,"description":1102,"path":2179,"stem":1104},"\u002Fdocs\u002F3.x\u002Fbridge\u002Fconfiguration",{"title":1106,"titleTemplate":1107,"icon":1108,"path":2181,"stem":1110,"children":2182,"page":106},"\u002Fdocs\u002F3.x\u002Fmigration",[2183,2185,2187,2189,2191,2193,2195,2197,2199,2201,2203],{"title":1062,"description":1113,"path":2184,"stem":1110},"\u002Fdocs\u002F3.x\u002Fmigration\u002Foverview",{"title":27,"description":1116,"path":2186,"stem":1118},"\u002Fdocs\u002F3.x\u002Fmigration\u002Fconfiguration",{"title":1120,"description":1121,"path":2188,"stem":1123},"\u002Fdocs\u002F3.x\u002Fmigration\u002Fauto-imports",{"title":1085,"description":1125,"path":2190,"stem":1127},"\u002Fdocs\u002F3.x\u002Fmigration\u002Fmeta",{"title":1075,"description":1129,"path":2192,"stem":1131},"\u002Fdocs\u002F3.x\u002Fmigration\u002Fplugins-and-middleware",{"title":1133,"description":1134,"path":2194,"stem":1136},"\u002Fdocs\u002F3.x\u002Fmigration\u002Fpages-and-layouts",{"title":1138,"description":1139,"path":2196,"stem":1141},"\u002Fdocs\u002F3.x\u002Fmigration\u002Fcomponent-options",{"title":484,"description":1143,"path":2198,"stem":1145},"\u002Fdocs\u002F3.x\u002Fmigration\u002Fruntime-config",{"title":1147,"description":1148,"path":2200,"stem":1150},"\u002Fdocs\u002F3.x\u002Fmigration\u002Fbundling",{"title":77,"description":1152,"path":2202,"stem":1154},"\u002Fdocs\u002F3.x\u002Fmigration\u002Fserver",{"title":290,"description":1156,"path":2204,"stem":1158},"\u002Fdocs\u002F3.x\u002Fmigration\u002Fmodule-authors",{"title":2206,"icon":2207,"path":2208,"stem":2209,"children":2210,"page":106},"Blog","i-lucide-newspaper","\u002Fblog","blog",[2211,2215,2219,2223,2227,2231,2235,2239,2243,2247,2251,2255,2259,2263,2267,2271,2275,2279,2283,2287,2291,2295,2299,2303,2307,2311,2315,2319,2323,2327,2331,2335,2339,2343,2347,2351,2355,2359,2363,2367,2371,2375,2379,2383,2387,2391,2395,2399,2403,2407],{"title":2212,"path":2213,"stem":2214},"Announcing 3.0","\u002Fblog\u002Fv3","blog\u002F1.v3",{"title":2216,"path":2217,"stem":2218},"Nuxt 3.3","\u002Fblog\u002Fv3-3","blog\u002F10.v3-3",{"title":2220,"path":2221,"stem":2222},"Nuxt 3.4","\u002Fblog\u002Fv3-4","blog\u002F11.v3-4",{"title":2224,"path":2225,"stem":2226},"Nuxt 3.5","\u002Fblog\u002Fv3-5","blog\u002F12.v3-5",{"title":2228,"path":2229,"stem":2230},"Nuxt 3.6","\u002Fblog\u002Fv3-6","blog\u002F13.v3-6",{"title":2232,"path":2233,"stem":2234},"Nuxt on the Edge","\u002Fblog\u002Fnuxt-on-the-edge","blog\u002F14.nuxt-on-the-edge",{"title":2236,"path":2237,"stem":2238},"Nuxt 3.7","\u002Fblog\u002Fv3-7","blog\u002F15.v3-7",{"title":2240,"path":2241,"stem":2242},"A New Website","\u002Fblog\u002Fnew-website","blog\u002F16.new-website",{"title":2244,"path":2245,"stem":2246},"Nuxt 3.8","\u002Fblog\u002Fv3-8","blog\u002F17.v3-8",{"title":2248,"path":2249,"stem":2250},"Nuxt DevTools v1.0","\u002Fblog\u002Fnuxt-devtools-v1-0","blog\u002F18.nuxt-devtools-v1-0",{"title":2252,"path":2253,"stem":2254},"Nuxt 3.9","\u002Fblog\u002Fv3-9","blog\u002F19.v3-9",{"title":2256,"path":2257,"stem":2258},"Nuxt: A vision for 2023","\u002Fblog\u002Fvision-2023","blog\u002F2.vision-2023",{"title":2260,"path":2261,"stem":2262},"Nuxt 3.10","\u002Fblog\u002Fv3-10","blog\u002F20.v3-10",{"title":2264,"path":2265,"stem":2266},"The Evolution of Shiki v1.0","\u002Fblog\u002Fshiki-v1","blog\u002F21.shiki-v1",{"title":2268,"path":2269,"stem":2270},"Nuxt 3.11","\u002Fblog\u002Fv3-11","blog\u002F22.v3-11",{"title":2272,"path":2273,"stem":2274},"Nuxt: Looking forward","\u002Fblog\u002Flooking-forward-2024","blog\u002F23.looking-forward-2024",{"title":2276,"path":2277,"stem":2278},"Refreshed Nuxt ESLint Integrations","\u002Fblog\u002Feslint-module","blog\u002F24.eslint-module",{"title":2280,"path":2281,"stem":2282},"Nuxt 3.12","\u002Fblog\u002Fv3-12","blog\u002F25.v3-12",{"title":2284,"path":2285,"stem":2286},"Introducing Nuxt Scripts","\u002Fblog\u002Fnuxt-scripts","blog\u002F26.nuxt-scripts",{"title":2288,"path":2289,"stem":2290},"Nuxt 3.13","\u002Fblog\u002Fv3-13","blog\u002F27.v3-13",{"title":2292,"path":2293,"stem":2294},"Nuxt 3.14","\u002Fblog\u002Fv3-14","blog\u002F27.v3-14",{"title":2296,"path":2297,"stem":2298},"Introducing Nuxt Icon v1","\u002Fblog\u002Fnuxt-icon-v1-0","blog\u002F29.nuxt-icon-v1-0",{"title":2300,"path":2301,"stem":2302},"Introducing Nuxt DevTools","\u002Fblog\u002Fintroducing-nuxt-devtools","blog\u002F3.introducing-nuxt-devtools",{"title":2304,"path":2305,"stem":2306},"Announcing Nuxt 3 Release Candidate","\u002Fblog\u002Fnuxt3-rc","blog\u002F3.nuxt3-rc",{"title":2308,"path":2309,"stem":2310},"Nuxt 3.15","\u002Fblog\u002Fv3-15","blog\u002F30.v3-15",{"title":2312,"path":2313,"stem":2314},"Nuxt 3.16","\u002Fblog\u002Fv3-16","blog\u002F31.v3-16",{"title":2316,"path":2317,"stem":2318},"Nuxt UI v3","\u002Fblog\u002Fnuxt-ui-v3","blog\u002F32.nuxt-ui-v3",{"title":2320,"path":2321,"stem":2322},"Nuxt 3.17","\u002Fblog\u002Fv3-17","blog\u002F33.v3-17",{"title":2324,"path":2325,"stem":2326},"Roadmap to v4","\u002Fblog\u002Froadmap-v4","blog\u002F34.roadmap-v4",{"title":2328,"path":2329,"stem":2330},"Building a Privacy-First Feedback Widget","\u002Fblog\u002Fbuilding-a-feedback-widget","blog\u002F35.building-a-feedback-widget",{"title":2332,"path":2333,"stem":2334},"Announcing Nuxt 4.0","\u002Fblog\u002Fv4","blog\u002F36.v4",{"title":2336,"path":2337,"stem":2338},"Nuxt 3.18","\u002Fblog\u002Fv3-18","blog\u002F37.v3-18",{"title":2340,"path":2341,"stem":2342},"Nuxt 4.1","\u002Fblog\u002Fv4-1","blog\u002F38.v4-1",{"title":2344,"path":2345,"stem":2346},"Nuxt UI v4","\u002Fblog\u002Fnuxt-ui-v4","blog\u002F39.nuxt-ui-v4",{"title":2348,"path":2349,"stem":2350},"Nuxt 2 End-of-Life (EOL)","\u002Fblog\u002Fnuxt2-eol","blog\u002F4.nuxt2-eol",{"title":2352,"path":2353,"stem":2354},"Introducing Nuxt 3 Beta","\u002Fblog\u002Fnuxt3-beta","blog\u002F4.nuxt3-beta",{"title":2356,"path":2357,"stem":2358},"Building an MCP Server for Nuxt","\u002Fblog\u002Fbuilding-nuxt-mcp","blog\u002F40.building-nuxt-mcp",{"title":2360,"path":2361,"stem":2362},"Nuxt 4.2","\u002Fblog\u002Fv4-2","blog\u002F40.v4-2",{"title":2364,"path":2365,"stem":2366},"Nuxt Image v2","\u002Fblog\u002Fnuxt-image-v2","blog\u002F41.nuxt-image-v2",{"title":2368,"path":2369,"stem":2370},"Nuxt 4.3","\u002Fblog\u002Fv4-3","blog\u002F42.v4-3",{"title":2372,"path":2373,"stem":2374},"Nuxt 4.4","\u002Fblog\u002Fv4-4","blog\u002F43.v4-4",{"title":2376,"path":2377,"stem":2378},"Introducing the Nuxt Agent","\u002Fblog\u002Fintroducing-nuxt-agent","blog\u002F44.introducing-nuxt-agent",{"title":2380,"path":2381,"stem":2382},"Meet Nuxi","\u002Fblog\u002Fmeet-nuxi","blog\u002F45.meet-nuxi",{"title":2384,"path":2385,"stem":2386},"Nuxt 4.5","\u002Fblog\u002Fv4-5","blog\u002F46.v4-5",{"title":2388,"path":2389,"stem":2390},"Nuxt Security Patch Releases","\u002Fblog\u002Fv4-5-security","blog\u002F47.v4-5-security",{"title":2392,"path":2393,"stem":2394},"Going Full Static","\u002Fblog\u002Fgoing-full-static","blog\u002F5.going-full-static",{"title":2396,"path":2397,"stem":2398},"Introducing Smart Prefetching","\u002Fblog\u002Fintroducing-smart-prefetching","blog\u002F6.introducing-smart-prefetching",{"title":2400,"path":2401,"stem":2402},"Understanding how fetch works in Nuxt 2.12","\u002Fblog\u002Funderstanding-how-fetch-works-in-nuxt-2-12","blog\u002F7.understanding-how-fetch-works-in-nuxt-2-12",{"title":2404,"path":2405,"stem":2406},"Nuxt 2 Static Improvements","\u002Fblog\u002Fnuxt-static-improvements","blog\u002F8.nuxt-static-improvements",{"title":2408,"path":2409,"stem":2410},"Nuxt 2: From Terminal to Browser","\u002Fblog\u002Fnuxtjs-from-terminal-to-browser","blog\u002F9.nuxtjs-from-terminal-to-browser",{"name":2412,"description":2413,"repo":2414,"npm":2415,"icon":2416,"github":2417,"website":2417,"learn_more":2416,"category":2418,"type":2419,"maintainers":2420,"compatibility":2425,"generatedAt":2428,"contributors":2429,"stats":2527,"readme":2536},"auth-utils","Add Authentication to Nuxt applications with secured & sealed cookies sessions.","atinux\u002Fnuxt-auth-utils","nuxt-auth-utils","","https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils","Security","3rd-party",[2421],{"name":2422,"github":2423,"twitter":2423,"bluesky":2424},"Sébastien Chopin","atinux","atinux.com",{"nuxt":2426,"requires":2427},">=3.0.0",{},"2026-08-30T21:31:19.024Z",[2430,2433,2437,2441,2445,2449,2453,2456,2459,2462,2465,2469,2472,2475,2478,2481,2484,2487,2490,2493,2496,2499,2503,2506,2509,2512,2515,2518,2521,2524],{"id":2431,"username":2423,"contributions":2432},904724,199,{"id":2434,"username":2435,"contributions":2436},28706372,"danielroe",16,{"id":2438,"username":2439,"contributions":2440},50090595,"ahmedrangel",9,{"id":2442,"username":2443,"contributions":2444},12988935,"Gerbuuun",8,{"id":2446,"username":2447,"contributions":2448},45267552,"Barbapapazes",7,{"id":2450,"username":2451,"contributions":2452},13056429,"sandros94",3,{"id":2454,"username":2455,"contributions":2452},16264115,"Yizack",{"id":2457,"username":2458,"contributions":2452},967369,"acidjazz",{"id":2460,"username":2461,"contributions":2452},15887916,"blumgart",{"id":2463,"username":2464,"contributions":2452},67746033,"justserdar",{"id":2466,"username":2467,"contributions":2468},10636392,"brianacdev",2,{"id":2470,"username":2471,"contributions":2468},67898185,"larsrickert",{"id":2473,"username":2474,"contributions":2468},40021217,"kingyue737",{"id":2476,"username":2477,"contributions":2468},59120414,"cth-latest",{"id":2479,"username":2480,"contributions":2468},19751938,"noook",{"id":2482,"username":2483,"contributions":2468},1409645,"mariosant",{"id":2485,"username":2486,"contributions":2468},24661232,"Jorgagu",{"id":2488,"username":2489,"contributions":2468},5326365,"harlan-zw",{"id":2491,"username":2492,"contributions":2468},61092270,"stranavad",{"id":2494,"username":2495,"contributions":2468},1592441,"mendrinos",{"id":2497,"username":2498,"contributions":2468},376963,"bisand",{"id":2500,"username":2501,"contributions":2502},68467996,"tejas161",1,{"id":2504,"username":2505,"contributions":2502},18315316,"Syrex-o",{"id":2507,"username":2508,"contributions":2502},3109921,"silvio-e",{"id":2510,"username":2511,"contributions":2502},18753964,"sifferhans",{"id":2513,"username":2514,"contributions":2502},17186421,"samulefevre",{"id":2516,"username":2517,"contributions":2502},15785987,"samydoesit",{"id":2519,"username":2520,"contributions":2502},31662219,"rudokemper",{"id":2522,"username":2523,"contributions":2502},29805551,"RobertHaba",{"id":2525,"username":2526,"contributions":2502},1231105,"SteinRobert",{"version":2528,"downloads":2529,"stars":2530,"watchers":2531,"forks":2532,"defaultBranch":2533,"publishedAt":2534,"createdAt":2535},"0.5.30",438885,1591,11,189,"main",1785851859387,1699356484873,{"data":2537,"body":2539,"toc":13544},{"title":2538,"description":2416},"Nuxt Auth Utils",{"type":2540,"children":2541},"root",[2542,2549,2595,2599,2633,2639,2738,2752,2758,2770,2782,2793,2799,2815,2857,2879,2914,2926,2934,2940,2945,2952,3494,3503,4006,4028,4034,4047,4053,4430,4450,4629,4641,4647,4652,4672,4693,4720,4898,4903,4924,4932,4939,5182,5195,5201,5212,5617,5629,5642,5647,5677,5803,5816,5927,5938,6094,6100,6105,6110,6118,6152,6165,6244,6249,6254,6259,6266,6298,6310,6389,6394,6399,6413,6733,6873,6903,7831,7866,8703,8737,9250,9255,10094,10112,10118,10147,10158,10164,10169,10451,10457,10476,10702,10726,10731,10751,10756,10764,10783,10871,10897,10903,10920,11007,11025,11035,11047,11052,11321,11333,11345,11718,11746,11752,11765,11783,11886,11906,12256,12270,12770,12775,12802,12813,12983,12988,13134,13154,13257,13275,13281,13301,13307,13538],{"type":2543,"tag":2544,"props":2545,"children":2546},"element","h1",{"id":2415},[2547],{"type":2548,"value":2538},"text",{"type":2543,"tag":2550,"props":2551,"children":2552},"p",{},[2553,2566,2576,2585],{"type":2543,"tag":2554,"props":2555,"children":2559},"a",{"href":2556,"rel":2557},"https:\u002F\u002Fnpmjs.com\u002Fpackage\u002Fnuxt-auth-utils",[2558],"nofollow",[2560],{"type":2543,"tag":2561,"props":2562,"children":2565},"img",{"alt":2563,"src":2564},"npm version","https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fnuxt-auth-utils\u002Flatest.svg?style=flat&colorA=020420&colorB=00DC82",[],{"type":2543,"tag":2554,"props":2567,"children":2570},{"href":2568,"rel":2569},"https:\u002F\u002Fnpm.chart.dev\u002Fnuxt-auth-utils",[2558],[2571],{"type":2543,"tag":2561,"props":2572,"children":2575},{"alt":2573,"src":2574},"npm downloads","https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fdm\u002Fnuxt-auth-utils.svg?style=flat&colorA=020420&colorB=00DC82",[],{"type":2543,"tag":2554,"props":2577,"children":2579},{"href":2556,"rel":2578},[2558],[2580],{"type":2543,"tag":2561,"props":2581,"children":2584},{"alt":2582,"src":2583},"License","https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fl\u002Fnuxt-auth-utils.svg?style=flat&colorA=020420&colorB=00DC82",[],{"type":2543,"tag":2554,"props":2586,"children":2589},{"href":2587,"rel":2588},"https:\u002F\u002Fnuxt.com",[2558],[2590],{"type":2543,"tag":2561,"props":2591,"children":2594},{"alt":2592,"src":2593},"Nuxt","https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNuxt-020420?logo=nuxt.js",[],{"type":2543,"tag":2550,"props":2596,"children":2597},{},[2598],{"type":2548,"value":2413},{"type":2543,"tag":2600,"props":2601,"children":2602},"ul",{},[2603,2613,2623],{"type":2543,"tag":2604,"props":2605,"children":2606},"li",{},[2607],{"type":2543,"tag":2554,"props":2608,"children":2610},{"href":2609},"\u002FCHANGELOG.md",[2611],{"type":2548,"value":2612},"Release Notes",{"type":2543,"tag":2604,"props":2614,"children":2615},{},[2616],{"type":2543,"tag":2554,"props":2617,"children":2620},{"href":2618,"rel":2619},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fatidone",[2558],[2621],{"type":2548,"value":2622},"Demo with OAuth",{"type":2543,"tag":2604,"props":2624,"children":2625},{},[2626],{"type":2543,"tag":2554,"props":2627,"children":2630},{"href":2628,"rel":2629},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Ftodo-passkeys",[2558],[2631],{"type":2548,"value":2632},"Demo with Passkeys",{"type":2543,"tag":2634,"props":2635,"children":2637},"h2",{"id":2636},"features",[2638],{"type":2548,"value":450},{"type":2543,"tag":2600,"props":2640,"children":2641},{},[2642,2653,2662,2671,2680,2696,2705,2720,2729],{"type":2543,"tag":2604,"props":2643,"children":2644},{},[2645,2651],{"type":2543,"tag":2554,"props":2646,"children":2648},{"href":2647},"#hybrid-rendering",[2649],{"type":2548,"value":2650},"Hybrid Rendering",{"type":2548,"value":2652}," support (SSR \u002F CSR \u002F SWR \u002F Prerendering)",{"type":2543,"tag":2604,"props":2654,"children":2655},{},[2656],{"type":2543,"tag":2554,"props":2657,"children":2659},{"href":2658},"#supported-oauth-providers",[2660],{"type":2548,"value":2661},"40+ OAuth Providers",{"type":2543,"tag":2604,"props":2663,"children":2664},{},[2665],{"type":2543,"tag":2554,"props":2666,"children":2668},{"href":2667},"#password-hashing",[2669],{"type":2548,"value":2670},"Password Hashing",{"type":2543,"tag":2604,"props":2672,"children":2673},{},[2674],{"type":2543,"tag":2554,"props":2675,"children":2677},{"href":2676},"#webauthn-passkey",[2678],{"type":2548,"value":2679},"WebAuthn (passkey)",{"type":2543,"tag":2604,"props":2681,"children":2682},{},[2683],{"type":2543,"tag":2554,"props":2684,"children":2686},{"href":2685},"#vue-composable",[2687,2694],{"type":2543,"tag":2688,"props":2689,"children":2691},"code",{"className":2690},[],[2692],{"type":2548,"value":2693},"useUserSession()",{"type":2548,"value":2695}," Vue composable",{"type":2543,"tag":2604,"props":2697,"children":2698},{},[2699],{"type":2543,"tag":2554,"props":2700,"children":2702},{"href":2701},"#server-utils",[2703],{"type":2548,"value":2704},"Tree-shakable server utils",{"type":2543,"tag":2604,"props":2706,"children":2707},{},[2708],{"type":2543,"tag":2554,"props":2709,"children":2711},{"href":2710},"#authstate-component",[2712,2718],{"type":2543,"tag":2688,"props":2713,"children":2715},{"className":2714},[],[2716],{"type":2548,"value":2717},"\u003CAuthState>",{"type":2548,"value":2719}," component",{"type":2543,"tag":2604,"props":2721,"children":2722},{},[2723],{"type":2543,"tag":2554,"props":2724,"children":2726},{"href":2725},"#extend-session",[2727],{"type":2548,"value":2728},"Extendable with hooks",{"type":2543,"tag":2604,"props":2730,"children":2731},{},[2732],{"type":2543,"tag":2554,"props":2733,"children":2735},{"href":2734},"#websocket-support",[2736],{"type":2548,"value":2737},"WebSocket support",{"type":2543,"tag":2550,"props":2739,"children":2740},{},[2741,2743,2750],{"type":2548,"value":2742},"It has few dependencies (only from ",{"type":2543,"tag":2554,"props":2744,"children":2747},{"href":2745,"rel":2746},"https:\u002F\u002Fgithub.com\u002Funjs",[2558],[2748],{"type":2548,"value":2749},"UnJS",{"type":2548,"value":2751},"), run on multiple JS environments (Node, Deno, Workers) and is fully typed with TypeScript.",{"type":2543,"tag":2634,"props":2753,"children":2755},{"id":2754},"requirements",[2756],{"type":2548,"value":2757},"Requirements",{"type":2543,"tag":2550,"props":2759,"children":2760},{},[2761,2763,2768],{"type":2548,"value":2762},"This module only works with a Nuxt server running as it uses server API routes (",{"type":2543,"tag":2688,"props":2764,"children":2766},{"className":2765},[],[2767],{"type":2548,"value":2018},{"type":2548,"value":2769},").",{"type":2543,"tag":2550,"props":2771,"children":2772},{},[2773,2775,2780],{"type":2548,"value":2774},"This means that you cannot use this module with ",{"type":2543,"tag":2688,"props":2776,"children":2778},{"className":2777},[],[2779],{"type":2548,"value":2043},{"type":2548,"value":2781},".",{"type":2543,"tag":2550,"props":2783,"children":2784},{},[2785,2787,2791],{"type":2548,"value":2786},"You can anyway use ",{"type":2543,"tag":2554,"props":2788,"children":2789},{"href":2647},[2790],{"type":2548,"value":2650},{"type":2548,"value":2792}," to pre-render pages of your application or disable server-side rendering completely.",{"type":2543,"tag":2634,"props":2794,"children":2796},{"id":2795},"quick-setup",[2797],{"type":2548,"value":2798},"Quick Setup",{"type":2543,"tag":2800,"props":2801,"children":2802},"ol",{},[2803],{"type":2543,"tag":2604,"props":2804,"children":2805},{},[2806,2808,2813],{"type":2548,"value":2807},"Add ",{"type":2543,"tag":2688,"props":2809,"children":2811},{"className":2810},[],[2812],{"type":2548,"value":2415},{"type":2548,"value":2814}," in your Nuxt project",{"type":2543,"tag":2816,"props":2817,"children":2821},"pre",{"className":2818,"code":2819,"language":2820,"meta":2416,"style":2416},"language-bash shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","npx nuxi@latest module add auth-utils\n","bash",[2822],{"type":2543,"tag":2688,"props":2823,"children":2824},{"__ignoreMap":2416},[2825],{"type":2543,"tag":2826,"props":2827,"children":2829},"span",{"class":2828,"line":2502},"line",[2830,2836,2842,2847,2852],{"type":2543,"tag":2826,"props":2831,"children":2833},{"style":2832},"--shiki-light:#E2931D;--shiki-default:#E2931D;--shiki-dark:#FFCB6B",[2834],{"type":2548,"value":2835},"npx",{"type":2543,"tag":2826,"props":2837,"children":2839},{"style":2838},"--shiki-light:#91B859;--shiki-default:#91B859;--shiki-dark:#C3E88D",[2840],{"type":2548,"value":2841}," nuxi@latest",{"type":2543,"tag":2826,"props":2843,"children":2844},{"style":2838},[2845],{"type":2548,"value":2846}," module",{"type":2543,"tag":2826,"props":2848,"children":2849},{"style":2838},[2850],{"type":2548,"value":2851}," add",{"type":2543,"tag":2826,"props":2853,"children":2854},{"style":2838},[2855],{"type":2548,"value":2856}," auth-utils\n",{"type":2543,"tag":2800,"props":2858,"children":2859},{"start":2468},[2860],{"type":2543,"tag":2604,"props":2861,"children":2862},{},[2863,2865,2871,2873,2878],{"type":2548,"value":2864},"Add a ",{"type":2543,"tag":2688,"props":2866,"children":2868},{"className":2867},[],[2869],{"type":2548,"value":2870},"NUXT_SESSION_PASSWORD",{"type":2548,"value":2872}," env variable with at least 32 characters in the ",{"type":2543,"tag":2688,"props":2874,"children":2876},{"className":2875},[],[2877],{"type":2548,"value":224},{"type":2548,"value":2781},{"type":2543,"tag":2816,"props":2880,"children":2882},{"className":2818,"code":2881,"language":2820,"meta":2416,"style":2416},"# .env\nNUXT_SESSION_PASSWORD=password-with-at-least-32-characters\n",[2883],{"type":2543,"tag":2688,"props":2884,"children":2885},{"__ignoreMap":2416},[2886,2895],{"type":2543,"tag":2826,"props":2887,"children":2888},{"class":2828,"line":2502},[2889],{"type":2543,"tag":2826,"props":2890,"children":2892},{"style":2891},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#90A4AE;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[2893],{"type":2548,"value":2894},"# .env\n",{"type":2543,"tag":2826,"props":2896,"children":2897},{"class":2828,"line":2468},[2898,2903,2909],{"type":2543,"tag":2826,"props":2899,"children":2901},{"style":2900},"--shiki-light:#90A4AE;--shiki-default:#90A4AE;--shiki-dark:#BABED8",[2902],{"type":2548,"value":2870},{"type":2543,"tag":2826,"props":2904,"children":2906},{"style":2905},"--shiki-light:#39ADB5;--shiki-default:#39ADB5;--shiki-dark:#89DDFF",[2907],{"type":2548,"value":2908},"=",{"type":2543,"tag":2826,"props":2910,"children":2911},{"style":2838},[2912],{"type":2548,"value":2913},"password-with-at-least-32-characters\n",{"type":2543,"tag":2550,"props":2915,"children":2916},{},[2917,2919,2924],{"type":2548,"value":2918},"Nuxt Auth Utils generates one for you when running Nuxt in development the first time if no ",{"type":2543,"tag":2688,"props":2920,"children":2922},{"className":2921},[],[2923],{"type":2548,"value":2870},{"type":2548,"value":2925}," is set.",{"type":2543,"tag":2800,"props":2927,"children":2928},{"start":2452},[2929],{"type":2543,"tag":2604,"props":2930,"children":2931},{},[2932],{"type":2548,"value":2933},"That's it! You can now add authentication to your Nuxt app ✨",{"type":2543,"tag":2634,"props":2935,"children":2937},{"id":2936},"vue-composable",[2938],{"type":2548,"value":2939},"Vue Composable",{"type":2543,"tag":2550,"props":2941,"children":2942},{},[2943],{"type":2548,"value":2944},"Nuxt Auth Utils automatically adds some plugins to fetch the current user session to let you access it from your Vue components.",{"type":2543,"tag":2946,"props":2947,"children":2949},"h3",{"id":2948},"user-session",[2950],{"type":2548,"value":2951},"User Session",{"type":2543,"tag":2816,"props":2953,"children":2957},{"className":2954,"code":2955,"language":2956,"meta":2416,"style":2416},"language-vue shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","\u003Cscript setup>\nconst { loggedIn, user, session, fetch, clear, openInPopup } = useUserSession()\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv v-if=\"loggedIn\">\n    \u003Ch1>Welcome {{ user.login }}!\u003C\u002Fh1>\n    \u003Cp>Logged in since {{ session.loggedInAt }}\u003C\u002Fp>\n    \u003Cbutton @click=\"clear\">Logout\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv v-else>\n    \u003Ch1>Not logged in\u003C\u002Fh1>\n    \u003Ca href=\"\u002Fauth\u002Fgithub\">Login with GitHub\u003C\u002Fa>\n    \u003C!-- or open the OAuth route in a popup -->\n    \u003Cbutton @click=\"openInPopup('\u002Fauth\u002Fgithub')\">Login with GitHub\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n","vue",[2958],{"type":2543,"tag":2688,"props":2959,"children":2960},{"__ignoreMap":2416},[2961,2986,3071,3087,3097,3114,3155,3189,3221,3276,3293,3313,3346,3401,3410,3463,3478],{"type":2543,"tag":2826,"props":2962,"children":2963},{"class":2828,"line":2502},[2964,2969,2975,2981],{"type":2543,"tag":2826,"props":2965,"children":2966},{"style":2905},[2967],{"type":2548,"value":2968},"\u003C",{"type":2543,"tag":2826,"props":2970,"children":2972},{"style":2971},"--shiki-light:#E53935;--shiki-default:#E53935;--shiki-dark:#F07178",[2973],{"type":2548,"value":2974},"script",{"type":2543,"tag":2826,"props":2976,"children":2978},{"style":2977},"--shiki-light:#9C3EDA;--shiki-default:#9C3EDA;--shiki-dark:#C792EA",[2979],{"type":2548,"value":2980}," setup",{"type":2543,"tag":2826,"props":2982,"children":2983},{"style":2905},[2984],{"type":2548,"value":2985},">\n",{"type":2543,"tag":2826,"props":2987,"children":2988},{"class":2828,"line":2468},[2989,2994,2999,3004,3009,3014,3018,3023,3027,3032,3036,3041,3045,3050,3055,3060,3066],{"type":2543,"tag":2826,"props":2990,"children":2991},{"style":2977},[2992],{"type":2548,"value":2993},"const",{"type":2543,"tag":2826,"props":2995,"children":2996},{"style":2905},[2997],{"type":2548,"value":2998}," {",{"type":2543,"tag":2826,"props":3000,"children":3001},{"style":2900},[3002],{"type":2548,"value":3003}," loggedIn",{"type":2543,"tag":2826,"props":3005,"children":3006},{"style":2905},[3007],{"type":2548,"value":3008},",",{"type":2543,"tag":2826,"props":3010,"children":3011},{"style":2900},[3012],{"type":2548,"value":3013}," user",{"type":2543,"tag":2826,"props":3015,"children":3016},{"style":2905},[3017],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":3019,"children":3020},{"style":2900},[3021],{"type":2548,"value":3022}," session",{"type":2543,"tag":2826,"props":3024,"children":3025},{"style":2905},[3026],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":3028,"children":3029},{"style":2900},[3030],{"type":2548,"value":3031}," fetch",{"type":2543,"tag":2826,"props":3033,"children":3034},{"style":2905},[3035],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":3037,"children":3038},{"style":2900},[3039],{"type":2548,"value":3040}," clear",{"type":2543,"tag":2826,"props":3042,"children":3043},{"style":2905},[3044],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":3046,"children":3047},{"style":2900},[3048],{"type":2548,"value":3049}," openInPopup ",{"type":2543,"tag":2826,"props":3051,"children":3052},{"style":2905},[3053],{"type":2548,"value":3054},"}",{"type":2543,"tag":2826,"props":3056,"children":3057},{"style":2905},[3058],{"type":2548,"value":3059}," =",{"type":2543,"tag":2826,"props":3061,"children":3063},{"style":3062},"--shiki-light:#6182B8;--shiki-default:#6182B8;--shiki-dark:#82AAFF",[3064],{"type":2548,"value":3065}," useUserSession",{"type":2543,"tag":2826,"props":3067,"children":3068},{"style":2900},[3069],{"type":2548,"value":3070},"()\n",{"type":2543,"tag":2826,"props":3072,"children":3073},{"class":2828,"line":2452},[3074,3079,3083],{"type":2543,"tag":2826,"props":3075,"children":3076},{"style":2905},[3077],{"type":2548,"value":3078},"\u003C\u002F",{"type":2543,"tag":2826,"props":3080,"children":3081},{"style":2971},[3082],{"type":2548,"value":2974},{"type":2543,"tag":2826,"props":3084,"children":3085},{"style":2905},[3086],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":3088,"children":3090},{"class":2828,"line":3089},4,[3091],{"type":2543,"tag":2826,"props":3092,"children":3094},{"emptyLinePlaceholder":3093},true,[3095],{"type":2548,"value":3096},"\n",{"type":2543,"tag":2826,"props":3098,"children":3100},{"class":2828,"line":3099},5,[3101,3105,3110],{"type":2543,"tag":2826,"props":3102,"children":3103},{"style":2905},[3104],{"type":2548,"value":2968},{"type":2543,"tag":2826,"props":3106,"children":3107},{"style":2971},[3108],{"type":2548,"value":3109},"template",{"type":2543,"tag":2826,"props":3111,"children":3112},{"style":2905},[3113],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":3115,"children":3117},{"class":2828,"line":3116},6,[3118,3123,3128,3133,3137,3142,3147,3151],{"type":2543,"tag":2826,"props":3119,"children":3120},{"style":2905},[3121],{"type":2548,"value":3122},"  \u003C",{"type":2543,"tag":2826,"props":3124,"children":3125},{"style":2971},[3126],{"type":2548,"value":3127},"div",{"type":2543,"tag":2826,"props":3129,"children":3130},{"style":2977},[3131],{"type":2548,"value":3132}," v-if",{"type":2543,"tag":2826,"props":3134,"children":3135},{"style":2905},[3136],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":3138,"children":3139},{"style":2905},[3140],{"type":2548,"value":3141},"\"",{"type":2543,"tag":2826,"props":3143,"children":3144},{"style":2838},[3145],{"type":2548,"value":3146},"loggedIn",{"type":2543,"tag":2826,"props":3148,"children":3149},{"style":2905},[3150],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":3152,"children":3153},{"style":2905},[3154],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":3156,"children":3157},{"class":2828,"line":2448},[3158,3163,3167,3172,3177,3181,3185],{"type":2543,"tag":2826,"props":3159,"children":3160},{"style":2905},[3161],{"type":2548,"value":3162},"    \u003C",{"type":2543,"tag":2826,"props":3164,"children":3165},{"style":2971},[3166],{"type":2548,"value":2544},{"type":2543,"tag":2826,"props":3168,"children":3169},{"style":2905},[3170],{"type":2548,"value":3171},">",{"type":2543,"tag":2826,"props":3173,"children":3174},{"style":2900},[3175],{"type":2548,"value":3176},"Welcome {{ user.login }}!",{"type":2543,"tag":2826,"props":3178,"children":3179},{"style":2905},[3180],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":3182,"children":3183},{"style":2971},[3184],{"type":2548,"value":2544},{"type":2543,"tag":2826,"props":3186,"children":3187},{"style":2905},[3188],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":3190,"children":3191},{"class":2828,"line":2444},[3192,3196,3200,3204,3209,3213,3217],{"type":2543,"tag":2826,"props":3193,"children":3194},{"style":2905},[3195],{"type":2548,"value":3162},{"type":2543,"tag":2826,"props":3197,"children":3198},{"style":2971},[3199],{"type":2548,"value":2550},{"type":2543,"tag":2826,"props":3201,"children":3202},{"style":2905},[3203],{"type":2548,"value":3171},{"type":2543,"tag":2826,"props":3205,"children":3206},{"style":2900},[3207],{"type":2548,"value":3208},"Logged in since {{ session.loggedInAt }}",{"type":2543,"tag":2826,"props":3210,"children":3211},{"style":2905},[3212],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":3214,"children":3215},{"style":2971},[3216],{"type":2548,"value":2550},{"type":2543,"tag":2826,"props":3218,"children":3219},{"style":2905},[3220],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":3222,"children":3223},{"class":2828,"line":2440},[3224,3228,3233,3238,3242,3246,3251,3255,3259,3264,3268,3272],{"type":2543,"tag":2826,"props":3225,"children":3226},{"style":2905},[3227],{"type":2548,"value":3162},{"type":2543,"tag":2826,"props":3229,"children":3230},{"style":2971},[3231],{"type":2548,"value":3232},"button",{"type":2543,"tag":2826,"props":3234,"children":3235},{"style":2977},[3236],{"type":2548,"value":3237}," @click",{"type":2543,"tag":2826,"props":3239,"children":3240},{"style":2905},[3241],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":3243,"children":3244},{"style":2905},[3245],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":3247,"children":3248},{"style":2838},[3249],{"type":2548,"value":3250},"clear",{"type":2543,"tag":2826,"props":3252,"children":3253},{"style":2905},[3254],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":3256,"children":3257},{"style":2905},[3258],{"type":2548,"value":3171},{"type":2543,"tag":2826,"props":3260,"children":3261},{"style":2900},[3262],{"type":2548,"value":3263},"Logout",{"type":2543,"tag":2826,"props":3265,"children":3266},{"style":2905},[3267],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":3269,"children":3270},{"style":2971},[3271],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":3273,"children":3274},{"style":2905},[3275],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":3277,"children":3279},{"class":2828,"line":3278},10,[3280,3285,3289],{"type":2543,"tag":2826,"props":3281,"children":3282},{"style":2905},[3283],{"type":2548,"value":3284},"  \u003C\u002F",{"type":2543,"tag":2826,"props":3286,"children":3287},{"style":2971},[3288],{"type":2548,"value":3127},{"type":2543,"tag":2826,"props":3290,"children":3291},{"style":2905},[3292],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":3294,"children":3295},{"class":2828,"line":2531},[3296,3300,3304,3309],{"type":2543,"tag":2826,"props":3297,"children":3298},{"style":2905},[3299],{"type":2548,"value":3122},{"type":2543,"tag":2826,"props":3301,"children":3302},{"style":2971},[3303],{"type":2548,"value":3127},{"type":2543,"tag":2826,"props":3305,"children":3306},{"style":2977},[3307],{"type":2548,"value":3308}," v-else",{"type":2543,"tag":2826,"props":3310,"children":3311},{"style":2905},[3312],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":3314,"children":3316},{"class":2828,"line":3315},12,[3317,3321,3325,3329,3334,3338,3342],{"type":2543,"tag":2826,"props":3318,"children":3319},{"style":2905},[3320],{"type":2548,"value":3162},{"type":2543,"tag":2826,"props":3322,"children":3323},{"style":2971},[3324],{"type":2548,"value":2544},{"type":2543,"tag":2826,"props":3326,"children":3327},{"style":2905},[3328],{"type":2548,"value":3171},{"type":2543,"tag":2826,"props":3330,"children":3331},{"style":2900},[3332],{"type":2548,"value":3333},"Not logged in",{"type":2543,"tag":2826,"props":3335,"children":3336},{"style":2905},[3337],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":3339,"children":3340},{"style":2971},[3341],{"type":2548,"value":2544},{"type":2543,"tag":2826,"props":3343,"children":3344},{"style":2905},[3345],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":3347,"children":3349},{"class":2828,"line":3348},13,[3350,3354,3358,3363,3367,3371,3376,3380,3384,3389,3393,3397],{"type":2543,"tag":2826,"props":3351,"children":3352},{"style":2905},[3353],{"type":2548,"value":3162},{"type":2543,"tag":2826,"props":3355,"children":3356},{"style":2971},[3357],{"type":2548,"value":2554},{"type":2543,"tag":2826,"props":3359,"children":3360},{"style":2977},[3361],{"type":2548,"value":3362}," href",{"type":2543,"tag":2826,"props":3364,"children":3365},{"style":2905},[3366],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":3368,"children":3369},{"style":2905},[3370],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":3372,"children":3373},{"style":2838},[3374],{"type":2548,"value":3375},"\u002Fauth\u002Fgithub",{"type":2543,"tag":2826,"props":3377,"children":3378},{"style":2905},[3379],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":3381,"children":3382},{"style":2905},[3383],{"type":2548,"value":3171},{"type":2543,"tag":2826,"props":3385,"children":3386},{"style":2900},[3387],{"type":2548,"value":3388},"Login with GitHub",{"type":2543,"tag":2826,"props":3390,"children":3391},{"style":2905},[3392],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":3394,"children":3395},{"style":2971},[3396],{"type":2548,"value":2554},{"type":2543,"tag":2826,"props":3398,"children":3399},{"style":2905},[3400],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":3402,"children":3404},{"class":2828,"line":3403},14,[3405],{"type":2543,"tag":2826,"props":3406,"children":3407},{"style":2891},[3408],{"type":2548,"value":3409},"    \u003C!-- or open the OAuth route in a popup -->\n",{"type":2543,"tag":2826,"props":3411,"children":3413},{"class":2828,"line":3412},15,[3414,3418,3422,3426,3430,3434,3439,3443,3447,3451,3455,3459],{"type":2543,"tag":2826,"props":3415,"children":3416},{"style":2905},[3417],{"type":2548,"value":3162},{"type":2543,"tag":2826,"props":3419,"children":3420},{"style":2971},[3421],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":3423,"children":3424},{"style":2977},[3425],{"type":2548,"value":3237},{"type":2543,"tag":2826,"props":3427,"children":3428},{"style":2905},[3429],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":3431,"children":3432},{"style":2905},[3433],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":3435,"children":3436},{"style":2838},[3437],{"type":2548,"value":3438},"openInPopup('\u002Fauth\u002Fgithub')",{"type":2543,"tag":2826,"props":3440,"children":3441},{"style":2905},[3442],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":3444,"children":3445},{"style":2905},[3446],{"type":2548,"value":3171},{"type":2543,"tag":2826,"props":3448,"children":3449},{"style":2900},[3450],{"type":2548,"value":3388},{"type":2543,"tag":2826,"props":3452,"children":3453},{"style":2905},[3454],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":3456,"children":3457},{"style":2971},[3458],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":3460,"children":3461},{"style":2905},[3462],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":3464,"children":3465},{"class":2828,"line":2436},[3466,3470,3474],{"type":2543,"tag":2826,"props":3467,"children":3468},{"style":2905},[3469],{"type":2548,"value":3284},{"type":2543,"tag":2826,"props":3471,"children":3472},{"style":2971},[3473],{"type":2548,"value":3127},{"type":2543,"tag":2826,"props":3475,"children":3476},{"style":2905},[3477],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":3479,"children":3481},{"class":2828,"line":3480},17,[3482,3486,3490],{"type":2543,"tag":2826,"props":3483,"children":3484},{"style":2905},[3485],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":3487,"children":3488},{"style":2971},[3489],{"type":2548,"value":3109},{"type":2543,"tag":2826,"props":3491,"children":3492},{"style":2905},[3493],{"type":2548,"value":2985},{"type":2543,"tag":2550,"props":3495,"children":3496},{},[3497],{"type":2543,"tag":3498,"props":3499,"children":3500},"strong",{},[3501],{"type":2548,"value":3502},"TypeScript Signature:",{"type":2543,"tag":2816,"props":3504,"children":3508},{"className":3505,"code":3506,"language":3507,"meta":2416,"style":2416},"language-ts shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","interface UserSessionComposable {\n  \u002F**\n   * Computed indicating if the auth session is ready\n   *\u002F\n  ready: ComputedRef\u003Cboolean>\n  \u002F**\n   * Computed indicating if the user is logged in.\n   *\u002F\n  loggedIn: ComputedRef\u003Cboolean>\n  \u002F**\n   * The user object if logged in, null otherwise.\n   *\u002F\n  user: ComputedRef\u003CUser | null>\n  \u002F**\n   * The session object.\n   *\u002F\n  session: Ref\u003CUserSession>\n  \u002F**\n   * Fetch the user session from the server.\n   *\u002F\n  fetch: () => Promise\u003Cvoid>\n  \u002F**\n   * Clear the user session and remove the session cookie.\n   *\u002F\n  clear: () => Promise\u003Cvoid>\n  \u002F**\n   * Open the OAuth route in a popup that auto-closes when successful.\n   *\u002F\n  openInPopup: (route: string, size?: { width?: number, height?: number }) => void\n}\n","ts",[3509],{"type":2543,"tag":2688,"props":3510,"children":3511},{"__ignoreMap":2416},[3512,3530,3538,3546,3554,3585,3592,3600,3607,3635,3642,3650,3657,3696,3703,3711,3718,3748,3756,3765,3773,3814,3822,3831,3839,3876,3884,3893,3901,3997],{"type":2543,"tag":2826,"props":3513,"children":3514},{"class":2828,"line":2502},[3515,3520,3525],{"type":2543,"tag":2826,"props":3516,"children":3517},{"style":2977},[3518],{"type":2548,"value":3519},"interface",{"type":2543,"tag":2826,"props":3521,"children":3522},{"style":2832},[3523],{"type":2548,"value":3524}," UserSessionComposable",{"type":2543,"tag":2826,"props":3526,"children":3527},{"style":2905},[3528],{"type":2548,"value":3529}," {\n",{"type":2543,"tag":2826,"props":3531,"children":3532},{"class":2828,"line":2468},[3533],{"type":2543,"tag":2826,"props":3534,"children":3535},{"style":2891},[3536],{"type":2548,"value":3537},"  \u002F**\n",{"type":2543,"tag":2826,"props":3539,"children":3540},{"class":2828,"line":2452},[3541],{"type":2543,"tag":2826,"props":3542,"children":3543},{"style":2891},[3544],{"type":2548,"value":3545},"   * Computed indicating if the auth session is ready\n",{"type":2543,"tag":2826,"props":3547,"children":3548},{"class":2828,"line":3089},[3549],{"type":2543,"tag":2826,"props":3550,"children":3551},{"style":2891},[3552],{"type":2548,"value":3553},"   *\u002F\n",{"type":2543,"tag":2826,"props":3555,"children":3556},{"class":2828,"line":3099},[3557,3562,3567,3572,3576,3581],{"type":2543,"tag":2826,"props":3558,"children":3559},{"style":2971},[3560],{"type":2548,"value":3561},"  ready",{"type":2543,"tag":2826,"props":3563,"children":3564},{"style":2905},[3565],{"type":2548,"value":3566},":",{"type":2543,"tag":2826,"props":3568,"children":3569},{"style":2832},[3570],{"type":2548,"value":3571}," ComputedRef",{"type":2543,"tag":2826,"props":3573,"children":3574},{"style":2905},[3575],{"type":2548,"value":2968},{"type":2543,"tag":2826,"props":3577,"children":3578},{"style":2832},[3579],{"type":2548,"value":3580},"boolean",{"type":2543,"tag":2826,"props":3582,"children":3583},{"style":2905},[3584],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":3586,"children":3587},{"class":2828,"line":3116},[3588],{"type":2543,"tag":2826,"props":3589,"children":3590},{"style":2891},[3591],{"type":2548,"value":3537},{"type":2543,"tag":2826,"props":3593,"children":3594},{"class":2828,"line":2448},[3595],{"type":2543,"tag":2826,"props":3596,"children":3597},{"style":2891},[3598],{"type":2548,"value":3599},"   * Computed indicating if the user is logged in.\n",{"type":2543,"tag":2826,"props":3601,"children":3602},{"class":2828,"line":2444},[3603],{"type":2543,"tag":2826,"props":3604,"children":3605},{"style":2891},[3606],{"type":2548,"value":3553},{"type":2543,"tag":2826,"props":3608,"children":3609},{"class":2828,"line":2440},[3610,3615,3619,3623,3627,3631],{"type":2543,"tag":2826,"props":3611,"children":3612},{"style":2971},[3613],{"type":2548,"value":3614},"  loggedIn",{"type":2543,"tag":2826,"props":3616,"children":3617},{"style":2905},[3618],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":3620,"children":3621},{"style":2832},[3622],{"type":2548,"value":3571},{"type":2543,"tag":2826,"props":3624,"children":3625},{"style":2905},[3626],{"type":2548,"value":2968},{"type":2543,"tag":2826,"props":3628,"children":3629},{"style":2832},[3630],{"type":2548,"value":3580},{"type":2543,"tag":2826,"props":3632,"children":3633},{"style":2905},[3634],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":3636,"children":3637},{"class":2828,"line":3278},[3638],{"type":2543,"tag":2826,"props":3639,"children":3640},{"style":2891},[3641],{"type":2548,"value":3537},{"type":2543,"tag":2826,"props":3643,"children":3644},{"class":2828,"line":2531},[3645],{"type":2543,"tag":2826,"props":3646,"children":3647},{"style":2891},[3648],{"type":2548,"value":3649},"   * The user object if logged in, null otherwise.\n",{"type":2543,"tag":2826,"props":3651,"children":3652},{"class":2828,"line":3315},[3653],{"type":2543,"tag":2826,"props":3654,"children":3655},{"style":2891},[3656],{"type":2548,"value":3553},{"type":2543,"tag":2826,"props":3658,"children":3659},{"class":2828,"line":3348},[3660,3665,3669,3673,3677,3682,3687,3692],{"type":2543,"tag":2826,"props":3661,"children":3662},{"style":2971},[3663],{"type":2548,"value":3664},"  user",{"type":2543,"tag":2826,"props":3666,"children":3667},{"style":2905},[3668],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":3670,"children":3671},{"style":2832},[3672],{"type":2548,"value":3571},{"type":2543,"tag":2826,"props":3674,"children":3675},{"style":2905},[3676],{"type":2548,"value":2968},{"type":2543,"tag":2826,"props":3678,"children":3679},{"style":2832},[3680],{"type":2548,"value":3681},"User",{"type":2543,"tag":2826,"props":3683,"children":3684},{"style":2905},[3685],{"type":2548,"value":3686}," |",{"type":2543,"tag":2826,"props":3688,"children":3689},{"style":2832},[3690],{"type":2548,"value":3691}," null",{"type":2543,"tag":2826,"props":3693,"children":3694},{"style":2905},[3695],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":3697,"children":3698},{"class":2828,"line":3403},[3699],{"type":2543,"tag":2826,"props":3700,"children":3701},{"style":2891},[3702],{"type":2548,"value":3537},{"type":2543,"tag":2826,"props":3704,"children":3705},{"class":2828,"line":3412},[3706],{"type":2543,"tag":2826,"props":3707,"children":3708},{"style":2891},[3709],{"type":2548,"value":3710},"   * The session object.\n",{"type":2543,"tag":2826,"props":3712,"children":3713},{"class":2828,"line":2436},[3714],{"type":2543,"tag":2826,"props":3715,"children":3716},{"style":2891},[3717],{"type":2548,"value":3553},{"type":2543,"tag":2826,"props":3719,"children":3720},{"class":2828,"line":3480},[3721,3726,3730,3735,3739,3744],{"type":2543,"tag":2826,"props":3722,"children":3723},{"style":2971},[3724],{"type":2548,"value":3725},"  session",{"type":2543,"tag":2826,"props":3727,"children":3728},{"style":2905},[3729],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":3731,"children":3732},{"style":2832},[3733],{"type":2548,"value":3734}," Ref",{"type":2543,"tag":2826,"props":3736,"children":3737},{"style":2905},[3738],{"type":2548,"value":2968},{"type":2543,"tag":2826,"props":3740,"children":3741},{"style":2832},[3742],{"type":2548,"value":3743},"UserSession",{"type":2543,"tag":2826,"props":3745,"children":3746},{"style":2905},[3747],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":3749,"children":3751},{"class":2828,"line":3750},18,[3752],{"type":2543,"tag":2826,"props":3753,"children":3754},{"style":2891},[3755],{"type":2548,"value":3537},{"type":2543,"tag":2826,"props":3757,"children":3759},{"class":2828,"line":3758},19,[3760],{"type":2543,"tag":2826,"props":3761,"children":3762},{"style":2891},[3763],{"type":2548,"value":3764},"   * Fetch the user session from the server.\n",{"type":2543,"tag":2826,"props":3766,"children":3768},{"class":2828,"line":3767},20,[3769],{"type":2543,"tag":2826,"props":3770,"children":3771},{"style":2891},[3772],{"type":2548,"value":3553},{"type":2543,"tag":2826,"props":3774,"children":3776},{"class":2828,"line":3775},21,[3777,3782,3786,3791,3796,3801,3805,3810],{"type":2543,"tag":2826,"props":3778,"children":3779},{"style":2971},[3780],{"type":2548,"value":3781},"  fetch",{"type":2543,"tag":2826,"props":3783,"children":3784},{"style":2905},[3785],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":3787,"children":3788},{"style":2905},[3789],{"type":2548,"value":3790}," ()",{"type":2543,"tag":2826,"props":3792,"children":3793},{"style":2977},[3794],{"type":2548,"value":3795}," =>",{"type":2543,"tag":2826,"props":3797,"children":3798},{"style":2832},[3799],{"type":2548,"value":3800}," Promise",{"type":2543,"tag":2826,"props":3802,"children":3803},{"style":2905},[3804],{"type":2548,"value":2968},{"type":2543,"tag":2826,"props":3806,"children":3807},{"style":2832},[3808],{"type":2548,"value":3809},"void",{"type":2543,"tag":2826,"props":3811,"children":3812},{"style":2905},[3813],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":3815,"children":3817},{"class":2828,"line":3816},22,[3818],{"type":2543,"tag":2826,"props":3819,"children":3820},{"style":2891},[3821],{"type":2548,"value":3537},{"type":2543,"tag":2826,"props":3823,"children":3825},{"class":2828,"line":3824},23,[3826],{"type":2543,"tag":2826,"props":3827,"children":3828},{"style":2891},[3829],{"type":2548,"value":3830},"   * Clear the user session and remove the session cookie.\n",{"type":2543,"tag":2826,"props":3832,"children":3834},{"class":2828,"line":3833},24,[3835],{"type":2543,"tag":2826,"props":3836,"children":3837},{"style":2891},[3838],{"type":2548,"value":3553},{"type":2543,"tag":2826,"props":3840,"children":3842},{"class":2828,"line":3841},25,[3843,3848,3852,3856,3860,3864,3868,3872],{"type":2543,"tag":2826,"props":3844,"children":3845},{"style":2971},[3846],{"type":2548,"value":3847},"  clear",{"type":2543,"tag":2826,"props":3849,"children":3850},{"style":2905},[3851],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":3853,"children":3854},{"style":2905},[3855],{"type":2548,"value":3790},{"type":2543,"tag":2826,"props":3857,"children":3858},{"style":2977},[3859],{"type":2548,"value":3795},{"type":2543,"tag":2826,"props":3861,"children":3862},{"style":2832},[3863],{"type":2548,"value":3800},{"type":2543,"tag":2826,"props":3865,"children":3866},{"style":2905},[3867],{"type":2548,"value":2968},{"type":2543,"tag":2826,"props":3869,"children":3870},{"style":2832},[3871],{"type":2548,"value":3809},{"type":2543,"tag":2826,"props":3873,"children":3874},{"style":2905},[3875],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":3877,"children":3879},{"class":2828,"line":3878},26,[3880],{"type":2543,"tag":2826,"props":3881,"children":3882},{"style":2891},[3883],{"type":2548,"value":3537},{"type":2543,"tag":2826,"props":3885,"children":3887},{"class":2828,"line":3886},27,[3888],{"type":2543,"tag":2826,"props":3889,"children":3890},{"style":2891},[3891],{"type":2548,"value":3892},"   * Open the OAuth route in a popup that auto-closes when successful.\n",{"type":2543,"tag":2826,"props":3894,"children":3896},{"class":2828,"line":3895},28,[3897],{"type":2543,"tag":2826,"props":3898,"children":3899},{"style":2891},[3900],{"type":2548,"value":3553},{"type":2543,"tag":2826,"props":3902,"children":3904},{"class":2828,"line":3903},29,[3905,3910,3914,3919,3925,3929,3934,3938,3943,3948,3952,3957,3961,3966,3970,3975,3979,3983,3988,3992],{"type":2543,"tag":2826,"props":3906,"children":3907},{"style":2971},[3908],{"type":2548,"value":3909},"  openInPopup",{"type":2543,"tag":2826,"props":3911,"children":3912},{"style":2905},[3913],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":3915,"children":3916},{"style":2905},[3917],{"type":2548,"value":3918}," (",{"type":2543,"tag":2826,"props":3920,"children":3922},{"style":3921},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#90A4AE;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[3923],{"type":2548,"value":3924},"route",{"type":2543,"tag":2826,"props":3926,"children":3927},{"style":2905},[3928],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":3930,"children":3931},{"style":2832},[3932],{"type":2548,"value":3933}," string",{"type":2543,"tag":2826,"props":3935,"children":3936},{"style":2905},[3937],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":3939,"children":3940},{"style":3921},[3941],{"type":2548,"value":3942}," size",{"type":2543,"tag":2826,"props":3944,"children":3945},{"style":2905},[3946],{"type":2548,"value":3947},"?:",{"type":2543,"tag":2826,"props":3949,"children":3950},{"style":2905},[3951],{"type":2548,"value":2998},{"type":2543,"tag":2826,"props":3953,"children":3954},{"style":2971},[3955],{"type":2548,"value":3956}," width",{"type":2543,"tag":2826,"props":3958,"children":3959},{"style":2905},[3960],{"type":2548,"value":3947},{"type":2543,"tag":2826,"props":3962,"children":3963},{"style":2832},[3964],{"type":2548,"value":3965}," number",{"type":2543,"tag":2826,"props":3967,"children":3968},{"style":2905},[3969],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":3971,"children":3972},{"style":2971},[3973],{"type":2548,"value":3974}," height",{"type":2543,"tag":2826,"props":3976,"children":3977},{"style":2905},[3978],{"type":2548,"value":3947},{"type":2543,"tag":2826,"props":3980,"children":3981},{"style":2832},[3982],{"type":2548,"value":3965},{"type":2543,"tag":2826,"props":3984,"children":3985},{"style":2905},[3986],{"type":2548,"value":3987}," })",{"type":2543,"tag":2826,"props":3989,"children":3990},{"style":2977},[3991],{"type":2548,"value":3795},{"type":2543,"tag":2826,"props":3993,"children":3994},{"style":2832},[3995],{"type":2548,"value":3996}," void\n",{"type":2543,"tag":2826,"props":3998,"children":4000},{"class":2828,"line":3999},30,[4001],{"type":2543,"tag":2826,"props":4002,"children":4003},{"style":2905},[4004],{"type":2548,"value":4005},"}\n",{"type":2543,"tag":4007,"props":4008,"children":4009},"blockquote",{},[4010],{"type":2543,"tag":2550,"props":4011,"children":4012},{},[4013,4018,4020,4026],{"type":2543,"tag":2826,"props":4014,"children":4015},{},[4016],{"type":2548,"value":4017},"!IMPORTANT",{"type":2548,"value":4019},"\nNuxt Auth Utils uses the ",{"type":2543,"tag":2688,"props":4021,"children":4023},{"className":4022},[],[4024],{"type":2548,"value":4025},"\u002Fapi\u002F_auth\u002Fsession",{"type":2548,"value":4027}," route for session management. Ensure your API route middleware doesn't interfere with this path.",{"type":2543,"tag":2634,"props":4029,"children":4031},{"id":4030},"server-utils",[4032],{"type":2548,"value":4033},"Server Utils",{"type":2543,"tag":2550,"props":4035,"children":4036},{},[4037,4039,4045],{"type":2548,"value":4038},"The following helpers are auto-imported in your ",{"type":2543,"tag":2688,"props":4040,"children":4042},{"className":4041},[],[4043],{"type":2548,"value":4044},"server\u002F",{"type":2548,"value":4046}," directory.",{"type":2543,"tag":2946,"props":4048,"children":4050},{"id":4049},"session-management",[4051],{"type":2548,"value":4052},"Session Management",{"type":2543,"tag":2816,"props":4054,"children":4056},{"className":3505,"code":4055,"language":3507,"meta":2416,"style":2416},"\u002F\u002F Set a user session, note that this data is encrypted in the cookie but can be decrypted with an API call\n\u002F\u002F Only store the data that allow you to recognize a user, but do not store sensitive data\n\u002F\u002F Merges new data with existing data using unjs\u002Fdefu library\nawait setUserSession(event, {\n  \u002F\u002F User data\n  user: {\n    login: 'atinux'\n  },\n  \u002F\u002F Private data accessible only on server\u002F routes\n  secure: {\n    apiToken: '1234567890'\n  },\n  \u002F\u002F Any extra fields for the session data\n  loggedInAt: new Date()\n})\n\n\u002F\u002F Replace a user session. Same behaviour as setUserSession, except it does not merge data with existing data\nawait replaceUserSession(event, data)\n\n\u002F\u002F Get the current user session\nconst session = await getUserSession(event)\n\n\u002F\u002F Clear the current user session\nawait clearUserSession(event)\n\n\u002F\u002F Require a user session (send back 401 if no `user` key in session)\nconst session = await requireUserSession(event)\n",[4057],{"type":2543,"tag":2688,"props":4058,"children":4059},{"__ignoreMap":2416},[4060,4068,4076,4084,4111,4119,4134,4160,4168,4176,4192,4217,4224,4232,4258,4270,4277,4285,4310,4317,4325,4356,4363,4371,4387,4394,4402],{"type":2543,"tag":2826,"props":4061,"children":4062},{"class":2828,"line":2502},[4063],{"type":2543,"tag":2826,"props":4064,"children":4065},{"style":2891},[4066],{"type":2548,"value":4067},"\u002F\u002F Set a user session, note that this data is encrypted in the cookie but can be decrypted with an API call\n",{"type":2543,"tag":2826,"props":4069,"children":4070},{"class":2828,"line":2468},[4071],{"type":2543,"tag":2826,"props":4072,"children":4073},{"style":2891},[4074],{"type":2548,"value":4075},"\u002F\u002F Only store the data that allow you to recognize a user, but do not store sensitive data\n",{"type":2543,"tag":2826,"props":4077,"children":4078},{"class":2828,"line":2452},[4079],{"type":2543,"tag":2826,"props":4080,"children":4081},{"style":2891},[4082],{"type":2548,"value":4083},"\u002F\u002F Merges new data with existing data using unjs\u002Fdefu library\n",{"type":2543,"tag":2826,"props":4085,"children":4086},{"class":2828,"line":3089},[4087,4093,4098,4103,4107],{"type":2543,"tag":2826,"props":4088,"children":4090},{"style":4089},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#39ADB5;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[4091],{"type":2548,"value":4092},"await",{"type":2543,"tag":2826,"props":4094,"children":4095},{"style":3062},[4096],{"type":2548,"value":4097}," setUserSession",{"type":2543,"tag":2826,"props":4099,"children":4100},{"style":2900},[4101],{"type":2548,"value":4102},"(event",{"type":2543,"tag":2826,"props":4104,"children":4105},{"style":2905},[4106],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":4108,"children":4109},{"style":2905},[4110],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":4112,"children":4113},{"class":2828,"line":3099},[4114],{"type":2543,"tag":2826,"props":4115,"children":4116},{"style":2891},[4117],{"type":2548,"value":4118},"  \u002F\u002F User data\n",{"type":2543,"tag":2826,"props":4120,"children":4121},{"class":2828,"line":3116},[4122,4126,4130],{"type":2543,"tag":2826,"props":4123,"children":4124},{"style":2971},[4125],{"type":2548,"value":3664},{"type":2543,"tag":2826,"props":4127,"children":4128},{"style":2905},[4129],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":4131,"children":4132},{"style":2905},[4133],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":4135,"children":4136},{"class":2828,"line":2448},[4137,4142,4146,4151,4155],{"type":2543,"tag":2826,"props":4138,"children":4139},{"style":2971},[4140],{"type":2548,"value":4141},"    login",{"type":2543,"tag":2826,"props":4143,"children":4144},{"style":2905},[4145],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":4147,"children":4148},{"style":2905},[4149],{"type":2548,"value":4150}," '",{"type":2543,"tag":2826,"props":4152,"children":4153},{"style":2838},[4154],{"type":2548,"value":2423},{"type":2543,"tag":2826,"props":4156,"children":4157},{"style":2905},[4158],{"type":2548,"value":4159},"'\n",{"type":2543,"tag":2826,"props":4161,"children":4162},{"class":2828,"line":2444},[4163],{"type":2543,"tag":2826,"props":4164,"children":4165},{"style":2905},[4166],{"type":2548,"value":4167},"  },\n",{"type":2543,"tag":2826,"props":4169,"children":4170},{"class":2828,"line":2440},[4171],{"type":2543,"tag":2826,"props":4172,"children":4173},{"style":2891},[4174],{"type":2548,"value":4175},"  \u002F\u002F Private data accessible only on server\u002F routes\n",{"type":2543,"tag":2826,"props":4177,"children":4178},{"class":2828,"line":3278},[4179,4184,4188],{"type":2543,"tag":2826,"props":4180,"children":4181},{"style":2971},[4182],{"type":2548,"value":4183},"  secure",{"type":2543,"tag":2826,"props":4185,"children":4186},{"style":2905},[4187],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":4189,"children":4190},{"style":2905},[4191],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":4193,"children":4194},{"class":2828,"line":2531},[4195,4200,4204,4208,4213],{"type":2543,"tag":2826,"props":4196,"children":4197},{"style":2971},[4198],{"type":2548,"value":4199},"    apiToken",{"type":2543,"tag":2826,"props":4201,"children":4202},{"style":2905},[4203],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":4205,"children":4206},{"style":2905},[4207],{"type":2548,"value":4150},{"type":2543,"tag":2826,"props":4209,"children":4210},{"style":2838},[4211],{"type":2548,"value":4212},"1234567890",{"type":2543,"tag":2826,"props":4214,"children":4215},{"style":2905},[4216],{"type":2548,"value":4159},{"type":2543,"tag":2826,"props":4218,"children":4219},{"class":2828,"line":3315},[4220],{"type":2543,"tag":2826,"props":4221,"children":4222},{"style":2905},[4223],{"type":2548,"value":4167},{"type":2543,"tag":2826,"props":4225,"children":4226},{"class":2828,"line":3348},[4227],{"type":2543,"tag":2826,"props":4228,"children":4229},{"style":2891},[4230],{"type":2548,"value":4231},"  \u002F\u002F Any extra fields for the session data\n",{"type":2543,"tag":2826,"props":4233,"children":4234},{"class":2828,"line":3403},[4235,4240,4244,4249,4254],{"type":2543,"tag":2826,"props":4236,"children":4237},{"style":2971},[4238],{"type":2548,"value":4239},"  loggedInAt",{"type":2543,"tag":2826,"props":4241,"children":4242},{"style":2905},[4243],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":4245,"children":4246},{"style":2905},[4247],{"type":2548,"value":4248}," new",{"type":2543,"tag":2826,"props":4250,"children":4251},{"style":3062},[4252],{"type":2548,"value":4253}," Date",{"type":2543,"tag":2826,"props":4255,"children":4256},{"style":2900},[4257],{"type":2548,"value":3070},{"type":2543,"tag":2826,"props":4259,"children":4260},{"class":2828,"line":3412},[4261,4265],{"type":2543,"tag":2826,"props":4262,"children":4263},{"style":2905},[4264],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":4266,"children":4267},{"style":2900},[4268],{"type":2548,"value":4269},")\n",{"type":2543,"tag":2826,"props":4271,"children":4272},{"class":2828,"line":2436},[4273],{"type":2543,"tag":2826,"props":4274,"children":4275},{"emptyLinePlaceholder":3093},[4276],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":4278,"children":4279},{"class":2828,"line":3480},[4280],{"type":2543,"tag":2826,"props":4281,"children":4282},{"style":2891},[4283],{"type":2548,"value":4284},"\u002F\u002F Replace a user session. Same behaviour as setUserSession, except it does not merge data with existing data\n",{"type":2543,"tag":2826,"props":4286,"children":4287},{"class":2828,"line":3750},[4288,4292,4297,4301,4305],{"type":2543,"tag":2826,"props":4289,"children":4290},{"style":4089},[4291],{"type":2548,"value":4092},{"type":2543,"tag":2826,"props":4293,"children":4294},{"style":3062},[4295],{"type":2548,"value":4296}," replaceUserSession",{"type":2543,"tag":2826,"props":4298,"children":4299},{"style":2900},[4300],{"type":2548,"value":4102},{"type":2543,"tag":2826,"props":4302,"children":4303},{"style":2905},[4304],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":4306,"children":4307},{"style":2900},[4308],{"type":2548,"value":4309}," data)\n",{"type":2543,"tag":2826,"props":4311,"children":4312},{"class":2828,"line":3758},[4313],{"type":2543,"tag":2826,"props":4314,"children":4315},{"emptyLinePlaceholder":3093},[4316],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":4318,"children":4319},{"class":2828,"line":3767},[4320],{"type":2543,"tag":2826,"props":4321,"children":4322},{"style":2891},[4323],{"type":2548,"value":4324},"\u002F\u002F Get the current user session\n",{"type":2543,"tag":2826,"props":4326,"children":4327},{"class":2828,"line":3775},[4328,4332,4337,4341,4346,4351],{"type":2543,"tag":2826,"props":4329,"children":4330},{"style":2977},[4331],{"type":2548,"value":2993},{"type":2543,"tag":2826,"props":4333,"children":4334},{"style":2900},[4335],{"type":2548,"value":4336}," session ",{"type":2543,"tag":2826,"props":4338,"children":4339},{"style":2905},[4340],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":4342,"children":4343},{"style":4089},[4344],{"type":2548,"value":4345}," await",{"type":2543,"tag":2826,"props":4347,"children":4348},{"style":3062},[4349],{"type":2548,"value":4350}," getUserSession",{"type":2543,"tag":2826,"props":4352,"children":4353},{"style":2900},[4354],{"type":2548,"value":4355},"(event)\n",{"type":2543,"tag":2826,"props":4357,"children":4358},{"class":2828,"line":3816},[4359],{"type":2543,"tag":2826,"props":4360,"children":4361},{"emptyLinePlaceholder":3093},[4362],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":4364,"children":4365},{"class":2828,"line":3824},[4366],{"type":2543,"tag":2826,"props":4367,"children":4368},{"style":2891},[4369],{"type":2548,"value":4370},"\u002F\u002F Clear the current user session\n",{"type":2543,"tag":2826,"props":4372,"children":4373},{"class":2828,"line":3833},[4374,4378,4383],{"type":2543,"tag":2826,"props":4375,"children":4376},{"style":4089},[4377],{"type":2548,"value":4092},{"type":2543,"tag":2826,"props":4379,"children":4380},{"style":3062},[4381],{"type":2548,"value":4382}," clearUserSession",{"type":2543,"tag":2826,"props":4384,"children":4385},{"style":2900},[4386],{"type":2548,"value":4355},{"type":2543,"tag":2826,"props":4388,"children":4389},{"class":2828,"line":3841},[4390],{"type":2543,"tag":2826,"props":4391,"children":4392},{"emptyLinePlaceholder":3093},[4393],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":4395,"children":4396},{"class":2828,"line":3878},[4397],{"type":2543,"tag":2826,"props":4398,"children":4399},{"style":2891},[4400],{"type":2548,"value":4401},"\u002F\u002F Require a user session (send back 401 if no `user` key in session)\n",{"type":2543,"tag":2826,"props":4403,"children":4404},{"class":2828,"line":3886},[4405,4409,4413,4417,4421,4426],{"type":2543,"tag":2826,"props":4406,"children":4407},{"style":2977},[4408],{"type":2548,"value":2993},{"type":2543,"tag":2826,"props":4410,"children":4411},{"style":2900},[4412],{"type":2548,"value":4336},{"type":2543,"tag":2826,"props":4414,"children":4415},{"style":2905},[4416],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":4418,"children":4419},{"style":4089},[4420],{"type":2548,"value":4345},{"type":2543,"tag":2826,"props":4422,"children":4423},{"style":3062},[4424],{"type":2548,"value":4425}," requireUserSession",{"type":2543,"tag":2826,"props":4427,"children":4428},{"style":2900},[4429],{"type":2548,"value":4355},{"type":2543,"tag":2550,"props":4431,"children":4432},{},[4433,4435,4441,4443,4448],{"type":2548,"value":4434},"You can define the type for your user session by creating a type declaration file (for example, ",{"type":2543,"tag":2688,"props":4436,"children":4438},{"className":4437},[],[4439],{"type":2548,"value":4440},"auth.d.ts",{"type":2548,"value":4442},") in your project to augment the ",{"type":2543,"tag":2688,"props":4444,"children":4446},{"className":4445},[],[4447],{"type":2548,"value":3743},{"type":2548,"value":4449}," type:",{"type":2543,"tag":2816,"props":4451,"children":4453},{"className":3505,"code":4452,"language":3507,"meta":2416,"style":2416},"\u002F\u002F shared\u002Ftypes\u002Fauth.d.ts\ndeclare module '#auth-utils' {\n  interface User {\n    \u002F\u002F Add your own fields\n  }\n\n  interface UserSession {\n    \u002F\u002F Add your own fields\n  }\n\n  interface SecureSessionData {\n    \u002F\u002F Add your own fields\n  }\n}\n\nexport {}\n",[4454],{"type":2543,"tag":2688,"props":4455,"children":4456},{"__ignoreMap":2416},[4457,4465,4495,4512,4520,4528,4535,4551,4558,4565,4572,4588,4595,4602,4609,4616],{"type":2543,"tag":2826,"props":4458,"children":4459},{"class":2828,"line":2502},[4460],{"type":2543,"tag":2826,"props":4461,"children":4462},{"style":2891},[4463],{"type":2548,"value":4464},"\u002F\u002F shared\u002Ftypes\u002Fauth.d.ts\n",{"type":2543,"tag":2826,"props":4466,"children":4467},{"class":2828,"line":2468},[4468,4473,4477,4481,4486,4491],{"type":2543,"tag":2826,"props":4469,"children":4470},{"style":2977},[4471],{"type":2548,"value":4472},"declare",{"type":2543,"tag":2826,"props":4474,"children":4475},{"style":2977},[4476],{"type":2548,"value":2846},{"type":2543,"tag":2826,"props":4478,"children":4479},{"style":2905},[4480],{"type":2548,"value":4150},{"type":2543,"tag":2826,"props":4482,"children":4483},{"style":2838},[4484],{"type":2548,"value":4485},"#auth-utils",{"type":2543,"tag":2826,"props":4487,"children":4488},{"style":2905},[4489],{"type":2548,"value":4490},"'",{"type":2543,"tag":2826,"props":4492,"children":4493},{"style":2905},[4494],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":4496,"children":4497},{"class":2828,"line":2452},[4498,4503,4508],{"type":2543,"tag":2826,"props":4499,"children":4500},{"style":2977},[4501],{"type":2548,"value":4502},"  interface",{"type":2543,"tag":2826,"props":4504,"children":4505},{"style":2832},[4506],{"type":2548,"value":4507}," User",{"type":2543,"tag":2826,"props":4509,"children":4510},{"style":2905},[4511],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":4513,"children":4514},{"class":2828,"line":3089},[4515],{"type":2543,"tag":2826,"props":4516,"children":4517},{"style":2891},[4518],{"type":2548,"value":4519},"    \u002F\u002F Add your own fields\n",{"type":2543,"tag":2826,"props":4521,"children":4522},{"class":2828,"line":3099},[4523],{"type":2543,"tag":2826,"props":4524,"children":4525},{"style":2905},[4526],{"type":2548,"value":4527},"  }\n",{"type":2543,"tag":2826,"props":4529,"children":4530},{"class":2828,"line":3116},[4531],{"type":2543,"tag":2826,"props":4532,"children":4533},{"emptyLinePlaceholder":3093},[4534],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":4536,"children":4537},{"class":2828,"line":2448},[4538,4542,4547],{"type":2543,"tag":2826,"props":4539,"children":4540},{"style":2977},[4541],{"type":2548,"value":4502},{"type":2543,"tag":2826,"props":4543,"children":4544},{"style":2832},[4545],{"type":2548,"value":4546}," UserSession",{"type":2543,"tag":2826,"props":4548,"children":4549},{"style":2905},[4550],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":4552,"children":4553},{"class":2828,"line":2444},[4554],{"type":2543,"tag":2826,"props":4555,"children":4556},{"style":2891},[4557],{"type":2548,"value":4519},{"type":2543,"tag":2826,"props":4559,"children":4560},{"class":2828,"line":2440},[4561],{"type":2543,"tag":2826,"props":4562,"children":4563},{"style":2905},[4564],{"type":2548,"value":4527},{"type":2543,"tag":2826,"props":4566,"children":4567},{"class":2828,"line":3278},[4568],{"type":2543,"tag":2826,"props":4569,"children":4570},{"emptyLinePlaceholder":3093},[4571],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":4573,"children":4574},{"class":2828,"line":2531},[4575,4579,4584],{"type":2543,"tag":2826,"props":4576,"children":4577},{"style":2977},[4578],{"type":2548,"value":4502},{"type":2543,"tag":2826,"props":4580,"children":4581},{"style":2832},[4582],{"type":2548,"value":4583}," SecureSessionData",{"type":2543,"tag":2826,"props":4585,"children":4586},{"style":2905},[4587],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":4589,"children":4590},{"class":2828,"line":3315},[4591],{"type":2543,"tag":2826,"props":4592,"children":4593},{"style":2891},[4594],{"type":2548,"value":4519},{"type":2543,"tag":2826,"props":4596,"children":4597},{"class":2828,"line":3348},[4598],{"type":2543,"tag":2826,"props":4599,"children":4600},{"style":2905},[4601],{"type":2548,"value":4527},{"type":2543,"tag":2826,"props":4603,"children":4604},{"class":2828,"line":3403},[4605],{"type":2543,"tag":2826,"props":4606,"children":4607},{"style":2905},[4608],{"type":2548,"value":4005},{"type":2543,"tag":2826,"props":4610,"children":4611},{"class":2828,"line":3412},[4612],{"type":2543,"tag":2826,"props":4613,"children":4614},{"emptyLinePlaceholder":3093},[4615],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":4617,"children":4618},{"class":2828,"line":2436},[4619,4624],{"type":2543,"tag":2826,"props":4620,"children":4621},{"style":4089},[4622],{"type":2548,"value":4623},"export",{"type":2543,"tag":2826,"props":4625,"children":4626},{"style":2905},[4627],{"type":2548,"value":4628}," {}\n",{"type":2543,"tag":4007,"props":4630,"children":4631},{},[4632],{"type":2543,"tag":2550,"props":4633,"children":4634},{},[4635,4639],{"type":2543,"tag":2826,"props":4636,"children":4637},{},[4638],{"type":2548,"value":4017},{"type":2548,"value":4640},"\nSince we encrypt and store session data in cookies, we're constrained by the 4096-byte cookie size limit. Store only essential information.",{"type":2543,"tag":2946,"props":4642,"children":4644},{"id":4643},"oauth-event-handlers",[4645],{"type":2548,"value":4646},"OAuth Event Handlers",{"type":2543,"tag":2550,"props":4648,"children":4649},{},[4650],{"type":2548,"value":4651},"All handlers can be auto-imported and used in your server routes or API routes.",{"type":2543,"tag":2550,"props":4653,"children":4654},{},[4655,4657,4663,4665,4671],{"type":2548,"value":4656},"The pattern is ",{"type":2543,"tag":2688,"props":4658,"children":4660},{"className":4659},[],[4661],{"type":2548,"value":4662},"defineOAuth\u003CProvider>EventHandler({ onSuccess, config?, onError? })",{"type":2548,"value":4664},", example: ",{"type":2543,"tag":2688,"props":4666,"children":4668},{"className":4667},[],[4669],{"type":2548,"value":4670},"defineOAuthGitHubEventHandler",{"type":2548,"value":2781},{"type":2543,"tag":2550,"props":4673,"children":4674},{},[4675,4677,4683,4685,4691],{"type":2548,"value":4676},"The helper returns an event handler that automatically redirects to the provider authorization page and then calls ",{"type":2543,"tag":2688,"props":4678,"children":4680},{"className":4679},[],[4681],{"type":2548,"value":4682},"onSuccess",{"type":2548,"value":4684}," or ",{"type":2543,"tag":2688,"props":4686,"children":4688},{"className":4687},[],[4689],{"type":2548,"value":4690},"onError",{"type":2548,"value":4692}," depending on the result.",{"type":2543,"tag":2550,"props":4694,"children":4695},{},[4696,4698,4704,4706,4712,4714,4719],{"type":2548,"value":4697},"The ",{"type":2543,"tag":2688,"props":4699,"children":4701},{"className":4700},[],[4702],{"type":2548,"value":4703},"config",{"type":2548,"value":4705}," can be defined directly from the ",{"type":2543,"tag":2688,"props":4707,"children":4709},{"className":4708},[],[4710],{"type":2548,"value":4711},"runtimeConfig",{"type":2548,"value":4713}," in your ",{"type":2543,"tag":2688,"props":4715,"children":4717},{"className":4716},[],[4718],{"type":2548,"value":244},{"type":2548,"value":3566},{"type":2543,"tag":2816,"props":4721,"children":4723},{"className":3505,"code":4722,"language":3507,"meta":2416,"style":2416},"export default defineNuxtConfig({\n  runtimeConfig: {\n    oauth: {\n      \u002F\u002F provider in lowercase (github, google, etc.)\n      \u003Cprovider>: {\n        clientId: '...',\n        clientSecret: '...'\n      }\n    }\n  }\n})\n",[4724],{"type":2543,"tag":2688,"props":4725,"children":4726},{"__ignoreMap":2416},[4727,4754,4770,4786,4794,4810,4840,4864,4872,4880,4887],{"type":2543,"tag":2826,"props":4728,"children":4729},{"class":2828,"line":2502},[4730,4734,4739,4744,4749],{"type":2543,"tag":2826,"props":4731,"children":4732},{"style":4089},[4733],{"type":2548,"value":4623},{"type":2543,"tag":2826,"props":4735,"children":4736},{"style":4089},[4737],{"type":2548,"value":4738}," default",{"type":2543,"tag":2826,"props":4740,"children":4741},{"style":3062},[4742],{"type":2548,"value":4743}," defineNuxtConfig",{"type":2543,"tag":2826,"props":4745,"children":4746},{"style":2900},[4747],{"type":2548,"value":4748},"(",{"type":2543,"tag":2826,"props":4750,"children":4751},{"style":2905},[4752],{"type":2548,"value":4753},"{\n",{"type":2543,"tag":2826,"props":4755,"children":4756},{"class":2828,"line":2468},[4757,4762,4766],{"type":2543,"tag":2826,"props":4758,"children":4759},{"style":2971},[4760],{"type":2548,"value":4761},"  runtimeConfig",{"type":2543,"tag":2826,"props":4763,"children":4764},{"style":2905},[4765],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":4767,"children":4768},{"style":2905},[4769],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":4771,"children":4772},{"class":2828,"line":2452},[4773,4778,4782],{"type":2543,"tag":2826,"props":4774,"children":4775},{"style":2971},[4776],{"type":2548,"value":4777},"    oauth",{"type":2543,"tag":2826,"props":4779,"children":4780},{"style":2905},[4781],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":4783,"children":4784},{"style":2905},[4785],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":4787,"children":4788},{"class":2828,"line":3089},[4789],{"type":2543,"tag":2826,"props":4790,"children":4791},{"style":2891},[4792],{"type":2548,"value":4793},"      \u002F\u002F provider in lowercase (github, google, etc.)\n",{"type":2543,"tag":2826,"props":4795,"children":4796},{"class":2828,"line":3099},[4797,4802,4806],{"type":2543,"tag":2826,"props":4798,"children":4799},{"style":2900},[4800],{"type":2548,"value":4801},"      \u003Cprovider>",{"type":2543,"tag":2826,"props":4803,"children":4804},{"style":2905},[4805],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":4807,"children":4808},{"style":2905},[4809],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":4811,"children":4812},{"class":2828,"line":3116},[4813,4818,4822,4826,4831,4835],{"type":2543,"tag":2826,"props":4814,"children":4815},{"style":2971},[4816],{"type":2548,"value":4817},"        clientId",{"type":2543,"tag":2826,"props":4819,"children":4820},{"style":2905},[4821],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":4823,"children":4824},{"style":2905},[4825],{"type":2548,"value":4150},{"type":2543,"tag":2826,"props":4827,"children":4828},{"style":2838},[4829],{"type":2548,"value":4830},"...",{"type":2543,"tag":2826,"props":4832,"children":4833},{"style":2905},[4834],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":4836,"children":4837},{"style":2905},[4838],{"type":2548,"value":4839},",\n",{"type":2543,"tag":2826,"props":4841,"children":4842},{"class":2828,"line":2448},[4843,4848,4852,4856,4860],{"type":2543,"tag":2826,"props":4844,"children":4845},{"style":2971},[4846],{"type":2548,"value":4847},"        clientSecret",{"type":2543,"tag":2826,"props":4849,"children":4850},{"style":2905},[4851],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":4853,"children":4854},{"style":2905},[4855],{"type":2548,"value":4150},{"type":2543,"tag":2826,"props":4857,"children":4858},{"style":2838},[4859],{"type":2548,"value":4830},{"type":2543,"tag":2826,"props":4861,"children":4862},{"style":2905},[4863],{"type":2548,"value":4159},{"type":2543,"tag":2826,"props":4865,"children":4866},{"class":2828,"line":2444},[4867],{"type":2543,"tag":2826,"props":4868,"children":4869},{"style":2905},[4870],{"type":2548,"value":4871},"      }\n",{"type":2543,"tag":2826,"props":4873,"children":4874},{"class":2828,"line":2440},[4875],{"type":2543,"tag":2826,"props":4876,"children":4877},{"style":2905},[4878],{"type":2548,"value":4879},"    }\n",{"type":2543,"tag":2826,"props":4881,"children":4882},{"class":2828,"line":3278},[4883],{"type":2543,"tag":2826,"props":4884,"children":4885},{"style":2905},[4886],{"type":2548,"value":4527},{"type":2543,"tag":2826,"props":4888,"children":4889},{"class":2828,"line":2531},[4890,4894],{"type":2543,"tag":2826,"props":4891,"children":4892},{"style":2905},[4893],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":4895,"children":4896},{"style":2900},[4897],{"type":2548,"value":4269},{"type":2543,"tag":2550,"props":4899,"children":4900},{},[4901],{"type":2548,"value":4902},"It can also be set using environment variables:",{"type":2543,"tag":2600,"props":4904,"children":4905},{},[4906,4915],{"type":2543,"tag":2604,"props":4907,"children":4908},{},[4909],{"type":2543,"tag":2688,"props":4910,"children":4912},{"className":4911},[],[4913],{"type":2548,"value":4914},"NUXT_OAUTH_\u003CPROVIDER>_CLIENT_ID",{"type":2543,"tag":2604,"props":4916,"children":4917},{},[4918],{"type":2543,"tag":2688,"props":4919,"children":4921},{"className":4920},[],[4922],{"type":2548,"value":4923},"NUXT_OAUTH_\u003CPROVIDER>_CLIENT_SECRET",{"type":2543,"tag":4007,"props":4925,"children":4926},{},[4927],{"type":2543,"tag":2550,"props":4928,"children":4929},{},[4930],{"type":2548,"value":4931},"Provider is in uppercase (GITHUB, GOOGLE, etc.)",{"type":2543,"tag":4933,"props":4934,"children":4936},"h4",{"id":4935},"supported-oauth-providers",[4937],{"type":2548,"value":4938},"Supported OAuth Providers",{"type":2543,"tag":2600,"props":4940,"children":4941},{},[4942,4947,4952,4957,4962,4967,4972,4977,4982,4987,4992,4997,5002,5007,5012,5017,5022,5027,5032,5037,5042,5047,5052,5057,5062,5067,5072,5077,5082,5087,5092,5097,5102,5107,5112,5117,5122,5127,5132,5137,5142,5147,5152,5157,5162,5167,5172,5177],{"type":2543,"tag":2604,"props":4943,"children":4944},{},[4945],{"type":2548,"value":4946},"Apple",{"type":2543,"tag":2604,"props":4948,"children":4949},{},[4950],{"type":2548,"value":4951},"Atlassian",{"type":2543,"tag":2604,"props":4953,"children":4954},{},[4955],{"type":2548,"value":4956},"Auth0",{"type":2543,"tag":2604,"props":4958,"children":4959},{},[4960],{"type":2548,"value":4961},"Authentik",{"type":2543,"tag":2604,"props":4963,"children":4964},{},[4965],{"type":2548,"value":4966},"AWS Cognito",{"type":2543,"tag":2604,"props":4968,"children":4969},{},[4970],{"type":2548,"value":4971},"Azure B2C",{"type":2543,"tag":2604,"props":4973,"children":4974},{},[4975],{"type":2548,"value":4976},"Battle.net",{"type":2543,"tag":2604,"props":4978,"children":4979},{},[4980],{"type":2548,"value":4981},"Bluesky (AT Protocol)",{"type":2543,"tag":2604,"props":4983,"children":4984},{},[4985],{"type":2548,"value":4986},"Box.com",{"type":2543,"tag":2604,"props":4988,"children":4989},{},[4990],{"type":2548,"value":4991},"Discord",{"type":2543,"tag":2604,"props":4993,"children":4994},{},[4995],{"type":2548,"value":4996},"Dropbox",{"type":2543,"tag":2604,"props":4998,"children":4999},{},[5000],{"type":2548,"value":5001},"Facebook",{"type":2543,"tag":2604,"props":5003,"children":5004},{},[5005],{"type":2548,"value":5006},"GitHub",{"type":2543,"tag":2604,"props":5008,"children":5009},{},[5010],{"type":2548,"value":5011},"GitLab",{"type":2543,"tag":2604,"props":5013,"children":5014},{},[5015],{"type":2548,"value":5016},"Gitea",{"type":2543,"tag":2604,"props":5018,"children":5019},{},[5020],{"type":2548,"value":5021},"Google",{"type":2543,"tag":2604,"props":5023,"children":5024},{},[5025],{"type":2548,"value":5026},"Heroku",{"type":2543,"tag":2604,"props":5028,"children":5029},{},[5030],{"type":2548,"value":5031},"Hubspot",{"type":2543,"tag":2604,"props":5033,"children":5034},{},[5035],{"type":2548,"value":5036},"Instagram",{"type":2543,"tag":2604,"props":5038,"children":5039},{},[5040],{"type":2548,"value":5041},"Kick",{"type":2543,"tag":2604,"props":5043,"children":5044},{},[5045],{"type":2548,"value":5046},"Keycloak",{"type":2543,"tag":2604,"props":5048,"children":5049},{},[5050],{"type":2548,"value":5051},"Line",{"type":2543,"tag":2604,"props":5053,"children":5054},{},[5055],{"type":2548,"value":5056},"Linear",{"type":2543,"tag":2604,"props":5058,"children":5059},{},[5060],{"type":2548,"value":5061},"LinkedIn",{"type":2543,"tag":2604,"props":5063,"children":5064},{},[5065],{"type":2548,"value":5066},"LiveChat",{"type":2543,"tag":2604,"props":5068,"children":5069},{},[5070],{"type":2548,"value":5071},"Microsoft",{"type":2543,"tag":2604,"props":5073,"children":5074},{},[5075],{"type":2548,"value":5076},"OIDC \u002F OpenID Connect (Generic)",{"type":2543,"tag":2604,"props":5078,"children":5079},{},[5080],{"type":2548,"value":5081},"Okta",{"type":2543,"tag":2604,"props":5083,"children":5084},{},[5085],{"type":2548,"value":5086},"Ory",{"type":2543,"tag":2604,"props":5088,"children":5089},{},[5090],{"type":2548,"value":5091},"osu!",{"type":2543,"tag":2604,"props":5093,"children":5094},{},[5095],{"type":2548,"value":5096},"PayPal",{"type":2543,"tag":2604,"props":5098,"children":5099},{},[5100],{"type":2548,"value":5101},"Polar",{"type":2543,"tag":2604,"props":5103,"children":5104},{},[5105],{"type":2548,"value":5106},"Riot Games",{"type":2543,"tag":2604,"props":5108,"children":5109},{},[5110],{"type":2548,"value":5111},"Salesforce",{"type":2543,"tag":2604,"props":5113,"children":5114},{},[5115],{"type":2548,"value":5116},"Seznam",{"type":2543,"tag":2604,"props":5118,"children":5119},{},[5120],{"type":2548,"value":5121},"Shopify Customer",{"type":2543,"tag":2604,"props":5123,"children":5124},{},[5125],{"type":2548,"value":5126},"Slack",{"type":2543,"tag":2604,"props":5128,"children":5129},{},[5130],{"type":2548,"value":5131},"Spotify",{"type":2543,"tag":2604,"props":5133,"children":5134},{},[5135],{"type":2548,"value":5136},"Steam",{"type":2543,"tag":2604,"props":5138,"children":5139},{},[5140],{"type":2548,"value":5141},"Strava",{"type":2543,"tag":2604,"props":5143,"children":5144},{},[5145],{"type":2548,"value":5146},"TikTok",{"type":2543,"tag":2604,"props":5148,"children":5149},{},[5150],{"type":2548,"value":5151},"Twitch",{"type":2543,"tag":2604,"props":5153,"children":5154},{},[5155],{"type":2548,"value":5156},"VK",{"type":2543,"tag":2604,"props":5158,"children":5159},{},[5160],{"type":2548,"value":5161},"WorkOS",{"type":2543,"tag":2604,"props":5163,"children":5164},{},[5165],{"type":2548,"value":5166},"X (Twitter)",{"type":2543,"tag":2604,"props":5168,"children":5169},{},[5170],{"type":2548,"value":5171},"XSUAA",{"type":2543,"tag":2604,"props":5173,"children":5174},{},[5175],{"type":2548,"value":5176},"Yandex",{"type":2543,"tag":2604,"props":5178,"children":5179},{},[5180],{"type":2548,"value":5181},"Zitadel",{"type":2543,"tag":2550,"props":5183,"children":5184},{},[5185,5187,5194],{"type":2548,"value":5186},"You can add your favorite provider by creating a new file in ",{"type":2543,"tag":2554,"props":5188,"children":5191},{"href":5189,"rel":5190},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils\u002Ftree\u002Fmain\u002Fsrc\u002Fruntime\u002Fserver\u002Flib\u002Foauth",[2558],[5192],{"type":2548,"value":5193},"src\u002Fruntime\u002Fserver\u002Flib\u002Foauth\u002F",{"type":2548,"value":2781},{"type":2543,"tag":4933,"props":5196,"children":5198},{"id":5197},"example",[5199],{"type":2548,"value":5200},"Example",{"type":2543,"tag":2550,"props":5202,"children":5203},{},[5204,5206],{"type":2548,"value":5205},"Example: ",{"type":2543,"tag":2688,"props":5207,"children":5209},{"className":5208},[],[5210],{"type":2548,"value":5211},"~\u002Fserver\u002Froutes\u002Fauth\u002Fgithub.get.ts",{"type":2543,"tag":2816,"props":5213,"children":5215},{"className":3505,"code":5214,"language":3507,"meta":2416,"style":2416},"export default defineOAuthGitHubEventHandler({\n  config: {\n    emailRequired: true\n  },\n  async onSuccess(event, { user, tokens }) {\n    await setUserSession(event, {\n      user: {\n        githubId: user.id\n      }\n    })\n    return sendRedirect(event, '\u002F')\n  },\n  \u002F\u002F Optional, will return a json error and 401 status code by default\n  onError(event, error) {\n    console.error('GitHub OAuth error:', error)\n    return sendRedirect(event, '\u002F')\n  },\n})\n",[5216],{"type":2543,"tag":2688,"props":5217,"children":5218},{"__ignoreMap":2416},[5219,5243,5259,5277,5284,5335,5363,5379,5404,5411,5423,5465,5472,5480,5514,5560,5599,5606],{"type":2543,"tag":2826,"props":5220,"children":5221},{"class":2828,"line":2502},[5222,5226,5230,5235,5239],{"type":2543,"tag":2826,"props":5223,"children":5224},{"style":4089},[5225],{"type":2548,"value":4623},{"type":2543,"tag":2826,"props":5227,"children":5228},{"style":4089},[5229],{"type":2548,"value":4738},{"type":2543,"tag":2826,"props":5231,"children":5232},{"style":3062},[5233],{"type":2548,"value":5234}," defineOAuthGitHubEventHandler",{"type":2543,"tag":2826,"props":5236,"children":5237},{"style":2900},[5238],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":5240,"children":5241},{"style":2905},[5242],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":5244,"children":5245},{"class":2828,"line":2468},[5246,5251,5255],{"type":2543,"tag":2826,"props":5247,"children":5248},{"style":2971},[5249],{"type":2548,"value":5250},"  config",{"type":2543,"tag":2826,"props":5252,"children":5253},{"style":2905},[5254],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":5256,"children":5257},{"style":2905},[5258],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":5260,"children":5261},{"class":2828,"line":2452},[5262,5267,5271],{"type":2543,"tag":2826,"props":5263,"children":5264},{"style":2971},[5265],{"type":2548,"value":5266},"    emailRequired",{"type":2543,"tag":2826,"props":5268,"children":5269},{"style":2905},[5270],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":5272,"children":5274},{"style":5273},"--shiki-light:#FF5370;--shiki-default:#FF5370;--shiki-dark:#FF9CAC",[5275],{"type":2548,"value":5276}," true\n",{"type":2543,"tag":2826,"props":5278,"children":5279},{"class":2828,"line":3089},[5280],{"type":2543,"tag":2826,"props":5281,"children":5282},{"style":2905},[5283],{"type":2548,"value":4167},{"type":2543,"tag":2826,"props":5285,"children":5286},{"class":2828,"line":3099},[5287,5292,5297,5301,5306,5310,5314,5318,5322,5327,5331],{"type":2543,"tag":2826,"props":5288,"children":5289},{"style":2977},[5290],{"type":2548,"value":5291},"  async",{"type":2543,"tag":2826,"props":5293,"children":5294},{"style":2971},[5295],{"type":2548,"value":5296}," onSuccess",{"type":2543,"tag":2826,"props":5298,"children":5299},{"style":2905},[5300],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":5302,"children":5303},{"style":3921},[5304],{"type":2548,"value":5305},"event",{"type":2543,"tag":2826,"props":5307,"children":5308},{"style":2905},[5309],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":5311,"children":5312},{"style":2905},[5313],{"type":2548,"value":2998},{"type":2543,"tag":2826,"props":5315,"children":5316},{"style":3921},[5317],{"type":2548,"value":3013},{"type":2543,"tag":2826,"props":5319,"children":5320},{"style":2905},[5321],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":5323,"children":5324},{"style":3921},[5325],{"type":2548,"value":5326}," tokens",{"type":2543,"tag":2826,"props":5328,"children":5329},{"style":2905},[5330],{"type":2548,"value":3987},{"type":2543,"tag":2826,"props":5332,"children":5333},{"style":2905},[5334],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":5336,"children":5337},{"class":2828,"line":3116},[5338,5343,5347,5351,5355,5359],{"type":2543,"tag":2826,"props":5339,"children":5340},{"style":4089},[5341],{"type":2548,"value":5342},"    await",{"type":2543,"tag":2826,"props":5344,"children":5345},{"style":3062},[5346],{"type":2548,"value":4097},{"type":2543,"tag":2826,"props":5348,"children":5349},{"style":2971},[5350],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":5352,"children":5353},{"style":2900},[5354],{"type":2548,"value":5305},{"type":2543,"tag":2826,"props":5356,"children":5357},{"style":2905},[5358],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":5360,"children":5361},{"style":2905},[5362],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":5364,"children":5365},{"class":2828,"line":2448},[5366,5371,5375],{"type":2543,"tag":2826,"props":5367,"children":5368},{"style":2971},[5369],{"type":2548,"value":5370},"      user",{"type":2543,"tag":2826,"props":5372,"children":5373},{"style":2905},[5374],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":5376,"children":5377},{"style":2905},[5378],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":5380,"children":5381},{"class":2828,"line":2444},[5382,5387,5391,5395,5399],{"type":2543,"tag":2826,"props":5383,"children":5384},{"style":2971},[5385],{"type":2548,"value":5386},"        githubId",{"type":2543,"tag":2826,"props":5388,"children":5389},{"style":2905},[5390],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":5392,"children":5393},{"style":2900},[5394],{"type":2548,"value":3013},{"type":2543,"tag":2826,"props":5396,"children":5397},{"style":2905},[5398],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":5400,"children":5401},{"style":2900},[5402],{"type":2548,"value":5403},"id\n",{"type":2543,"tag":2826,"props":5405,"children":5406},{"class":2828,"line":2440},[5407],{"type":2543,"tag":2826,"props":5408,"children":5409},{"style":2905},[5410],{"type":2548,"value":4871},{"type":2543,"tag":2826,"props":5412,"children":5413},{"class":2828,"line":3278},[5414,5419],{"type":2543,"tag":2826,"props":5415,"children":5416},{"style":2905},[5417],{"type":2548,"value":5418},"    }",{"type":2543,"tag":2826,"props":5420,"children":5421},{"style":2971},[5422],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":5424,"children":5425},{"class":2828,"line":2531},[5426,5431,5436,5440,5444,5448,5452,5457,5461],{"type":2543,"tag":2826,"props":5427,"children":5428},{"style":4089},[5429],{"type":2548,"value":5430},"    return",{"type":2543,"tag":2826,"props":5432,"children":5433},{"style":3062},[5434],{"type":2548,"value":5435}," sendRedirect",{"type":2543,"tag":2826,"props":5437,"children":5438},{"style":2971},[5439],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":5441,"children":5442},{"style":2900},[5443],{"type":2548,"value":5305},{"type":2543,"tag":2826,"props":5445,"children":5446},{"style":2905},[5447],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":5449,"children":5450},{"style":2905},[5451],{"type":2548,"value":4150},{"type":2543,"tag":2826,"props":5453,"children":5454},{"style":2838},[5455],{"type":2548,"value":5456},"\u002F",{"type":2543,"tag":2826,"props":5458,"children":5459},{"style":2905},[5460],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":5462,"children":5463},{"style":2971},[5464],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":5466,"children":5467},{"class":2828,"line":3315},[5468],{"type":2543,"tag":2826,"props":5469,"children":5470},{"style":2905},[5471],{"type":2548,"value":4167},{"type":2543,"tag":2826,"props":5473,"children":5474},{"class":2828,"line":3348},[5475],{"type":2543,"tag":2826,"props":5476,"children":5477},{"style":2891},[5478],{"type":2548,"value":5479},"  \u002F\u002F Optional, will return a json error and 401 status code by default\n",{"type":2543,"tag":2826,"props":5481,"children":5482},{"class":2828,"line":3403},[5483,5488,5492,5496,5500,5505,5510],{"type":2543,"tag":2826,"props":5484,"children":5485},{"style":2971},[5486],{"type":2548,"value":5487},"  onError",{"type":2543,"tag":2826,"props":5489,"children":5490},{"style":2905},[5491],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":5493,"children":5494},{"style":3921},[5495],{"type":2548,"value":5305},{"type":2543,"tag":2826,"props":5497,"children":5498},{"style":2905},[5499],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":5501,"children":5502},{"style":3921},[5503],{"type":2548,"value":5504}," error",{"type":2543,"tag":2826,"props":5506,"children":5507},{"style":2905},[5508],{"type":2548,"value":5509},")",{"type":2543,"tag":2826,"props":5511,"children":5512},{"style":2905},[5513],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":5515,"children":5516},{"class":2828,"line":3412},[5517,5522,5526,5531,5535,5539,5544,5548,5552,5556],{"type":2543,"tag":2826,"props":5518,"children":5519},{"style":2900},[5520],{"type":2548,"value":5521},"    console",{"type":2543,"tag":2826,"props":5523,"children":5524},{"style":2905},[5525],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":5527,"children":5528},{"style":3062},[5529],{"type":2548,"value":5530},"error",{"type":2543,"tag":2826,"props":5532,"children":5533},{"style":2971},[5534],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":5536,"children":5537},{"style":2905},[5538],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":5540,"children":5541},{"style":2838},[5542],{"type":2548,"value":5543},"GitHub OAuth error:",{"type":2543,"tag":2826,"props":5545,"children":5546},{"style":2905},[5547],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":5549,"children":5550},{"style":2905},[5551],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":5553,"children":5554},{"style":2900},[5555],{"type":2548,"value":5504},{"type":2543,"tag":2826,"props":5557,"children":5558},{"style":2971},[5559],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":5561,"children":5562},{"class":2828,"line":2436},[5563,5567,5571,5575,5579,5583,5587,5591,5595],{"type":2543,"tag":2826,"props":5564,"children":5565},{"style":4089},[5566],{"type":2548,"value":5430},{"type":2543,"tag":2826,"props":5568,"children":5569},{"style":3062},[5570],{"type":2548,"value":5435},{"type":2543,"tag":2826,"props":5572,"children":5573},{"style":2971},[5574],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":5576,"children":5577},{"style":2900},[5578],{"type":2548,"value":5305},{"type":2543,"tag":2826,"props":5580,"children":5581},{"style":2905},[5582],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":5584,"children":5585},{"style":2905},[5586],{"type":2548,"value":4150},{"type":2543,"tag":2826,"props":5588,"children":5589},{"style":2838},[5590],{"type":2548,"value":5456},{"type":2543,"tag":2826,"props":5592,"children":5593},{"style":2905},[5594],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":5596,"children":5597},{"style":2971},[5598],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":5600,"children":5601},{"class":2828,"line":3480},[5602],{"type":2543,"tag":2826,"props":5603,"children":5604},{"style":2905},[5605],{"type":2548,"value":4167},{"type":2543,"tag":2826,"props":5607,"children":5608},{"class":2828,"line":3750},[5609,5613],{"type":2543,"tag":2826,"props":5610,"children":5611},{"style":2905},[5612],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":5614,"children":5615},{"style":2900},[5616],{"type":2548,"value":4269},{"type":2543,"tag":2550,"props":5618,"children":5619},{},[5620,5622,5628],{"type":2548,"value":5621},"Make sure to set the callback URL in your OAuth app settings as ",{"type":2543,"tag":2688,"props":5623,"children":5625},{"className":5624},[],[5626],{"type":2548,"value":5627},"\u003Cyour-domain>\u002Fauth\u002Fgithub",{"type":2548,"value":2781},{"type":2543,"tag":2550,"props":5630,"children":5631},{},[5632,5634,5640],{"type":2548,"value":5633},"If the redirect URL mismatch in production, this means that the module cannot guess the right redirect URL. You can set the ",{"type":2543,"tag":2688,"props":5635,"children":5637},{"className":5636},[],[5638],{"type":2548,"value":5639},"NUXT_OAUTH_\u003CPROVIDER>_REDIRECT_URL",{"type":2548,"value":5641}," env variable to overwrite the default one.",{"type":2543,"tag":2946,"props":5643,"children":5645},{"id":5644},"password-hashing",[5646],{"type":2548,"value":2670},{"type":2543,"tag":2550,"props":5648,"children":5649},{},[5650,5652,5658,5660,5666,5668,5675],{"type":2548,"value":5651},"Nuxt Auth Utils provides password hashing utilities like ",{"type":2543,"tag":2688,"props":5653,"children":5655},{"className":5654},[],[5656],{"type":2548,"value":5657},"hashPassword",{"type":2548,"value":5659}," and ",{"type":2543,"tag":2688,"props":5661,"children":5663},{"className":5662},[],[5664],{"type":2548,"value":5665},"verifyPassword",{"type":2548,"value":5667}," to hash and verify passwords by using ",{"type":2543,"tag":2554,"props":5669,"children":5672},{"href":5670,"rel":5671},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FScrypt",[2558],[5673],{"type":2548,"value":5674},"scrypt",{"type":2548,"value":5676}," as it is supported in many JS runtime.",{"type":2543,"tag":2816,"props":5678,"children":5680},{"className":3505,"code":5679,"language":3507,"meta":2416,"style":2416},"const hashedPassword = await hashPassword('user_password')\n\nif (await verifyPassword(hashedPassword, 'user_password')) {\n  \u002F\u002F Password is valid\n}\n",[5681],{"type":2543,"tag":2688,"props":5682,"children":5683},{"__ignoreMap":2416},[5684,5730,5737,5788,5796],{"type":2543,"tag":2826,"props":5685,"children":5686},{"class":2828,"line":2502},[5687,5691,5696,5700,5704,5709,5713,5717,5722,5726],{"type":2543,"tag":2826,"props":5688,"children":5689},{"style":2977},[5690],{"type":2548,"value":2993},{"type":2543,"tag":2826,"props":5692,"children":5693},{"style":2900},[5694],{"type":2548,"value":5695}," hashedPassword ",{"type":2543,"tag":2826,"props":5697,"children":5698},{"style":2905},[5699],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":5701,"children":5702},{"style":4089},[5703],{"type":2548,"value":4345},{"type":2543,"tag":2826,"props":5705,"children":5706},{"style":3062},[5707],{"type":2548,"value":5708}," hashPassword",{"type":2543,"tag":2826,"props":5710,"children":5711},{"style":2900},[5712],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":5714,"children":5715},{"style":2905},[5716],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":5718,"children":5719},{"style":2838},[5720],{"type":2548,"value":5721},"user_password",{"type":2543,"tag":2826,"props":5723,"children":5724},{"style":2905},[5725],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":5727,"children":5728},{"style":2900},[5729],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":5731,"children":5732},{"class":2828,"line":2468},[5733],{"type":2543,"tag":2826,"props":5734,"children":5735},{"emptyLinePlaceholder":3093},[5736],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":5738,"children":5739},{"class":2828,"line":2452},[5740,5745,5749,5753,5758,5763,5767,5771,5775,5779,5784],{"type":2543,"tag":2826,"props":5741,"children":5742},{"style":4089},[5743],{"type":2548,"value":5744},"if",{"type":2543,"tag":2826,"props":5746,"children":5747},{"style":2900},[5748],{"type":2548,"value":3918},{"type":2543,"tag":2826,"props":5750,"children":5751},{"style":4089},[5752],{"type":2548,"value":4092},{"type":2543,"tag":2826,"props":5754,"children":5755},{"style":3062},[5756],{"type":2548,"value":5757}," verifyPassword",{"type":2543,"tag":2826,"props":5759,"children":5760},{"style":2900},[5761],{"type":2548,"value":5762},"(hashedPassword",{"type":2543,"tag":2826,"props":5764,"children":5765},{"style":2905},[5766],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":5768,"children":5769},{"style":2905},[5770],{"type":2548,"value":4150},{"type":2543,"tag":2826,"props":5772,"children":5773},{"style":2838},[5774],{"type":2548,"value":5721},{"type":2543,"tag":2826,"props":5776,"children":5777},{"style":2905},[5778],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":5780,"children":5781},{"style":2900},[5782],{"type":2548,"value":5783},")) ",{"type":2543,"tag":2826,"props":5785,"children":5786},{"style":2905},[5787],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":5789,"children":5790},{"class":2828,"line":3089},[5791],{"type":2543,"tag":2826,"props":5792,"children":5793},{"style":2891},[5794],{"type":2548,"value":5795},"  \u002F\u002F Password is valid\n",{"type":2543,"tag":2826,"props":5797,"children":5798},{"class":2828,"line":3099},[5799],{"type":2543,"tag":2826,"props":5800,"children":5801},{"style":2905},[5802],{"type":2548,"value":4005},{"type":2543,"tag":2550,"props":5804,"children":5805},{},[5806,5808,5814],{"type":2548,"value":5807},"It also provides a ",{"type":2543,"tag":2688,"props":5809,"children":5811},{"className":5810},[],[5812],{"type":2548,"value":5813},"passwordNeedsRehash",{"type":2548,"value":5815}," function to check if a password needs to be rehashed. This is useful when the hash settings are changed, such as as increasing the scrypt cost parameters.",{"type":2543,"tag":2816,"props":5817,"children":5819},{"className":3505,"code":5818,"language":3507,"meta":2416,"style":2416},"const needsRehash = passwordNeedsRehash(hashedPassword)\n\nif (needsRehash) {\n  \u002F\u002F Password needs to be rehashed\n  hashedPassword = await hashPassword('user_password')\n}\n",[5820],{"type":2543,"tag":2688,"props":5821,"children":5822},{"__ignoreMap":2416},[5823,5849,5856,5872,5880,5920],{"type":2543,"tag":2826,"props":5824,"children":5825},{"class":2828,"line":2502},[5826,5830,5835,5839,5844],{"type":2543,"tag":2826,"props":5827,"children":5828},{"style":2977},[5829],{"type":2548,"value":2993},{"type":2543,"tag":2826,"props":5831,"children":5832},{"style":2900},[5833],{"type":2548,"value":5834}," needsRehash ",{"type":2543,"tag":2826,"props":5836,"children":5837},{"style":2905},[5838],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":5840,"children":5841},{"style":3062},[5842],{"type":2548,"value":5843}," passwordNeedsRehash",{"type":2543,"tag":2826,"props":5845,"children":5846},{"style":2900},[5847],{"type":2548,"value":5848},"(hashedPassword)\n",{"type":2543,"tag":2826,"props":5850,"children":5851},{"class":2828,"line":2468},[5852],{"type":2543,"tag":2826,"props":5853,"children":5854},{"emptyLinePlaceholder":3093},[5855],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":5857,"children":5858},{"class":2828,"line":2452},[5859,5863,5868],{"type":2543,"tag":2826,"props":5860,"children":5861},{"style":4089},[5862],{"type":2548,"value":5744},{"type":2543,"tag":2826,"props":5864,"children":5865},{"style":2900},[5866],{"type":2548,"value":5867}," (needsRehash) ",{"type":2543,"tag":2826,"props":5869,"children":5870},{"style":2905},[5871],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":5873,"children":5874},{"class":2828,"line":3089},[5875],{"type":2543,"tag":2826,"props":5876,"children":5877},{"style":2891},[5878],{"type":2548,"value":5879},"  \u002F\u002F Password needs to be rehashed\n",{"type":2543,"tag":2826,"props":5881,"children":5882},{"class":2828,"line":3099},[5883,5888,5892,5896,5900,5904,5908,5912,5916],{"type":2543,"tag":2826,"props":5884,"children":5885},{"style":2900},[5886],{"type":2548,"value":5887},"  hashedPassword",{"type":2543,"tag":2826,"props":5889,"children":5890},{"style":2905},[5891],{"type":2548,"value":3059},{"type":2543,"tag":2826,"props":5893,"children":5894},{"style":4089},[5895],{"type":2548,"value":4345},{"type":2543,"tag":2826,"props":5897,"children":5898},{"style":3062},[5899],{"type":2548,"value":5708},{"type":2543,"tag":2826,"props":5901,"children":5902},{"style":2971},[5903],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":5905,"children":5906},{"style":2905},[5907],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":5909,"children":5910},{"style":2838},[5911],{"type":2548,"value":5721},{"type":2543,"tag":2826,"props":5913,"children":5914},{"style":2905},[5915],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":5917,"children":5918},{"style":2971},[5919],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":5921,"children":5922},{"class":2828,"line":3116},[5923],{"type":2543,"tag":2826,"props":5924,"children":5925},{"style":2905},[5926],{"type":2548,"value":4005},{"type":2543,"tag":2550,"props":5928,"children":5929},{},[5930,5932,5937],{"type":2548,"value":5931},"You can configure the scrypt options in your ",{"type":2543,"tag":2688,"props":5933,"children":5935},{"className":5934},[],[5936],{"type":2548,"value":244},{"type":2548,"value":3566},{"type":2543,"tag":2816,"props":5939,"children":5941},{"className":3505,"code":5940,"language":3507,"meta":2416,"style":2416},"export default defineNuxtConfig({\n  modules: ['nuxt-auth-utils'],\n  auth: {\n    hash: {\n      scrypt: {\n        \u002F\u002F See https:\u002F\u002Fgithub.com\u002Fadonisjs\u002Fhash\u002Fblob\u002F94637029cd526783ac0a763ec581306d98db2036\u002Fsrc\u002Ftypes.ts#L144\n      }\n    }\n  }\n})\n",[5942],{"type":2543,"tag":2688,"props":5943,"children":5944},{"__ignoreMap":2416},[5945,5968,6006,6022,6038,6054,6062,6069,6076,6083],{"type":2543,"tag":2826,"props":5946,"children":5947},{"class":2828,"line":2502},[5948,5952,5956,5960,5964],{"type":2543,"tag":2826,"props":5949,"children":5950},{"style":4089},[5951],{"type":2548,"value":4623},{"type":2543,"tag":2826,"props":5953,"children":5954},{"style":4089},[5955],{"type":2548,"value":4738},{"type":2543,"tag":2826,"props":5957,"children":5958},{"style":3062},[5959],{"type":2548,"value":4743},{"type":2543,"tag":2826,"props":5961,"children":5962},{"style":2900},[5963],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":5965,"children":5966},{"style":2905},[5967],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":5969,"children":5970},{"class":2828,"line":2468},[5971,5976,5980,5985,5989,5993,5997,6002],{"type":2543,"tag":2826,"props":5972,"children":5973},{"style":2971},[5974],{"type":2548,"value":5975},"  modules",{"type":2543,"tag":2826,"props":5977,"children":5978},{"style":2905},[5979],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":5981,"children":5982},{"style":2900},[5983],{"type":2548,"value":5984}," [",{"type":2543,"tag":2826,"props":5986,"children":5987},{"style":2905},[5988],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":5990,"children":5991},{"style":2838},[5992],{"type":2548,"value":2415},{"type":2543,"tag":2826,"props":5994,"children":5995},{"style":2905},[5996],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":5998,"children":5999},{"style":2900},[6000],{"type":2548,"value":6001},"]",{"type":2543,"tag":2826,"props":6003,"children":6004},{"style":2905},[6005],{"type":2548,"value":4839},{"type":2543,"tag":2826,"props":6007,"children":6008},{"class":2828,"line":2452},[6009,6014,6018],{"type":2543,"tag":2826,"props":6010,"children":6011},{"style":2971},[6012],{"type":2548,"value":6013},"  auth",{"type":2543,"tag":2826,"props":6015,"children":6016},{"style":2905},[6017],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":6019,"children":6020},{"style":2905},[6021],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":6023,"children":6024},{"class":2828,"line":3089},[6025,6030,6034],{"type":2543,"tag":2826,"props":6026,"children":6027},{"style":2971},[6028],{"type":2548,"value":6029},"    hash",{"type":2543,"tag":2826,"props":6031,"children":6032},{"style":2905},[6033],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":6035,"children":6036},{"style":2905},[6037],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":6039,"children":6040},{"class":2828,"line":3099},[6041,6046,6050],{"type":2543,"tag":2826,"props":6042,"children":6043},{"style":2971},[6044],{"type":2548,"value":6045},"      scrypt",{"type":2543,"tag":2826,"props":6047,"children":6048},{"style":2905},[6049],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":6051,"children":6052},{"style":2905},[6053],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":6055,"children":6056},{"class":2828,"line":3116},[6057],{"type":2543,"tag":2826,"props":6058,"children":6059},{"style":2891},[6060],{"type":2548,"value":6061},"        \u002F\u002F See https:\u002F\u002Fgithub.com\u002Fadonisjs\u002Fhash\u002Fblob\u002F94637029cd526783ac0a763ec581306d98db2036\u002Fsrc\u002Ftypes.ts#L144\n",{"type":2543,"tag":2826,"props":6063,"children":6064},{"class":2828,"line":2448},[6065],{"type":2543,"tag":2826,"props":6066,"children":6067},{"style":2905},[6068],{"type":2548,"value":4871},{"type":2543,"tag":2826,"props":6070,"children":6071},{"class":2828,"line":2444},[6072],{"type":2543,"tag":2826,"props":6073,"children":6074},{"style":2905},[6075],{"type":2548,"value":4879},{"type":2543,"tag":2826,"props":6077,"children":6078},{"class":2828,"line":2440},[6079],{"type":2543,"tag":2826,"props":6080,"children":6081},{"style":2905},[6082],{"type":2548,"value":4527},{"type":2543,"tag":2826,"props":6084,"children":6085},{"class":2828,"line":3278},[6086,6090],{"type":2543,"tag":2826,"props":6087,"children":6088},{"style":2905},[6089],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":6091,"children":6092},{"style":2900},[6093],{"type":2548,"value":4269},{"type":2543,"tag":2946,"props":6095,"children":6097},{"id":6096},"at-protocol",[6098],{"type":2548,"value":6099},"AT Protocol",{"type":2543,"tag":2550,"props":6101,"children":6102},{},[6103],{"type":2548,"value":6104},"Social networks that rely on AT Protocol (e.g., Bluesky) slightly differ from a regular OAuth flow.",{"type":2543,"tag":2550,"props":6106,"children":6107},{},[6108],{"type":2548,"value":6109},"To enable OAuth with AT Protocol, you need to:",{"type":2543,"tag":2800,"props":6111,"children":6112},{},[6113],{"type":2543,"tag":2604,"props":6114,"children":6115},{},[6116],{"type":2548,"value":6117},"Install the peer dependencies:",{"type":2543,"tag":2816,"props":6119,"children":6121},{"className":2818,"code":6120,"language":2820,"meta":2416,"style":2416},"npx nypm i @atproto\u002Foauth-client-node @atproto\u002Fapi\n",[6122],{"type":2543,"tag":2688,"props":6123,"children":6124},{"__ignoreMap":2416},[6125],{"type":2543,"tag":2826,"props":6126,"children":6127},{"class":2828,"line":2502},[6128,6132,6137,6142,6147],{"type":2543,"tag":2826,"props":6129,"children":6130},{"style":2832},[6131],{"type":2548,"value":2835},{"type":2543,"tag":2826,"props":6133,"children":6134},{"style":2838},[6135],{"type":2548,"value":6136}," nypm",{"type":2543,"tag":2826,"props":6138,"children":6139},{"style":2838},[6140],{"type":2548,"value":6141}," i",{"type":2543,"tag":2826,"props":6143,"children":6144},{"style":2838},[6145],{"type":2548,"value":6146}," @atproto\u002Foauth-client-node",{"type":2543,"tag":2826,"props":6148,"children":6149},{"style":2838},[6150],{"type":2548,"value":6151}," @atproto\u002Fapi\n",{"type":2543,"tag":2800,"props":6153,"children":6154},{"start":2468},[6155],{"type":2543,"tag":2604,"props":6156,"children":6157},{},[6158,6160],{"type":2548,"value":6159},"Enable it in your ",{"type":2543,"tag":2688,"props":6161,"children":6163},{"className":6162},[],[6164],{"type":2548,"value":244},{"type":2543,"tag":2816,"props":6166,"children":6168},{"className":3505,"code":6167,"language":3507,"meta":2416,"style":2416},"export default defineNuxtConfig({\n  auth: {\n    atproto: true\n  }\n})\n",[6169],{"type":2543,"tag":2688,"props":6170,"children":6171},{"__ignoreMap":2416},[6172,6195,6210,6226,6233],{"type":2543,"tag":2826,"props":6173,"children":6174},{"class":2828,"line":2502},[6175,6179,6183,6187,6191],{"type":2543,"tag":2826,"props":6176,"children":6177},{"style":4089},[6178],{"type":2548,"value":4623},{"type":2543,"tag":2826,"props":6180,"children":6181},{"style":4089},[6182],{"type":2548,"value":4738},{"type":2543,"tag":2826,"props":6184,"children":6185},{"style":3062},[6186],{"type":2548,"value":4743},{"type":2543,"tag":2826,"props":6188,"children":6189},{"style":2900},[6190],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":6192,"children":6193},{"style":2905},[6194],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":6196,"children":6197},{"class":2828,"line":2468},[6198,6202,6206],{"type":2543,"tag":2826,"props":6199,"children":6200},{"style":2971},[6201],{"type":2548,"value":6013},{"type":2543,"tag":2826,"props":6203,"children":6204},{"style":2905},[6205],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":6207,"children":6208},{"style":2905},[6209],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":6211,"children":6212},{"class":2828,"line":2452},[6213,6218,6222],{"type":2543,"tag":2826,"props":6214,"children":6215},{"style":2971},[6216],{"type":2548,"value":6217},"    atproto",{"type":2543,"tag":2826,"props":6219,"children":6220},{"style":2905},[6221],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":6223,"children":6224},{"style":5273},[6225],{"type":2548,"value":5276},{"type":2543,"tag":2826,"props":6227,"children":6228},{"class":2828,"line":3089},[6229],{"type":2543,"tag":2826,"props":6230,"children":6231},{"style":2905},[6232],{"type":2548,"value":4527},{"type":2543,"tag":2826,"props":6234,"children":6235},{"class":2828,"line":3099},[6236,6240],{"type":2543,"tag":2826,"props":6237,"children":6238},{"style":2905},[6239],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":6241,"children":6242},{"style":2900},[6243],{"type":2548,"value":4269},{"type":2543,"tag":2946,"props":6245,"children":6247},{"id":6246},"webauthn-passkey",[6248],{"type":2548,"value":2679},{"type":2543,"tag":2550,"props":6250,"children":6251},{},[6252],{"type":2548,"value":6253},"WebAuthn (Web Authentication) is a web standard that enhances security by replacing passwords with passkeys using public key cryptography. Users can authenticate with biometric data (like fingerprints or facial recognition) or physical devices (like USB keys), reducing the risk of phishing and password breaches. This approach offers a more secure and user-friendly authentication method, supported by major browsers and platforms.",{"type":2543,"tag":2550,"props":6255,"children":6256},{},[6257],{"type":2548,"value":6258},"To enable WebAuthn you need to:",{"type":2543,"tag":2800,"props":6260,"children":6261},{},[6262],{"type":2543,"tag":2604,"props":6263,"children":6264},{},[6265],{"type":2548,"value":6117},{"type":2543,"tag":2816,"props":6267,"children":6269},{"className":2818,"code":6268,"language":2820,"meta":2416,"style":2416},"npx nypm i @simplewebauthn\u002Fserver@11 @simplewebauthn\u002Fbrowser@11\n",[6270],{"type":2543,"tag":2688,"props":6271,"children":6272},{"__ignoreMap":2416},[6273],{"type":2543,"tag":2826,"props":6274,"children":6275},{"class":2828,"line":2502},[6276,6280,6284,6288,6293],{"type":2543,"tag":2826,"props":6277,"children":6278},{"style":2832},[6279],{"type":2548,"value":2835},{"type":2543,"tag":2826,"props":6281,"children":6282},{"style":2838},[6283],{"type":2548,"value":6136},{"type":2543,"tag":2826,"props":6285,"children":6286},{"style":2838},[6287],{"type":2548,"value":6141},{"type":2543,"tag":2826,"props":6289,"children":6290},{"style":2838},[6291],{"type":2548,"value":6292}," @simplewebauthn\u002Fserver@11",{"type":2543,"tag":2826,"props":6294,"children":6295},{"style":2838},[6296],{"type":2548,"value":6297}," @simplewebauthn\u002Fbrowser@11\n",{"type":2543,"tag":2800,"props":6299,"children":6300},{"start":2468},[6301],{"type":2543,"tag":2604,"props":6302,"children":6303},{},[6304,6305],{"type":2548,"value":6159},{"type":2543,"tag":2688,"props":6306,"children":6308},{"className":6307},[],[6309],{"type":2548,"value":244},{"type":2543,"tag":2816,"props":6311,"children":6313},{"className":3505,"code":6312,"language":3507,"meta":2416,"style":2416},"export default defineNuxtConfig({\n  auth: {\n    webAuthn: true\n  }\n})\n",[6314],{"type":2543,"tag":2688,"props":6315,"children":6316},{"__ignoreMap":2416},[6317,6340,6355,6371,6378],{"type":2543,"tag":2826,"props":6318,"children":6319},{"class":2828,"line":2502},[6320,6324,6328,6332,6336],{"type":2543,"tag":2826,"props":6321,"children":6322},{"style":4089},[6323],{"type":2548,"value":4623},{"type":2543,"tag":2826,"props":6325,"children":6326},{"style":4089},[6327],{"type":2548,"value":4738},{"type":2543,"tag":2826,"props":6329,"children":6330},{"style":3062},[6331],{"type":2548,"value":4743},{"type":2543,"tag":2826,"props":6333,"children":6334},{"style":2900},[6335],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":6337,"children":6338},{"style":2905},[6339],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":6341,"children":6342},{"class":2828,"line":2468},[6343,6347,6351],{"type":2543,"tag":2826,"props":6344,"children":6345},{"style":2971},[6346],{"type":2548,"value":6013},{"type":2543,"tag":2826,"props":6348,"children":6349},{"style":2905},[6350],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":6352,"children":6353},{"style":2905},[6354],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":6356,"children":6357},{"class":2828,"line":2452},[6358,6363,6367],{"type":2543,"tag":2826,"props":6359,"children":6360},{"style":2971},[6361],{"type":2548,"value":6362},"    webAuthn",{"type":2543,"tag":2826,"props":6364,"children":6365},{"style":2905},[6366],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":6368,"children":6369},{"style":5273},[6370],{"type":2548,"value":5276},{"type":2543,"tag":2826,"props":6372,"children":6373},{"class":2828,"line":3089},[6374],{"type":2543,"tag":2826,"props":6375,"children":6376},{"style":2905},[6377],{"type":2548,"value":4527},{"type":2543,"tag":2826,"props":6379,"children":6380},{"class":2828,"line":3099},[6381,6385],{"type":2543,"tag":2826,"props":6382,"children":6383},{"style":2905},[6384],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":6386,"children":6387},{"style":2900},[6388],{"type":2548,"value":4269},{"type":2543,"tag":4933,"props":6390,"children":6392},{"id":6391},"example-1",[6393],{"type":2548,"value":5200},{"type":2543,"tag":2550,"props":6395,"children":6396},{},[6397],{"type":2548,"value":6398},"In this example we will implement the very basic steps to register and authenticate a credential.",{"type":2543,"tag":2550,"props":6400,"children":6401},{},[6402,6404,6411],{"type":2548,"value":6403},"The full code can be found in the ",{"type":2543,"tag":2554,"props":6405,"children":6408},{"href":6406,"rel":6407},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils\u002Fblob\u002Fmain\u002Fplayground\u002Fserver\u002Fapi\u002Fwebauthn",[2558],[6409],{"type":2548,"value":6410},"playground",{"type":2548,"value":6412},". The example uses a SQLite database with the following minimal tables:",{"type":2543,"tag":2816,"props":6414,"children":6418},{"className":6415,"code":6416,"language":6417,"meta":2416,"style":2416},"language-sql shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","CREATE TABLE users (\n  id INTEGER PRIMARY KEY AUTOINCREMENT,\n  email TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS credentials (\n  userId INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE,\n  id TEXT UNIQUE NOT NULL,\n  publicKey TEXT NOT NULL,\n  counter INTEGER NOT NULL,\n  backedUp INTEGER NOT NULL,\n  transports TEXT NOT NULL,\n  PRIMARY KEY (\"userId\", \"id\")\n);\n","sql",[6419],{"type":2543,"tag":2688,"props":6420,"children":6421},{"__ignoreMap":2416},[6422,6446,6469,6487,6495,6502,6533,6574,6598,6618,6639,6659,6679,6726],{"type":2543,"tag":2826,"props":6423,"children":6424},{"class":2828,"line":2502},[6425,6431,6436,6441],{"type":2543,"tag":2826,"props":6426,"children":6428},{"style":6427},"--shiki-light:#F76D47;--shiki-default:#F76D47;--shiki-dark:#F78C6C",[6429],{"type":2548,"value":6430},"CREATE",{"type":2543,"tag":2826,"props":6432,"children":6433},{"style":6427},[6434],{"type":2548,"value":6435}," TABLE",{"type":2543,"tag":2826,"props":6437,"children":6438},{"style":3062},[6439],{"type":2548,"value":6440}," users",{"type":2543,"tag":2826,"props":6442,"children":6443},{"style":2900},[6444],{"type":2548,"value":6445}," (\n",{"type":2543,"tag":2826,"props":6447,"children":6448},{"class":2828,"line":2468},[6449,6454,6459,6464],{"type":2543,"tag":2826,"props":6450,"children":6451},{"style":2900},[6452],{"type":2548,"value":6453},"  id ",{"type":2543,"tag":2826,"props":6455,"children":6456},{"style":2977},[6457],{"type":2548,"value":6458},"INTEGER",{"type":2543,"tag":2826,"props":6460,"children":6461},{"style":2977},[6462],{"type":2548,"value":6463}," PRIMARY KEY",{"type":2543,"tag":2826,"props":6465,"children":6466},{"style":2900},[6467],{"type":2548,"value":6468}," AUTOINCREMENT,\n",{"type":2543,"tag":2826,"props":6470,"children":6471},{"class":2828,"line":2452},[6472,6477,6482],{"type":2543,"tag":2826,"props":6473,"children":6474},{"style":2900},[6475],{"type":2548,"value":6476},"  email ",{"type":2543,"tag":2826,"props":6478,"children":6479},{"style":2977},[6480],{"type":2548,"value":6481},"TEXT",{"type":2543,"tag":2826,"props":6483,"children":6484},{"style":6427},[6485],{"type":2548,"value":6486}," NOT NULL\n",{"type":2543,"tag":2826,"props":6488,"children":6489},{"class":2828,"line":3089},[6490],{"type":2543,"tag":2826,"props":6491,"children":6492},{"style":2900},[6493],{"type":2548,"value":6494},");\n",{"type":2543,"tag":2826,"props":6496,"children":6497},{"class":2828,"line":3099},[6498],{"type":2543,"tag":2826,"props":6499,"children":6500},{"emptyLinePlaceholder":3093},[6501],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":6503,"children":6504},{"class":2828,"line":3116},[6505,6509,6513,6518,6523,6528],{"type":2543,"tag":2826,"props":6506,"children":6507},{"style":6427},[6508],{"type":2548,"value":6430},{"type":2543,"tag":2826,"props":6510,"children":6511},{"style":6427},[6512],{"type":2548,"value":6435},{"type":2543,"tag":2826,"props":6514,"children":6515},{"style":3062},[6516],{"type":2548,"value":6517}," IF",{"type":2543,"tag":2826,"props":6519,"children":6520},{"style":6427},[6521],{"type":2548,"value":6522}," NOT",{"type":2543,"tag":2826,"props":6524,"children":6525},{"style":6427},[6526],{"type":2548,"value":6527}," EXISTS",{"type":2543,"tag":2826,"props":6529,"children":6530},{"style":2900},[6531],{"type":2548,"value":6532}," credentials (\n",{"type":2543,"tag":2826,"props":6534,"children":6535},{"class":2828,"line":2448},[6536,6541,6545,6550,6555,6560,6565,6570],{"type":2543,"tag":2826,"props":6537,"children":6538},{"style":2900},[6539],{"type":2548,"value":6540},"  userId ",{"type":2543,"tag":2826,"props":6542,"children":6543},{"style":2977},[6544],{"type":2548,"value":6458},{"type":2543,"tag":2826,"props":6546,"children":6547},{"style":6427},[6548],{"type":2548,"value":6549}," NOT NULL",{"type":2543,"tag":2826,"props":6551,"children":6552},{"style":2977},[6553],{"type":2548,"value":6554}," REFERENCES",{"type":2543,"tag":2826,"props":6556,"children":6557},{"style":2900},[6558],{"type":2548,"value":6559}," users(id) ",{"type":2543,"tag":2826,"props":6561,"children":6562},{"style":2977},[6563],{"type":2548,"value":6564},"ON DELETE CASCADE",{"type":2543,"tag":2826,"props":6566,"children":6567},{"style":2977},[6568],{"type":2548,"value":6569}," ON UPDATE CASCADE",{"type":2543,"tag":2826,"props":6571,"children":6572},{"style":2900},[6573],{"type":2548,"value":4839},{"type":2543,"tag":2826,"props":6575,"children":6576},{"class":2828,"line":2444},[6577,6581,6585,6590,6594],{"type":2543,"tag":2826,"props":6578,"children":6579},{"style":2900},[6580],{"type":2548,"value":6453},{"type":2543,"tag":2826,"props":6582,"children":6583},{"style":2977},[6584],{"type":2548,"value":6481},{"type":2543,"tag":2826,"props":6586,"children":6587},{"style":6427},[6588],{"type":2548,"value":6589}," UNIQUE",{"type":2543,"tag":2826,"props":6591,"children":6592},{"style":6427},[6593],{"type":2548,"value":6549},{"type":2543,"tag":2826,"props":6595,"children":6596},{"style":2900},[6597],{"type":2548,"value":4839},{"type":2543,"tag":2826,"props":6599,"children":6600},{"class":2828,"line":2440},[6601,6606,6610,6614],{"type":2543,"tag":2826,"props":6602,"children":6603},{"style":2900},[6604],{"type":2548,"value":6605},"  publicKey ",{"type":2543,"tag":2826,"props":6607,"children":6608},{"style":2977},[6609],{"type":2548,"value":6481},{"type":2543,"tag":2826,"props":6611,"children":6612},{"style":6427},[6613],{"type":2548,"value":6549},{"type":2543,"tag":2826,"props":6615,"children":6616},{"style":2900},[6617],{"type":2548,"value":4839},{"type":2543,"tag":2826,"props":6619,"children":6620},{"class":2828,"line":3278},[6621,6626,6631,6635],{"type":2543,"tag":2826,"props":6622,"children":6623},{"style":6427},[6624],{"type":2548,"value":6625},"  counter",{"type":2543,"tag":2826,"props":6627,"children":6628},{"style":2977},[6629],{"type":2548,"value":6630}," INTEGER",{"type":2543,"tag":2826,"props":6632,"children":6633},{"style":6427},[6634],{"type":2548,"value":6549},{"type":2543,"tag":2826,"props":6636,"children":6637},{"style":2900},[6638],{"type":2548,"value":4839},{"type":2543,"tag":2826,"props":6640,"children":6641},{"class":2828,"line":2531},[6642,6647,6651,6655],{"type":2543,"tag":2826,"props":6643,"children":6644},{"style":2900},[6645],{"type":2548,"value":6646},"  backedUp ",{"type":2543,"tag":2826,"props":6648,"children":6649},{"style":2977},[6650],{"type":2548,"value":6458},{"type":2543,"tag":2826,"props":6652,"children":6653},{"style":6427},[6654],{"type":2548,"value":6549},{"type":2543,"tag":2826,"props":6656,"children":6657},{"style":2900},[6658],{"type":2548,"value":4839},{"type":2543,"tag":2826,"props":6660,"children":6661},{"class":2828,"line":3315},[6662,6667,6671,6675],{"type":2543,"tag":2826,"props":6663,"children":6664},{"style":2900},[6665],{"type":2548,"value":6666},"  transports ",{"type":2543,"tag":2826,"props":6668,"children":6669},{"style":2977},[6670],{"type":2548,"value":6481},{"type":2543,"tag":2826,"props":6672,"children":6673},{"style":6427},[6674],{"type":2548,"value":6549},{"type":2543,"tag":2826,"props":6676,"children":6677},{"style":2900},[6678],{"type":2548,"value":4839},{"type":2543,"tag":2826,"props":6680,"children":6681},{"class":2828,"line":3348},[6682,6687,6691,6695,6700,6704,6709,6713,6718,6722],{"type":2543,"tag":2826,"props":6683,"children":6684},{"style":2977},[6685],{"type":2548,"value":6686},"  PRIMARY KEY",{"type":2543,"tag":2826,"props":6688,"children":6689},{"style":2900},[6690],{"type":2548,"value":3918},{"type":2543,"tag":2826,"props":6692,"children":6693},{"style":2905},[6694],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":6696,"children":6697},{"style":2838},[6698],{"type":2548,"value":6699},"userId",{"type":2543,"tag":2826,"props":6701,"children":6702},{"style":2905},[6703],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":6705,"children":6706},{"style":2900},[6707],{"type":2548,"value":6708},", ",{"type":2543,"tag":2826,"props":6710,"children":6711},{"style":2905},[6712],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":6714,"children":6715},{"style":2838},[6716],{"type":2548,"value":6717},"id",{"type":2543,"tag":2826,"props":6719,"children":6720},{"style":2905},[6721],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":6723,"children":6724},{"style":2900},[6725],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":6727,"children":6728},{"class":2828,"line":3403},[6729],{"type":2543,"tag":2826,"props":6730,"children":6731},{"style":2900},[6732],{"type":2548,"value":6494},{"type":2543,"tag":2600,"props":6734,"children":6735},{},[6736,6749],{"type":2543,"tag":2604,"props":6737,"children":6738},{},[6739,6741,6747],{"type":2548,"value":6740},"For the ",{"type":2543,"tag":2688,"props":6742,"children":6744},{"className":6743},[],[6745],{"type":2548,"value":6746},"users",{"type":2548,"value":6748}," table it is important to have a unique identifier such as a username or email (here we use email). When creating a new credential, this identifier is required and stored with the passkey on the user's device, password manager, or authenticator.",{"type":2543,"tag":2604,"props":6750,"children":6751},{},[6752,6753,6759,6761],{"type":2548,"value":4697},{"type":2543,"tag":2688,"props":6754,"children":6756},{"className":6755},[],[6757],{"type":2548,"value":6758},"credentials",{"type":2548,"value":6760}," table stores:\n",{"type":2543,"tag":2600,"props":6762,"children":6763},{},[6764,6782,6794,6804,6833,6854],{"type":2543,"tag":2604,"props":6765,"children":6766},{},[6767,6768,6773,6775,6780],{"type":2548,"value":4697},{"type":2543,"tag":2688,"props":6769,"children":6771},{"className":6770},[],[6772],{"type":2548,"value":6699},{"type":2548,"value":6774}," from the ",{"type":2543,"tag":2688,"props":6776,"children":6778},{"className":6777},[],[6779],{"type":2548,"value":6746},{"type":2548,"value":6781}," table.",{"type":2543,"tag":2604,"props":6783,"children":6784},{},[6785,6787,6792],{"type":2548,"value":6786},"The credential ",{"type":2543,"tag":2688,"props":6788,"children":6790},{"className":6789},[],[6791],{"type":2548,"value":6717},{"type":2548,"value":6793}," (as unique index)",{"type":2543,"tag":2604,"props":6795,"children":6796},{},[6797,6798],{"type":2548,"value":6786},{"type":2543,"tag":2688,"props":6799,"children":6801},{"className":6800},[],[6802],{"type":2548,"value":6803},"publicKey",{"type":2543,"tag":2604,"props":6805,"children":6806},{},[6807,6809,6815,6817,6822,6824,6831],{"type":2548,"value":6808},"A ",{"type":2543,"tag":2688,"props":6810,"children":6812},{"className":6811},[],[6813],{"type":2548,"value":6814},"counter",{"type":2548,"value":6816},". Each time a credential is used, the counter is incremented. We can use this value to perform extra security checks. More about ",{"type":2543,"tag":2688,"props":6818,"children":6820},{"className":6819},[],[6821],{"type":2548,"value":6814},{"type":2548,"value":6823}," can be read ",{"type":2543,"tag":2554,"props":6825,"children":6828},{"href":6826,"rel":6827},"https:\u002F\u002Fsimplewebauthn.dev\u002Fdocs\u002Fpackages\u002Fserver#3-post-registration-responsibilities",[2558],[6829],{"type":2548,"value":6830},"here",{"type":2548,"value":6832},". For this example, we won't be using the counter. But you should update the counter in your database with the new value.",{"type":2543,"tag":2604,"props":6834,"children":6835},{},[6836,6837,6843,6845,6852],{"type":2548,"value":6808},{"type":2543,"tag":2688,"props":6838,"children":6840},{"className":6839},[],[6841],{"type":2548,"value":6842},"backedUp",{"type":2548,"value":6844}," flag. Normally, credentials are stored on the generating device. When you use a password manager or authenticator, the credential is \"backed up\" because it can be used on multiple devices. See ",{"type":2543,"tag":2554,"props":6846,"children":6849},{"href":6847,"rel":6848},"https:\u002F\u002Farc.net\u002Fl\u002Fquote\u002Fugaemxot",[2558],[6850],{"type":2548,"value":6851},"this section",{"type":2548,"value":6853}," for more details.",{"type":2543,"tag":2604,"props":6855,"children":6856},{},[6857,6858,6864,6866,6872],{"type":2548,"value":6786},{"type":2543,"tag":2688,"props":6859,"children":6861},{"className":6860},[],[6862],{"type":2548,"value":6863},"transports",{"type":2548,"value":6865},". It is an array of strings that indicate how the credential communicates with the client. It is used to show the correct UI for the user to utilize the credential. Again, see ",{"type":2543,"tag":2554,"props":6867,"children":6870},{"href":6868,"rel":6869},"https:\u002F\u002Farc.net\u002Fl\u002Fquote\u002Fycxtiorp",[2558],[6871],{"type":2548,"value":6851},{"type":2548,"value":6853},{"type":2543,"tag":2550,"props":6874,"children":6875},{},[6876,6878,6885,6886,6893,6895,6902],{"type":2548,"value":6877},"The following code does not include the actual database queries, but shows the general steps to follow. The full example can be found in the playground: ",{"type":2543,"tag":2554,"props":6879,"children":6882},{"href":6880,"rel":6881},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils\u002Fblob\u002Fmain\u002Fplayground\u002Fserver\u002Fapi\u002Fwebauthn\u002Fregister.post.ts",[2558],[6883],{"type":2548,"value":6884},"registration",{"type":2548,"value":6708},{"type":2543,"tag":2554,"props":6887,"children":6890},{"href":6888,"rel":6889},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils\u002Fblob\u002Fmain\u002Fplayground\u002Fserver\u002Fapi\u002Fwebauthn\u002Fauthenticate.post.ts",[2558],[6891],{"type":2548,"value":6892},"authentication",{"type":2548,"value":6894}," and the ",{"type":2543,"tag":2554,"props":6896,"children":6899},{"href":6897,"rel":6898},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils\u002Fblob\u002Fmain\u002Fplayground\u002Fserver\u002Fplugins\u002Fdatabase.ts",[2558],[6900],{"type":2548,"value":6901},"database setup",{"type":2548,"value":2781},{"type":2543,"tag":2816,"props":6904,"children":6906},{"className":3505,"code":6905,"language":3507,"meta":2416,"style":2416},"\u002F\u002F server\u002Fapi\u002Fwebauthn\u002Fregister.post.ts\nimport { z } from 'zod'\nexport default defineWebAuthnRegisterEventHandler({\n  \u002F\u002F optional\n  async validateUser(userBody, event) {\n    \u002F\u002F bonus: check if the user is already authenticated to link a credential to his account\n    \u002F\u002F We first check if the user is already authenticated by getting the session\n    \u002F\u002F And verify that the email is the same as the one in session\n    const session = await getUserSession(event)\n    if (session.user?.email && session.user.email !== userBody.userName) {\n      throw createError({ statusCode: 400, message: 'Email not matching current session' })\n    }\n\n    \u002F\u002F If he registers a new account with credentials\n    return z.object({\n      \u002F\u002F we want the userName to be a valid email\n      userName: z.string().email()\n    }).parse(userBody)\n  },\n  async onSuccess(event, { credential, user }) {\n    \u002F\u002F The credential creation has been successful\n    \u002F\u002F We need to create a user if it does not exist\n    const db = useDatabase()\n\n    \u002F\u002F Get the user from the database\n    let dbUser = await db.sql`...`\n    if (!dbUser) {\n      \u002F\u002F Store new user in database & its credentials\n      dbUser = await db.sql`...`\n    }\n\n    \u002F\u002F we now need to store the credential in our database and link it to the user\n    await db.sql`...`\n\n    \u002F\u002F Set the user session\n    await setUserSession(event, {\n      user: {\n        id: dbUser.id\n      },\n      loggedInAt: Date.now(),\n    })\n  },\n})\n",[6907],{"type":2543,"tag":2688,"props":6908,"children":6909},{"__ignoreMap":2416},[6910,6918,6958,6982,6990,7028,7036,7044,7052,7088,7177,7247,7254,7261,7269,7297,7305,7347,7379,7386,7434,7442,7450,7475,7482,7490,7537,7566,7574,7614,7621,7629,7638,7670,7678,7687,7715,7731,7756,7765,7799,7811,7819],{"type":2543,"tag":2826,"props":6911,"children":6912},{"class":2828,"line":2502},[6913],{"type":2543,"tag":2826,"props":6914,"children":6915},{"style":2891},[6916],{"type":2548,"value":6917},"\u002F\u002F server\u002Fapi\u002Fwebauthn\u002Fregister.post.ts\n",{"type":2543,"tag":2826,"props":6919,"children":6920},{"class":2828,"line":2468},[6921,6926,6930,6935,6940,6945,6949,6954],{"type":2543,"tag":2826,"props":6922,"children":6923},{"style":4089},[6924],{"type":2548,"value":6925},"import",{"type":2543,"tag":2826,"props":6927,"children":6928},{"style":2905},[6929],{"type":2548,"value":2998},{"type":2543,"tag":2826,"props":6931,"children":6932},{"style":2900},[6933],{"type":2548,"value":6934}," z",{"type":2543,"tag":2826,"props":6936,"children":6937},{"style":2905},[6938],{"type":2548,"value":6939}," }",{"type":2543,"tag":2826,"props":6941,"children":6942},{"style":4089},[6943],{"type":2548,"value":6944}," from",{"type":2543,"tag":2826,"props":6946,"children":6947},{"style":2905},[6948],{"type":2548,"value":4150},{"type":2543,"tag":2826,"props":6950,"children":6951},{"style":2838},[6952],{"type":2548,"value":6953},"zod",{"type":2543,"tag":2826,"props":6955,"children":6956},{"style":2905},[6957],{"type":2548,"value":4159},{"type":2543,"tag":2826,"props":6959,"children":6960},{"class":2828,"line":2452},[6961,6965,6969,6974,6978],{"type":2543,"tag":2826,"props":6962,"children":6963},{"style":4089},[6964],{"type":2548,"value":4623},{"type":2543,"tag":2826,"props":6966,"children":6967},{"style":4089},[6968],{"type":2548,"value":4738},{"type":2543,"tag":2826,"props":6970,"children":6971},{"style":3062},[6972],{"type":2548,"value":6973}," defineWebAuthnRegisterEventHandler",{"type":2543,"tag":2826,"props":6975,"children":6976},{"style":2900},[6977],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":6979,"children":6980},{"style":2905},[6981],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":6983,"children":6984},{"class":2828,"line":3089},[6985],{"type":2543,"tag":2826,"props":6986,"children":6987},{"style":2891},[6988],{"type":2548,"value":6989},"  \u002F\u002F optional\n",{"type":2543,"tag":2826,"props":6991,"children":6992},{"class":2828,"line":3099},[6993,6997,7002,7006,7011,7015,7020,7024],{"type":2543,"tag":2826,"props":6994,"children":6995},{"style":2977},[6996],{"type":2548,"value":5291},{"type":2543,"tag":2826,"props":6998,"children":6999},{"style":2971},[7000],{"type":2548,"value":7001}," validateUser",{"type":2543,"tag":2826,"props":7003,"children":7004},{"style":2905},[7005],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":7007,"children":7008},{"style":3921},[7009],{"type":2548,"value":7010},"userBody",{"type":2543,"tag":2826,"props":7012,"children":7013},{"style":2905},[7014],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":7016,"children":7017},{"style":3921},[7018],{"type":2548,"value":7019}," event",{"type":2543,"tag":2826,"props":7021,"children":7022},{"style":2905},[7023],{"type":2548,"value":5509},{"type":2543,"tag":2826,"props":7025,"children":7026},{"style":2905},[7027],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":7029,"children":7030},{"class":2828,"line":3116},[7031],{"type":2543,"tag":2826,"props":7032,"children":7033},{"style":2891},[7034],{"type":2548,"value":7035},"    \u002F\u002F bonus: check if the user is already authenticated to link a credential to his account\n",{"type":2543,"tag":2826,"props":7037,"children":7038},{"class":2828,"line":2448},[7039],{"type":2543,"tag":2826,"props":7040,"children":7041},{"style":2891},[7042],{"type":2548,"value":7043},"    \u002F\u002F We first check if the user is already authenticated by getting the session\n",{"type":2543,"tag":2826,"props":7045,"children":7046},{"class":2828,"line":2444},[7047],{"type":2543,"tag":2826,"props":7048,"children":7049},{"style":2891},[7050],{"type":2548,"value":7051},"    \u002F\u002F And verify that the email is the same as the one in session\n",{"type":2543,"tag":2826,"props":7053,"children":7054},{"class":2828,"line":2440},[7055,7060,7064,7068,7072,7076,7080,7084],{"type":2543,"tag":2826,"props":7056,"children":7057},{"style":2977},[7058],{"type":2548,"value":7059},"    const",{"type":2543,"tag":2826,"props":7061,"children":7062},{"style":2900},[7063],{"type":2548,"value":3022},{"type":2543,"tag":2826,"props":7065,"children":7066},{"style":2905},[7067],{"type":2548,"value":3059},{"type":2543,"tag":2826,"props":7069,"children":7070},{"style":4089},[7071],{"type":2548,"value":4345},{"type":2543,"tag":2826,"props":7073,"children":7074},{"style":3062},[7075],{"type":2548,"value":4350},{"type":2543,"tag":2826,"props":7077,"children":7078},{"style":2971},[7079],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":7081,"children":7082},{"style":2900},[7083],{"type":2548,"value":5305},{"type":2543,"tag":2826,"props":7085,"children":7086},{"style":2971},[7087],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":7089,"children":7090},{"class":2828,"line":3278},[7091,7096,7100,7105,7109,7114,7119,7124,7129,7133,7137,7141,7145,7149,7154,7159,7163,7168,7173],{"type":2543,"tag":2826,"props":7092,"children":7093},{"style":4089},[7094],{"type":2548,"value":7095},"    if",{"type":2543,"tag":2826,"props":7097,"children":7098},{"style":2971},[7099],{"type":2548,"value":3918},{"type":2543,"tag":2826,"props":7101,"children":7102},{"style":2900},[7103],{"type":2548,"value":7104},"session",{"type":2543,"tag":2826,"props":7106,"children":7107},{"style":2905},[7108],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":7110,"children":7111},{"style":2900},[7112],{"type":2548,"value":7113},"user",{"type":2543,"tag":2826,"props":7115,"children":7116},{"style":2905},[7117],{"type":2548,"value":7118},"?.",{"type":2543,"tag":2826,"props":7120,"children":7121},{"style":2900},[7122],{"type":2548,"value":7123},"email",{"type":2543,"tag":2826,"props":7125,"children":7126},{"style":2905},[7127],{"type":2548,"value":7128}," &&",{"type":2543,"tag":2826,"props":7130,"children":7131},{"style":2900},[7132],{"type":2548,"value":3022},{"type":2543,"tag":2826,"props":7134,"children":7135},{"style":2905},[7136],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":7138,"children":7139},{"style":2900},[7140],{"type":2548,"value":7113},{"type":2543,"tag":2826,"props":7142,"children":7143},{"style":2905},[7144],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":7146,"children":7147},{"style":2900},[7148],{"type":2548,"value":7123},{"type":2543,"tag":2826,"props":7150,"children":7151},{"style":2905},[7152],{"type":2548,"value":7153}," !==",{"type":2543,"tag":2826,"props":7155,"children":7156},{"style":2900},[7157],{"type":2548,"value":7158}," userBody",{"type":2543,"tag":2826,"props":7160,"children":7161},{"style":2905},[7162],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":7164,"children":7165},{"style":2900},[7166],{"type":2548,"value":7167},"userName",{"type":2543,"tag":2826,"props":7169,"children":7170},{"style":2971},[7171],{"type":2548,"value":7172},") ",{"type":2543,"tag":2826,"props":7174,"children":7175},{"style":2905},[7176],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":7178,"children":7179},{"class":2828,"line":2531},[7180,7185,7190,7194,7199,7204,7208,7213,7217,7222,7226,7230,7235,7239,7243],{"type":2543,"tag":2826,"props":7181,"children":7182},{"style":4089},[7183],{"type":2548,"value":7184},"      throw",{"type":2543,"tag":2826,"props":7186,"children":7187},{"style":3062},[7188],{"type":2548,"value":7189}," createError",{"type":2543,"tag":2826,"props":7191,"children":7192},{"style":2971},[7193],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":7195,"children":7196},{"style":2905},[7197],{"type":2548,"value":7198},"{",{"type":2543,"tag":2826,"props":7200,"children":7201},{"style":2971},[7202],{"type":2548,"value":7203}," statusCode",{"type":2543,"tag":2826,"props":7205,"children":7206},{"style":2905},[7207],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":7209,"children":7210},{"style":6427},[7211],{"type":2548,"value":7212}," 400",{"type":2543,"tag":2826,"props":7214,"children":7215},{"style":2905},[7216],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":7218,"children":7219},{"style":2971},[7220],{"type":2548,"value":7221}," message",{"type":2543,"tag":2826,"props":7223,"children":7224},{"style":2905},[7225],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":7227,"children":7228},{"style":2905},[7229],{"type":2548,"value":4150},{"type":2543,"tag":2826,"props":7231,"children":7232},{"style":2838},[7233],{"type":2548,"value":7234},"Email not matching current session",{"type":2543,"tag":2826,"props":7236,"children":7237},{"style":2905},[7238],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":7240,"children":7241},{"style":2905},[7242],{"type":2548,"value":6939},{"type":2543,"tag":2826,"props":7244,"children":7245},{"style":2971},[7246],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":7248,"children":7249},{"class":2828,"line":3315},[7250],{"type":2543,"tag":2826,"props":7251,"children":7252},{"style":2905},[7253],{"type":2548,"value":4879},{"type":2543,"tag":2826,"props":7255,"children":7256},{"class":2828,"line":3348},[7257],{"type":2543,"tag":2826,"props":7258,"children":7259},{"emptyLinePlaceholder":3093},[7260],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":7262,"children":7263},{"class":2828,"line":3403},[7264],{"type":2543,"tag":2826,"props":7265,"children":7266},{"style":2891},[7267],{"type":2548,"value":7268},"    \u002F\u002F If he registers a new account with credentials\n",{"type":2543,"tag":2826,"props":7270,"children":7271},{"class":2828,"line":3412},[7272,7276,7280,7284,7289,7293],{"type":2543,"tag":2826,"props":7273,"children":7274},{"style":4089},[7275],{"type":2548,"value":5430},{"type":2543,"tag":2826,"props":7277,"children":7278},{"style":2900},[7279],{"type":2548,"value":6934},{"type":2543,"tag":2826,"props":7281,"children":7282},{"style":2905},[7283],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":7285,"children":7286},{"style":3062},[7287],{"type":2548,"value":7288},"object",{"type":2543,"tag":2826,"props":7290,"children":7291},{"style":2971},[7292],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":7294,"children":7295},{"style":2905},[7296],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":7298,"children":7299},{"class":2828,"line":2436},[7300],{"type":2543,"tag":2826,"props":7301,"children":7302},{"style":2891},[7303],{"type":2548,"value":7304},"      \u002F\u002F we want the userName to be a valid email\n",{"type":2543,"tag":2826,"props":7306,"children":7307},{"class":2828,"line":3480},[7308,7313,7317,7321,7325,7330,7335,7339,7343],{"type":2543,"tag":2826,"props":7309,"children":7310},{"style":2971},[7311],{"type":2548,"value":7312},"      userName",{"type":2543,"tag":2826,"props":7314,"children":7315},{"style":2905},[7316],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":7318,"children":7319},{"style":2900},[7320],{"type":2548,"value":6934},{"type":2543,"tag":2826,"props":7322,"children":7323},{"style":2905},[7324],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":7326,"children":7327},{"style":3062},[7328],{"type":2548,"value":7329},"string",{"type":2543,"tag":2826,"props":7331,"children":7332},{"style":2971},[7333],{"type":2548,"value":7334},"()",{"type":2543,"tag":2826,"props":7336,"children":7337},{"style":2905},[7338],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":7340,"children":7341},{"style":3062},[7342],{"type":2548,"value":7123},{"type":2543,"tag":2826,"props":7344,"children":7345},{"style":2971},[7346],{"type":2548,"value":3070},{"type":2543,"tag":2826,"props":7348,"children":7349},{"class":2828,"line":3750},[7350,7354,7358,7362,7367,7371,7375],{"type":2543,"tag":2826,"props":7351,"children":7352},{"style":2905},[7353],{"type":2548,"value":5418},{"type":2543,"tag":2826,"props":7355,"children":7356},{"style":2971},[7357],{"type":2548,"value":5509},{"type":2543,"tag":2826,"props":7359,"children":7360},{"style":2905},[7361],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":7363,"children":7364},{"style":3062},[7365],{"type":2548,"value":7366},"parse",{"type":2543,"tag":2826,"props":7368,"children":7369},{"style":2971},[7370],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":7372,"children":7373},{"style":2900},[7374],{"type":2548,"value":7010},{"type":2543,"tag":2826,"props":7376,"children":7377},{"style":2971},[7378],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":7380,"children":7381},{"class":2828,"line":3758},[7382],{"type":2543,"tag":2826,"props":7383,"children":7384},{"style":2905},[7385],{"type":2548,"value":4167},{"type":2543,"tag":2826,"props":7387,"children":7388},{"class":2828,"line":3767},[7389,7393,7397,7401,7405,7409,7413,7418,7422,7426,7430],{"type":2543,"tag":2826,"props":7390,"children":7391},{"style":2977},[7392],{"type":2548,"value":5291},{"type":2543,"tag":2826,"props":7394,"children":7395},{"style":2971},[7396],{"type":2548,"value":5296},{"type":2543,"tag":2826,"props":7398,"children":7399},{"style":2905},[7400],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":7402,"children":7403},{"style":3921},[7404],{"type":2548,"value":5305},{"type":2543,"tag":2826,"props":7406,"children":7407},{"style":2905},[7408],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":7410,"children":7411},{"style":2905},[7412],{"type":2548,"value":2998},{"type":2543,"tag":2826,"props":7414,"children":7415},{"style":3921},[7416],{"type":2548,"value":7417}," credential",{"type":2543,"tag":2826,"props":7419,"children":7420},{"style":2905},[7421],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":7423,"children":7424},{"style":3921},[7425],{"type":2548,"value":3013},{"type":2543,"tag":2826,"props":7427,"children":7428},{"style":2905},[7429],{"type":2548,"value":3987},{"type":2543,"tag":2826,"props":7431,"children":7432},{"style":2905},[7433],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":7435,"children":7436},{"class":2828,"line":3775},[7437],{"type":2543,"tag":2826,"props":7438,"children":7439},{"style":2891},[7440],{"type":2548,"value":7441},"    \u002F\u002F The credential creation has been successful\n",{"type":2543,"tag":2826,"props":7443,"children":7444},{"class":2828,"line":3816},[7445],{"type":2543,"tag":2826,"props":7446,"children":7447},{"style":2891},[7448],{"type":2548,"value":7449},"    \u002F\u002F We need to create a user if it does not exist\n",{"type":2543,"tag":2826,"props":7451,"children":7452},{"class":2828,"line":3824},[7453,7457,7462,7466,7471],{"type":2543,"tag":2826,"props":7454,"children":7455},{"style":2977},[7456],{"type":2548,"value":7059},{"type":2543,"tag":2826,"props":7458,"children":7459},{"style":2900},[7460],{"type":2548,"value":7461}," db",{"type":2543,"tag":2826,"props":7463,"children":7464},{"style":2905},[7465],{"type":2548,"value":3059},{"type":2543,"tag":2826,"props":7467,"children":7468},{"style":3062},[7469],{"type":2548,"value":7470}," useDatabase",{"type":2543,"tag":2826,"props":7472,"children":7473},{"style":2971},[7474],{"type":2548,"value":3070},{"type":2543,"tag":2826,"props":7476,"children":7477},{"class":2828,"line":3833},[7478],{"type":2543,"tag":2826,"props":7479,"children":7480},{"emptyLinePlaceholder":3093},[7481],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":7483,"children":7484},{"class":2828,"line":3841},[7485],{"type":2543,"tag":2826,"props":7486,"children":7487},{"style":2891},[7488],{"type":2548,"value":7489},"    \u002F\u002F Get the user from the database\n",{"type":2543,"tag":2826,"props":7491,"children":7492},{"class":2828,"line":3878},[7493,7498,7503,7507,7511,7515,7519,7523,7528,7532],{"type":2543,"tag":2826,"props":7494,"children":7495},{"style":2977},[7496],{"type":2548,"value":7497},"    let",{"type":2543,"tag":2826,"props":7499,"children":7500},{"style":2900},[7501],{"type":2548,"value":7502}," dbUser",{"type":2543,"tag":2826,"props":7504,"children":7505},{"style":2905},[7506],{"type":2548,"value":3059},{"type":2543,"tag":2826,"props":7508,"children":7509},{"style":4089},[7510],{"type":2548,"value":4345},{"type":2543,"tag":2826,"props":7512,"children":7513},{"style":2900},[7514],{"type":2548,"value":7461},{"type":2543,"tag":2826,"props":7516,"children":7517},{"style":2905},[7518],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":7520,"children":7521},{"style":3062},[7522],{"type":2548,"value":6417},{"type":2543,"tag":2826,"props":7524,"children":7525},{"style":2905},[7526],{"type":2548,"value":7527},"`",{"type":2543,"tag":2826,"props":7529,"children":7530},{"style":2838},[7531],{"type":2548,"value":4830},{"type":2543,"tag":2826,"props":7533,"children":7534},{"style":2905},[7535],{"type":2548,"value":7536},"`\n",{"type":2543,"tag":2826,"props":7538,"children":7539},{"class":2828,"line":3886},[7540,7544,7548,7553,7558,7562],{"type":2543,"tag":2826,"props":7541,"children":7542},{"style":4089},[7543],{"type":2548,"value":7095},{"type":2543,"tag":2826,"props":7545,"children":7546},{"style":2971},[7547],{"type":2548,"value":3918},{"type":2543,"tag":2826,"props":7549,"children":7550},{"style":2905},[7551],{"type":2548,"value":7552},"!",{"type":2543,"tag":2826,"props":7554,"children":7555},{"style":2900},[7556],{"type":2548,"value":7557},"dbUser",{"type":2543,"tag":2826,"props":7559,"children":7560},{"style":2971},[7561],{"type":2548,"value":7172},{"type":2543,"tag":2826,"props":7563,"children":7564},{"style":2905},[7565],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":7567,"children":7568},{"class":2828,"line":3895},[7569],{"type":2543,"tag":2826,"props":7570,"children":7571},{"style":2891},[7572],{"type":2548,"value":7573},"      \u002F\u002F Store new user in database & its credentials\n",{"type":2543,"tag":2826,"props":7575,"children":7576},{"class":2828,"line":3903},[7577,7582,7586,7590,7594,7598,7602,7606,7610],{"type":2543,"tag":2826,"props":7578,"children":7579},{"style":2900},[7580],{"type":2548,"value":7581},"      dbUser",{"type":2543,"tag":2826,"props":7583,"children":7584},{"style":2905},[7585],{"type":2548,"value":3059},{"type":2543,"tag":2826,"props":7587,"children":7588},{"style":4089},[7589],{"type":2548,"value":4345},{"type":2543,"tag":2826,"props":7591,"children":7592},{"style":2900},[7593],{"type":2548,"value":7461},{"type":2543,"tag":2826,"props":7595,"children":7596},{"style":2905},[7597],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":7599,"children":7600},{"style":3062},[7601],{"type":2548,"value":6417},{"type":2543,"tag":2826,"props":7603,"children":7604},{"style":2905},[7605],{"type":2548,"value":7527},{"type":2543,"tag":2826,"props":7607,"children":7608},{"style":2838},[7609],{"type":2548,"value":4830},{"type":2543,"tag":2826,"props":7611,"children":7612},{"style":2905},[7613],{"type":2548,"value":7536},{"type":2543,"tag":2826,"props":7615,"children":7616},{"class":2828,"line":3999},[7617],{"type":2543,"tag":2826,"props":7618,"children":7619},{"style":2905},[7620],{"type":2548,"value":4879},{"type":2543,"tag":2826,"props":7622,"children":7624},{"class":2828,"line":7623},31,[7625],{"type":2543,"tag":2826,"props":7626,"children":7627},{"emptyLinePlaceholder":3093},[7628],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":7630,"children":7632},{"class":2828,"line":7631},32,[7633],{"type":2543,"tag":2826,"props":7634,"children":7635},{"style":2891},[7636],{"type":2548,"value":7637},"    \u002F\u002F we now need to store the credential in our database and link it to the user\n",{"type":2543,"tag":2826,"props":7639,"children":7641},{"class":2828,"line":7640},33,[7642,7646,7650,7654,7658,7662,7666],{"type":2543,"tag":2826,"props":7643,"children":7644},{"style":4089},[7645],{"type":2548,"value":5342},{"type":2543,"tag":2826,"props":7647,"children":7648},{"style":2900},[7649],{"type":2548,"value":7461},{"type":2543,"tag":2826,"props":7651,"children":7652},{"style":2905},[7653],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":7655,"children":7656},{"style":3062},[7657],{"type":2548,"value":6417},{"type":2543,"tag":2826,"props":7659,"children":7660},{"style":2905},[7661],{"type":2548,"value":7527},{"type":2543,"tag":2826,"props":7663,"children":7664},{"style":2838},[7665],{"type":2548,"value":4830},{"type":2543,"tag":2826,"props":7667,"children":7668},{"style":2905},[7669],{"type":2548,"value":7536},{"type":2543,"tag":2826,"props":7671,"children":7673},{"class":2828,"line":7672},34,[7674],{"type":2543,"tag":2826,"props":7675,"children":7676},{"emptyLinePlaceholder":3093},[7677],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":7679,"children":7681},{"class":2828,"line":7680},35,[7682],{"type":2543,"tag":2826,"props":7683,"children":7684},{"style":2891},[7685],{"type":2548,"value":7686},"    \u002F\u002F Set the user session\n",{"type":2543,"tag":2826,"props":7688,"children":7690},{"class":2828,"line":7689},36,[7691,7695,7699,7703,7707,7711],{"type":2543,"tag":2826,"props":7692,"children":7693},{"style":4089},[7694],{"type":2548,"value":5342},{"type":2543,"tag":2826,"props":7696,"children":7697},{"style":3062},[7698],{"type":2548,"value":4097},{"type":2543,"tag":2826,"props":7700,"children":7701},{"style":2971},[7702],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":7704,"children":7705},{"style":2900},[7706],{"type":2548,"value":5305},{"type":2543,"tag":2826,"props":7708,"children":7709},{"style":2905},[7710],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":7712,"children":7713},{"style":2905},[7714],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":7716,"children":7718},{"class":2828,"line":7717},37,[7719,7723,7727],{"type":2543,"tag":2826,"props":7720,"children":7721},{"style":2971},[7722],{"type":2548,"value":5370},{"type":2543,"tag":2826,"props":7724,"children":7725},{"style":2905},[7726],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":7728,"children":7729},{"style":2905},[7730],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":7732,"children":7734},{"class":2828,"line":7733},38,[7735,7740,7744,7748,7752],{"type":2543,"tag":2826,"props":7736,"children":7737},{"style":2971},[7738],{"type":2548,"value":7739},"        id",{"type":2543,"tag":2826,"props":7741,"children":7742},{"style":2905},[7743],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":7745,"children":7746},{"style":2900},[7747],{"type":2548,"value":7502},{"type":2543,"tag":2826,"props":7749,"children":7750},{"style":2905},[7751],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":7753,"children":7754},{"style":2900},[7755],{"type":2548,"value":5403},{"type":2543,"tag":2826,"props":7757,"children":7759},{"class":2828,"line":7758},39,[7760],{"type":2543,"tag":2826,"props":7761,"children":7762},{"style":2905},[7763],{"type":2548,"value":7764},"      },\n",{"type":2543,"tag":2826,"props":7766,"children":7768},{"class":2828,"line":7767},40,[7769,7774,7778,7782,7786,7791,7795],{"type":2543,"tag":2826,"props":7770,"children":7771},{"style":2971},[7772],{"type":2548,"value":7773},"      loggedInAt",{"type":2543,"tag":2826,"props":7775,"children":7776},{"style":2905},[7777],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":7779,"children":7780},{"style":2900},[7781],{"type":2548,"value":4253},{"type":2543,"tag":2826,"props":7783,"children":7784},{"style":2905},[7785],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":7787,"children":7788},{"style":3062},[7789],{"type":2548,"value":7790},"now",{"type":2543,"tag":2826,"props":7792,"children":7793},{"style":2971},[7794],{"type":2548,"value":7334},{"type":2543,"tag":2826,"props":7796,"children":7797},{"style":2905},[7798],{"type":2548,"value":4839},{"type":2543,"tag":2826,"props":7800,"children":7802},{"class":2828,"line":7801},41,[7803,7807],{"type":2543,"tag":2826,"props":7804,"children":7805},{"style":2905},[7806],{"type":2548,"value":5418},{"type":2543,"tag":2826,"props":7808,"children":7809},{"style":2971},[7810],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":7812,"children":7814},{"class":2828,"line":7813},42,[7815],{"type":2543,"tag":2826,"props":7816,"children":7817},{"style":2905},[7818],{"type":2548,"value":4167},{"type":2543,"tag":2826,"props":7820,"children":7822},{"class":2828,"line":7821},43,[7823,7827],{"type":2543,"tag":2826,"props":7824,"children":7825},{"style":2905},[7826],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":7828,"children":7829},{"style":2900},[7830],{"type":2548,"value":4269},{"type":2543,"tag":4007,"props":7832,"children":7833},{},[7834],{"type":2543,"tag":2550,"props":7835,"children":7836},{},[7837,7842,7844,7851,7853,7859,7861],{"type":2543,"tag":2826,"props":7838,"children":7839},{},[7840],{"type":2548,"value":7841},"!TIP",{"type":2548,"value":7843},"\nIf you want to plug in and use the ",{"type":2543,"tag":2554,"props":7845,"children":7848},{"href":7846,"rel":7847},"https:\u002F\u002Fgithub.com\u002Fpasskeydeveloper\u002Fpasskey-authenticator-aaguids",[2558],[7849],{"type":2548,"value":7850},"Community sourced list of AAGUIDS",{"type":2548,"value":7852}," to decorate your display of added passkeys, you can access the the ID via ",{"type":2543,"tag":2688,"props":7854,"children":7856},{"className":7855},[],[7857],{"type":2548,"value":7858},"credential.aaguid",{"type":2548,"value":7860}," inside ",{"type":2543,"tag":2688,"props":7862,"children":7864},{"className":7863},[],[7865],{"type":2548,"value":4682},{"type":2543,"tag":2816,"props":7867,"children":7869},{"className":3505,"code":7868,"language":3507,"meta":2416,"style":2416},"\u002F\u002F server\u002Fapi\u002Fwebauthn\u002Fauthenticate.post.ts\nexport default defineWebAuthnAuthenticateEventHandler({\n  \u002F\u002F Optionally, we can prefetch the credentials if the user gives their userName during login\n  async allowCredentials(event, userName) {\n    const credentials = await useDatabase().sql`...`\n    \u002F\u002F If no credentials are found, the authentication cannot be completed\n    if (!credentials.length)\n      throw createError({ statusCode: 400, message: 'User not found' })\n\n    \u002F\u002F If user is found, only allow credentials that are registered\n    \u002F\u002F The browser will automatically try to use the credential that it knows about\n    \u002F\u002F Skipping the step for the user to select a credential for a better user experience\n    return credentials\n    \u002F\u002F example: [{ id: '...' }]\n  },\n  async getCredential(event, credentialId) {\n    \u002F\u002F Look for the credential in our database\n    const credential = await useDatabase().sql`...`\n\n    \u002F\u002F If the credential is not found, there is no account to log in to\n    if (!credential)\n      throw createError({ statusCode: 400, message: 'Credential not found' })\n\n    return credential\n  },\n  async onSuccess(event, { credential, authenticationInfo }) {\n    \u002F\u002F The credential authentication has been successful\n    \u002F\u002F We can look it up in our database and get the corresponding user\n    const db = useDatabase()\n    const user = await db.sql`...`\n\n    \u002F\u002F Update the counter in the database (authenticationInfo.newCounter)\n    await db.sql`...`\n\n    \u002F\u002F Set the user session\n    await setUserSession(event, {\n      user: {\n        id: user.id\n      },\n      loggedInAt: Date.now(),\n    })\n  },\n})\n",[7870],{"type":2543,"tag":2688,"props":7871,"children":7872},{"__ignoreMap":2416},[7873,7881,7905,7913,7950,7998,8006,8038,8102,8109,8117,8125,8133,8145,8153,8160,8197,8205,8252,8259,8267,8291,8355,8362,8374,8381,8429,8437,8445,8468,8511,8518,8526,8557,8564,8571,8598,8613,8636,8643,8674,8685,8692],{"type":2543,"tag":2826,"props":7874,"children":7875},{"class":2828,"line":2502},[7876],{"type":2543,"tag":2826,"props":7877,"children":7878},{"style":2891},[7879],{"type":2548,"value":7880},"\u002F\u002F server\u002Fapi\u002Fwebauthn\u002Fauthenticate.post.ts\n",{"type":2543,"tag":2826,"props":7882,"children":7883},{"class":2828,"line":2468},[7884,7888,7892,7897,7901],{"type":2543,"tag":2826,"props":7885,"children":7886},{"style":4089},[7887],{"type":2548,"value":4623},{"type":2543,"tag":2826,"props":7889,"children":7890},{"style":4089},[7891],{"type":2548,"value":4738},{"type":2543,"tag":2826,"props":7893,"children":7894},{"style":3062},[7895],{"type":2548,"value":7896}," defineWebAuthnAuthenticateEventHandler",{"type":2543,"tag":2826,"props":7898,"children":7899},{"style":2900},[7900],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":7902,"children":7903},{"style":2905},[7904],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":7906,"children":7907},{"class":2828,"line":2452},[7908],{"type":2543,"tag":2826,"props":7909,"children":7910},{"style":2891},[7911],{"type":2548,"value":7912},"  \u002F\u002F Optionally, we can prefetch the credentials if the user gives their userName during login\n",{"type":2543,"tag":2826,"props":7914,"children":7915},{"class":2828,"line":3089},[7916,7920,7925,7929,7933,7937,7942,7946],{"type":2543,"tag":2826,"props":7917,"children":7918},{"style":2977},[7919],{"type":2548,"value":5291},{"type":2543,"tag":2826,"props":7921,"children":7922},{"style":2971},[7923],{"type":2548,"value":7924}," allowCredentials",{"type":2543,"tag":2826,"props":7926,"children":7927},{"style":2905},[7928],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":7930,"children":7931},{"style":3921},[7932],{"type":2548,"value":5305},{"type":2543,"tag":2826,"props":7934,"children":7935},{"style":2905},[7936],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":7938,"children":7939},{"style":3921},[7940],{"type":2548,"value":7941}," userName",{"type":2543,"tag":2826,"props":7943,"children":7944},{"style":2905},[7945],{"type":2548,"value":5509},{"type":2543,"tag":2826,"props":7947,"children":7948},{"style":2905},[7949],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":7951,"children":7952},{"class":2828,"line":3099},[7953,7957,7962,7966,7970,7974,7978,7982,7986,7990,7994],{"type":2543,"tag":2826,"props":7954,"children":7955},{"style":2977},[7956],{"type":2548,"value":7059},{"type":2543,"tag":2826,"props":7958,"children":7959},{"style":2900},[7960],{"type":2548,"value":7961}," credentials",{"type":2543,"tag":2826,"props":7963,"children":7964},{"style":2905},[7965],{"type":2548,"value":3059},{"type":2543,"tag":2826,"props":7967,"children":7968},{"style":4089},[7969],{"type":2548,"value":4345},{"type":2543,"tag":2826,"props":7971,"children":7972},{"style":3062},[7973],{"type":2548,"value":7470},{"type":2543,"tag":2826,"props":7975,"children":7976},{"style":2971},[7977],{"type":2548,"value":7334},{"type":2543,"tag":2826,"props":7979,"children":7980},{"style":2905},[7981],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":7983,"children":7984},{"style":3062},[7985],{"type":2548,"value":6417},{"type":2543,"tag":2826,"props":7987,"children":7988},{"style":2905},[7989],{"type":2548,"value":7527},{"type":2543,"tag":2826,"props":7991,"children":7992},{"style":2838},[7993],{"type":2548,"value":4830},{"type":2543,"tag":2826,"props":7995,"children":7996},{"style":2905},[7997],{"type":2548,"value":7536},{"type":2543,"tag":2826,"props":7999,"children":8000},{"class":2828,"line":3116},[8001],{"type":2543,"tag":2826,"props":8002,"children":8003},{"style":2891},[8004],{"type":2548,"value":8005},"    \u002F\u002F If no credentials are found, the authentication cannot be completed\n",{"type":2543,"tag":2826,"props":8007,"children":8008},{"class":2828,"line":2448},[8009,8013,8017,8021,8025,8029,8034],{"type":2543,"tag":2826,"props":8010,"children":8011},{"style":4089},[8012],{"type":2548,"value":7095},{"type":2543,"tag":2826,"props":8014,"children":8015},{"style":2971},[8016],{"type":2548,"value":3918},{"type":2543,"tag":2826,"props":8018,"children":8019},{"style":2905},[8020],{"type":2548,"value":7552},{"type":2543,"tag":2826,"props":8022,"children":8023},{"style":2900},[8024],{"type":2548,"value":6758},{"type":2543,"tag":2826,"props":8026,"children":8027},{"style":2905},[8028],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":8030,"children":8031},{"style":2900},[8032],{"type":2548,"value":8033},"length",{"type":2543,"tag":2826,"props":8035,"children":8036},{"style":2971},[8037],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":8039,"children":8040},{"class":2828,"line":2444},[8041,8045,8049,8053,8057,8061,8065,8069,8073,8077,8081,8085,8090,8094,8098],{"type":2543,"tag":2826,"props":8042,"children":8043},{"style":4089},[8044],{"type":2548,"value":7184},{"type":2543,"tag":2826,"props":8046,"children":8047},{"style":3062},[8048],{"type":2548,"value":7189},{"type":2543,"tag":2826,"props":8050,"children":8051},{"style":2971},[8052],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":8054,"children":8055},{"style":2905},[8056],{"type":2548,"value":7198},{"type":2543,"tag":2826,"props":8058,"children":8059},{"style":2971},[8060],{"type":2548,"value":7203},{"type":2543,"tag":2826,"props":8062,"children":8063},{"style":2905},[8064],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":8066,"children":8067},{"style":6427},[8068],{"type":2548,"value":7212},{"type":2543,"tag":2826,"props":8070,"children":8071},{"style":2905},[8072],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":8074,"children":8075},{"style":2971},[8076],{"type":2548,"value":7221},{"type":2543,"tag":2826,"props":8078,"children":8079},{"style":2905},[8080],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":8082,"children":8083},{"style":2905},[8084],{"type":2548,"value":4150},{"type":2543,"tag":2826,"props":8086,"children":8087},{"style":2838},[8088],{"type":2548,"value":8089},"User not found",{"type":2543,"tag":2826,"props":8091,"children":8092},{"style":2905},[8093],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":8095,"children":8096},{"style":2905},[8097],{"type":2548,"value":6939},{"type":2543,"tag":2826,"props":8099,"children":8100},{"style":2971},[8101],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":8103,"children":8104},{"class":2828,"line":2440},[8105],{"type":2543,"tag":2826,"props":8106,"children":8107},{"emptyLinePlaceholder":3093},[8108],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":8110,"children":8111},{"class":2828,"line":3278},[8112],{"type":2543,"tag":2826,"props":8113,"children":8114},{"style":2891},[8115],{"type":2548,"value":8116},"    \u002F\u002F If user is found, only allow credentials that are registered\n",{"type":2543,"tag":2826,"props":8118,"children":8119},{"class":2828,"line":2531},[8120],{"type":2543,"tag":2826,"props":8121,"children":8122},{"style":2891},[8123],{"type":2548,"value":8124},"    \u002F\u002F The browser will automatically try to use the credential that it knows about\n",{"type":2543,"tag":2826,"props":8126,"children":8127},{"class":2828,"line":3315},[8128],{"type":2543,"tag":2826,"props":8129,"children":8130},{"style":2891},[8131],{"type":2548,"value":8132},"    \u002F\u002F Skipping the step for the user to select a credential for a better user experience\n",{"type":2543,"tag":2826,"props":8134,"children":8135},{"class":2828,"line":3348},[8136,8140],{"type":2543,"tag":2826,"props":8137,"children":8138},{"style":4089},[8139],{"type":2548,"value":5430},{"type":2543,"tag":2826,"props":8141,"children":8142},{"style":2900},[8143],{"type":2548,"value":8144}," credentials\n",{"type":2543,"tag":2826,"props":8146,"children":8147},{"class":2828,"line":3403},[8148],{"type":2543,"tag":2826,"props":8149,"children":8150},{"style":2891},[8151],{"type":2548,"value":8152},"    \u002F\u002F example: [{ id: '...' }]\n",{"type":2543,"tag":2826,"props":8154,"children":8155},{"class":2828,"line":3412},[8156],{"type":2543,"tag":2826,"props":8157,"children":8158},{"style":2905},[8159],{"type":2548,"value":4167},{"type":2543,"tag":2826,"props":8161,"children":8162},{"class":2828,"line":2436},[8163,8167,8172,8176,8180,8184,8189,8193],{"type":2543,"tag":2826,"props":8164,"children":8165},{"style":2977},[8166],{"type":2548,"value":5291},{"type":2543,"tag":2826,"props":8168,"children":8169},{"style":2971},[8170],{"type":2548,"value":8171}," getCredential",{"type":2543,"tag":2826,"props":8173,"children":8174},{"style":2905},[8175],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":8177,"children":8178},{"style":3921},[8179],{"type":2548,"value":5305},{"type":2543,"tag":2826,"props":8181,"children":8182},{"style":2905},[8183],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":8185,"children":8186},{"style":3921},[8187],{"type":2548,"value":8188}," credentialId",{"type":2543,"tag":2826,"props":8190,"children":8191},{"style":2905},[8192],{"type":2548,"value":5509},{"type":2543,"tag":2826,"props":8194,"children":8195},{"style":2905},[8196],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":8198,"children":8199},{"class":2828,"line":3480},[8200],{"type":2543,"tag":2826,"props":8201,"children":8202},{"style":2891},[8203],{"type":2548,"value":8204},"    \u002F\u002F Look for the credential in our database\n",{"type":2543,"tag":2826,"props":8206,"children":8207},{"class":2828,"line":3750},[8208,8212,8216,8220,8224,8228,8232,8236,8240,8244,8248],{"type":2543,"tag":2826,"props":8209,"children":8210},{"style":2977},[8211],{"type":2548,"value":7059},{"type":2543,"tag":2826,"props":8213,"children":8214},{"style":2900},[8215],{"type":2548,"value":7417},{"type":2543,"tag":2826,"props":8217,"children":8218},{"style":2905},[8219],{"type":2548,"value":3059},{"type":2543,"tag":2826,"props":8221,"children":8222},{"style":4089},[8223],{"type":2548,"value":4345},{"type":2543,"tag":2826,"props":8225,"children":8226},{"style":3062},[8227],{"type":2548,"value":7470},{"type":2543,"tag":2826,"props":8229,"children":8230},{"style":2971},[8231],{"type":2548,"value":7334},{"type":2543,"tag":2826,"props":8233,"children":8234},{"style":2905},[8235],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":8237,"children":8238},{"style":3062},[8239],{"type":2548,"value":6417},{"type":2543,"tag":2826,"props":8241,"children":8242},{"style":2905},[8243],{"type":2548,"value":7527},{"type":2543,"tag":2826,"props":8245,"children":8246},{"style":2838},[8247],{"type":2548,"value":4830},{"type":2543,"tag":2826,"props":8249,"children":8250},{"style":2905},[8251],{"type":2548,"value":7536},{"type":2543,"tag":2826,"props":8253,"children":8254},{"class":2828,"line":3758},[8255],{"type":2543,"tag":2826,"props":8256,"children":8257},{"emptyLinePlaceholder":3093},[8258],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":8260,"children":8261},{"class":2828,"line":3767},[8262],{"type":2543,"tag":2826,"props":8263,"children":8264},{"style":2891},[8265],{"type":2548,"value":8266},"    \u002F\u002F If the credential is not found, there is no account to log in to\n",{"type":2543,"tag":2826,"props":8268,"children":8269},{"class":2828,"line":3775},[8270,8274,8278,8282,8287],{"type":2543,"tag":2826,"props":8271,"children":8272},{"style":4089},[8273],{"type":2548,"value":7095},{"type":2543,"tag":2826,"props":8275,"children":8276},{"style":2971},[8277],{"type":2548,"value":3918},{"type":2543,"tag":2826,"props":8279,"children":8280},{"style":2905},[8281],{"type":2548,"value":7552},{"type":2543,"tag":2826,"props":8283,"children":8284},{"style":2900},[8285],{"type":2548,"value":8286},"credential",{"type":2543,"tag":2826,"props":8288,"children":8289},{"style":2971},[8290],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":8292,"children":8293},{"class":2828,"line":3816},[8294,8298,8302,8306,8310,8314,8318,8322,8326,8330,8334,8338,8343,8347,8351],{"type":2543,"tag":2826,"props":8295,"children":8296},{"style":4089},[8297],{"type":2548,"value":7184},{"type":2543,"tag":2826,"props":8299,"children":8300},{"style":3062},[8301],{"type":2548,"value":7189},{"type":2543,"tag":2826,"props":8303,"children":8304},{"style":2971},[8305],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":8307,"children":8308},{"style":2905},[8309],{"type":2548,"value":7198},{"type":2543,"tag":2826,"props":8311,"children":8312},{"style":2971},[8313],{"type":2548,"value":7203},{"type":2543,"tag":2826,"props":8315,"children":8316},{"style":2905},[8317],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":8319,"children":8320},{"style":6427},[8321],{"type":2548,"value":7212},{"type":2543,"tag":2826,"props":8323,"children":8324},{"style":2905},[8325],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":8327,"children":8328},{"style":2971},[8329],{"type":2548,"value":7221},{"type":2543,"tag":2826,"props":8331,"children":8332},{"style":2905},[8333],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":8335,"children":8336},{"style":2905},[8337],{"type":2548,"value":4150},{"type":2543,"tag":2826,"props":8339,"children":8340},{"style":2838},[8341],{"type":2548,"value":8342},"Credential not found",{"type":2543,"tag":2826,"props":8344,"children":8345},{"style":2905},[8346],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":8348,"children":8349},{"style":2905},[8350],{"type":2548,"value":6939},{"type":2543,"tag":2826,"props":8352,"children":8353},{"style":2971},[8354],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":8356,"children":8357},{"class":2828,"line":3824},[8358],{"type":2543,"tag":2826,"props":8359,"children":8360},{"emptyLinePlaceholder":3093},[8361],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":8363,"children":8364},{"class":2828,"line":3833},[8365,8369],{"type":2543,"tag":2826,"props":8366,"children":8367},{"style":4089},[8368],{"type":2548,"value":5430},{"type":2543,"tag":2826,"props":8370,"children":8371},{"style":2900},[8372],{"type":2548,"value":8373}," credential\n",{"type":2543,"tag":2826,"props":8375,"children":8376},{"class":2828,"line":3841},[8377],{"type":2543,"tag":2826,"props":8378,"children":8379},{"style":2905},[8380],{"type":2548,"value":4167},{"type":2543,"tag":2826,"props":8382,"children":8383},{"class":2828,"line":3878},[8384,8388,8392,8396,8400,8404,8408,8412,8416,8421,8425],{"type":2543,"tag":2826,"props":8385,"children":8386},{"style":2977},[8387],{"type":2548,"value":5291},{"type":2543,"tag":2826,"props":8389,"children":8390},{"style":2971},[8391],{"type":2548,"value":5296},{"type":2543,"tag":2826,"props":8393,"children":8394},{"style":2905},[8395],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":8397,"children":8398},{"style":3921},[8399],{"type":2548,"value":5305},{"type":2543,"tag":2826,"props":8401,"children":8402},{"style":2905},[8403],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":8405,"children":8406},{"style":2905},[8407],{"type":2548,"value":2998},{"type":2543,"tag":2826,"props":8409,"children":8410},{"style":3921},[8411],{"type":2548,"value":7417},{"type":2543,"tag":2826,"props":8413,"children":8414},{"style":2905},[8415],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":8417,"children":8418},{"style":3921},[8419],{"type":2548,"value":8420}," authenticationInfo",{"type":2543,"tag":2826,"props":8422,"children":8423},{"style":2905},[8424],{"type":2548,"value":3987},{"type":2543,"tag":2826,"props":8426,"children":8427},{"style":2905},[8428],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":8430,"children":8431},{"class":2828,"line":3886},[8432],{"type":2543,"tag":2826,"props":8433,"children":8434},{"style":2891},[8435],{"type":2548,"value":8436},"    \u002F\u002F The credential authentication has been successful\n",{"type":2543,"tag":2826,"props":8438,"children":8439},{"class":2828,"line":3895},[8440],{"type":2543,"tag":2826,"props":8441,"children":8442},{"style":2891},[8443],{"type":2548,"value":8444},"    \u002F\u002F We can look it up in our database and get the corresponding user\n",{"type":2543,"tag":2826,"props":8446,"children":8447},{"class":2828,"line":3903},[8448,8452,8456,8460,8464],{"type":2543,"tag":2826,"props":8449,"children":8450},{"style":2977},[8451],{"type":2548,"value":7059},{"type":2543,"tag":2826,"props":8453,"children":8454},{"style":2900},[8455],{"type":2548,"value":7461},{"type":2543,"tag":2826,"props":8457,"children":8458},{"style":2905},[8459],{"type":2548,"value":3059},{"type":2543,"tag":2826,"props":8461,"children":8462},{"style":3062},[8463],{"type":2548,"value":7470},{"type":2543,"tag":2826,"props":8465,"children":8466},{"style":2971},[8467],{"type":2548,"value":3070},{"type":2543,"tag":2826,"props":8469,"children":8470},{"class":2828,"line":3999},[8471,8475,8479,8483,8487,8491,8495,8499,8503,8507],{"type":2543,"tag":2826,"props":8472,"children":8473},{"style":2977},[8474],{"type":2548,"value":7059},{"type":2543,"tag":2826,"props":8476,"children":8477},{"style":2900},[8478],{"type":2548,"value":3013},{"type":2543,"tag":2826,"props":8480,"children":8481},{"style":2905},[8482],{"type":2548,"value":3059},{"type":2543,"tag":2826,"props":8484,"children":8485},{"style":4089},[8486],{"type":2548,"value":4345},{"type":2543,"tag":2826,"props":8488,"children":8489},{"style":2900},[8490],{"type":2548,"value":7461},{"type":2543,"tag":2826,"props":8492,"children":8493},{"style":2905},[8494],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":8496,"children":8497},{"style":3062},[8498],{"type":2548,"value":6417},{"type":2543,"tag":2826,"props":8500,"children":8501},{"style":2905},[8502],{"type":2548,"value":7527},{"type":2543,"tag":2826,"props":8504,"children":8505},{"style":2838},[8506],{"type":2548,"value":4830},{"type":2543,"tag":2826,"props":8508,"children":8509},{"style":2905},[8510],{"type":2548,"value":7536},{"type":2543,"tag":2826,"props":8512,"children":8513},{"class":2828,"line":7623},[8514],{"type":2543,"tag":2826,"props":8515,"children":8516},{"emptyLinePlaceholder":3093},[8517],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":8519,"children":8520},{"class":2828,"line":7631},[8521],{"type":2543,"tag":2826,"props":8522,"children":8523},{"style":2891},[8524],{"type":2548,"value":8525},"    \u002F\u002F Update the counter in the database (authenticationInfo.newCounter)\n",{"type":2543,"tag":2826,"props":8527,"children":8528},{"class":2828,"line":7640},[8529,8533,8537,8541,8545,8549,8553],{"type":2543,"tag":2826,"props":8530,"children":8531},{"style":4089},[8532],{"type":2548,"value":5342},{"type":2543,"tag":2826,"props":8534,"children":8535},{"style":2900},[8536],{"type":2548,"value":7461},{"type":2543,"tag":2826,"props":8538,"children":8539},{"style":2905},[8540],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":8542,"children":8543},{"style":3062},[8544],{"type":2548,"value":6417},{"type":2543,"tag":2826,"props":8546,"children":8547},{"style":2905},[8548],{"type":2548,"value":7527},{"type":2543,"tag":2826,"props":8550,"children":8551},{"style":2838},[8552],{"type":2548,"value":4830},{"type":2543,"tag":2826,"props":8554,"children":8555},{"style":2905},[8556],{"type":2548,"value":7536},{"type":2543,"tag":2826,"props":8558,"children":8559},{"class":2828,"line":7672},[8560],{"type":2543,"tag":2826,"props":8561,"children":8562},{"emptyLinePlaceholder":3093},[8563],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":8565,"children":8566},{"class":2828,"line":7680},[8567],{"type":2543,"tag":2826,"props":8568,"children":8569},{"style":2891},[8570],{"type":2548,"value":7686},{"type":2543,"tag":2826,"props":8572,"children":8573},{"class":2828,"line":7689},[8574,8578,8582,8586,8590,8594],{"type":2543,"tag":2826,"props":8575,"children":8576},{"style":4089},[8577],{"type":2548,"value":5342},{"type":2543,"tag":2826,"props":8579,"children":8580},{"style":3062},[8581],{"type":2548,"value":4097},{"type":2543,"tag":2826,"props":8583,"children":8584},{"style":2971},[8585],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":8587,"children":8588},{"style":2900},[8589],{"type":2548,"value":5305},{"type":2543,"tag":2826,"props":8591,"children":8592},{"style":2905},[8593],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":8595,"children":8596},{"style":2905},[8597],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":8599,"children":8600},{"class":2828,"line":7717},[8601,8605,8609],{"type":2543,"tag":2826,"props":8602,"children":8603},{"style":2971},[8604],{"type":2548,"value":5370},{"type":2543,"tag":2826,"props":8606,"children":8607},{"style":2905},[8608],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":8610,"children":8611},{"style":2905},[8612],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":8614,"children":8615},{"class":2828,"line":7733},[8616,8620,8624,8628,8632],{"type":2543,"tag":2826,"props":8617,"children":8618},{"style":2971},[8619],{"type":2548,"value":7739},{"type":2543,"tag":2826,"props":8621,"children":8622},{"style":2905},[8623],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":8625,"children":8626},{"style":2900},[8627],{"type":2548,"value":3013},{"type":2543,"tag":2826,"props":8629,"children":8630},{"style":2905},[8631],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":8633,"children":8634},{"style":2900},[8635],{"type":2548,"value":5403},{"type":2543,"tag":2826,"props":8637,"children":8638},{"class":2828,"line":7758},[8639],{"type":2543,"tag":2826,"props":8640,"children":8641},{"style":2905},[8642],{"type":2548,"value":7764},{"type":2543,"tag":2826,"props":8644,"children":8645},{"class":2828,"line":7767},[8646,8650,8654,8658,8662,8666,8670],{"type":2543,"tag":2826,"props":8647,"children":8648},{"style":2971},[8649],{"type":2548,"value":7773},{"type":2543,"tag":2826,"props":8651,"children":8652},{"style":2905},[8653],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":8655,"children":8656},{"style":2900},[8657],{"type":2548,"value":4253},{"type":2543,"tag":2826,"props":8659,"children":8660},{"style":2905},[8661],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":8663,"children":8664},{"style":3062},[8665],{"type":2548,"value":7790},{"type":2543,"tag":2826,"props":8667,"children":8668},{"style":2971},[8669],{"type":2548,"value":7334},{"type":2543,"tag":2826,"props":8671,"children":8672},{"style":2905},[8673],{"type":2548,"value":4839},{"type":2543,"tag":2826,"props":8675,"children":8676},{"class":2828,"line":7801},[8677,8681],{"type":2543,"tag":2826,"props":8678,"children":8679},{"style":2905},[8680],{"type":2548,"value":5418},{"type":2543,"tag":2826,"props":8682,"children":8683},{"style":2971},[8684],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":8686,"children":8687},{"class":2828,"line":7813},[8688],{"type":2543,"tag":2826,"props":8689,"children":8690},{"style":2905},[8691],{"type":2548,"value":4167},{"type":2543,"tag":2826,"props":8693,"children":8694},{"class":2828,"line":7821},[8695,8699],{"type":2543,"tag":2826,"props":8696,"children":8697},{"style":2905},[8698],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":8700,"children":8701},{"style":2900},[8702],{"type":2548,"value":4269},{"type":2543,"tag":4007,"props":8704,"children":8705},{},[8706],{"type":2543,"tag":2550,"props":8707,"children":8708},{},[8709,8713,8715,8720,8722,8728,8729,8735],{"type":2543,"tag":2826,"props":8710,"children":8711},{},[8712],{"type":2548,"value":4017},{"type":2548,"value":8714},"\nWebauthn uses challenges to prevent replay attacks. By default, this module does not make use if this feature. If you want to use challenges (",{"type":2543,"tag":3498,"props":8716,"children":8717},{},[8718],{"type":2548,"value":8719},"which is highly recommended",{"type":2548,"value":8721},"), the ",{"type":2543,"tag":2688,"props":8723,"children":8725},{"className":8724},[],[8726],{"type":2548,"value":8727},"storeChallenge",{"type":2548,"value":5659},{"type":2543,"tag":2688,"props":8730,"children":8732},{"className":8731},[],[8733],{"type":2548,"value":8734},"getChallenge",{"type":2548,"value":8736}," functions are provided. An attempt ID is created and sent with each authentication request. You can use this ID to store the challenge in a database or KV store as shown in the example below.",{"type":2543,"tag":4007,"props":8738,"children":8739},{},[8740],{"type":2543,"tag":2816,"props":8741,"children":8743},{"className":3505,"code":8742,"language":3507,"meta":2416,"style":2416},"export default defineWebAuthnAuthenticateEventHandler({\n  async storeChallenge(event, challenge, attemptId) {\n    \u002F\u002F Store the challenge in a KV store or DB\n    await useStorage().setItem(`attempt:${attemptId}`, challenge)\n  },\n  async getChallenge(event, attemptId) {\n    const challenge = await useStorage().getItem(`attempt:${attemptId}`)\n\n    \u002F\u002F Make sure to always remove the attempt because they are single use only!\n    await useStorage().removeItem(`attempt:${attemptId}`)\n\n    if (!challenge)\n      throw createError({ statusCode: 400, message: 'Challenge expired' })\n\n    return challenge\n  },\n  async onSuccess(event, { authenticator }) {\n    \u002F\u002F ...\n  },\n})\n",[8744],{"type":2543,"tag":2688,"props":8745,"children":8746},{"__ignoreMap":2416},[8747,8770,8816,8824,8889,8896,8932,8996,9003,9011,9063,9070,9094,9158,9165,9177,9184,9224,9232,9239],{"type":2543,"tag":2826,"props":8748,"children":8749},{"class":2828,"line":2502},[8750,8754,8758,8762,8766],{"type":2543,"tag":2826,"props":8751,"children":8752},{"style":4089},[8753],{"type":2548,"value":4623},{"type":2543,"tag":2826,"props":8755,"children":8756},{"style":4089},[8757],{"type":2548,"value":4738},{"type":2543,"tag":2826,"props":8759,"children":8760},{"style":3062},[8761],{"type":2548,"value":7896},{"type":2543,"tag":2826,"props":8763,"children":8764},{"style":2900},[8765],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":8767,"children":8768},{"style":2905},[8769],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":8771,"children":8772},{"class":2828,"line":2468},[8773,8777,8782,8786,8790,8794,8799,8803,8808,8812],{"type":2543,"tag":2826,"props":8774,"children":8775},{"style":2977},[8776],{"type":2548,"value":5291},{"type":2543,"tag":2826,"props":8778,"children":8779},{"style":2971},[8780],{"type":2548,"value":8781}," storeChallenge",{"type":2543,"tag":2826,"props":8783,"children":8784},{"style":2905},[8785],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":8787,"children":8788},{"style":3921},[8789],{"type":2548,"value":5305},{"type":2543,"tag":2826,"props":8791,"children":8792},{"style":2905},[8793],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":8795,"children":8796},{"style":3921},[8797],{"type":2548,"value":8798}," challenge",{"type":2543,"tag":2826,"props":8800,"children":8801},{"style":2905},[8802],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":8804,"children":8805},{"style":3921},[8806],{"type":2548,"value":8807}," attemptId",{"type":2543,"tag":2826,"props":8809,"children":8810},{"style":2905},[8811],{"type":2548,"value":5509},{"type":2543,"tag":2826,"props":8813,"children":8814},{"style":2905},[8815],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":8817,"children":8818},{"class":2828,"line":2452},[8819],{"type":2543,"tag":2826,"props":8820,"children":8821},{"style":2891},[8822],{"type":2548,"value":8823},"    \u002F\u002F Store the challenge in a KV store or DB\n",{"type":2543,"tag":2826,"props":8825,"children":8826},{"class":2828,"line":3089},[8827,8831,8836,8840,8844,8849,8853,8857,8862,8867,8872,8877,8881,8885],{"type":2543,"tag":2826,"props":8828,"children":8829},{"style":4089},[8830],{"type":2548,"value":5342},{"type":2543,"tag":2826,"props":8832,"children":8833},{"style":3062},[8834],{"type":2548,"value":8835}," useStorage",{"type":2543,"tag":2826,"props":8837,"children":8838},{"style":2971},[8839],{"type":2548,"value":7334},{"type":2543,"tag":2826,"props":8841,"children":8842},{"style":2905},[8843],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":8845,"children":8846},{"style":3062},[8847],{"type":2548,"value":8848},"setItem",{"type":2543,"tag":2826,"props":8850,"children":8851},{"style":2971},[8852],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":8854,"children":8855},{"style":2905},[8856],{"type":2548,"value":7527},{"type":2543,"tag":2826,"props":8858,"children":8859},{"style":2838},[8860],{"type":2548,"value":8861},"attempt:",{"type":2543,"tag":2826,"props":8863,"children":8864},{"style":2905},[8865],{"type":2548,"value":8866},"${",{"type":2543,"tag":2826,"props":8868,"children":8869},{"style":2900},[8870],{"type":2548,"value":8871},"attemptId",{"type":2543,"tag":2826,"props":8873,"children":8874},{"style":2905},[8875],{"type":2548,"value":8876},"}`",{"type":2543,"tag":2826,"props":8878,"children":8879},{"style":2905},[8880],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":8882,"children":8883},{"style":2900},[8884],{"type":2548,"value":8798},{"type":2543,"tag":2826,"props":8886,"children":8887},{"style":2971},[8888],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":8890,"children":8891},{"class":2828,"line":3099},[8892],{"type":2543,"tag":2826,"props":8893,"children":8894},{"style":2905},[8895],{"type":2548,"value":4167},{"type":2543,"tag":2826,"props":8897,"children":8898},{"class":2828,"line":3116},[8899,8903,8908,8912,8916,8920,8924,8928],{"type":2543,"tag":2826,"props":8900,"children":8901},{"style":2977},[8902],{"type":2548,"value":5291},{"type":2543,"tag":2826,"props":8904,"children":8905},{"style":2971},[8906],{"type":2548,"value":8907}," getChallenge",{"type":2543,"tag":2826,"props":8909,"children":8910},{"style":2905},[8911],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":8913,"children":8914},{"style":3921},[8915],{"type":2548,"value":5305},{"type":2543,"tag":2826,"props":8917,"children":8918},{"style":2905},[8919],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":8921,"children":8922},{"style":3921},[8923],{"type":2548,"value":8807},{"type":2543,"tag":2826,"props":8925,"children":8926},{"style":2905},[8927],{"type":2548,"value":5509},{"type":2543,"tag":2826,"props":8929,"children":8930},{"style":2905},[8931],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":8933,"children":8934},{"class":2828,"line":2448},[8935,8939,8943,8947,8951,8955,8959,8963,8968,8972,8976,8980,8984,8988,8992],{"type":2543,"tag":2826,"props":8936,"children":8937},{"style":2977},[8938],{"type":2548,"value":7059},{"type":2543,"tag":2826,"props":8940,"children":8941},{"style":2900},[8942],{"type":2548,"value":8798},{"type":2543,"tag":2826,"props":8944,"children":8945},{"style":2905},[8946],{"type":2548,"value":3059},{"type":2543,"tag":2826,"props":8948,"children":8949},{"style":4089},[8950],{"type":2548,"value":4345},{"type":2543,"tag":2826,"props":8952,"children":8953},{"style":3062},[8954],{"type":2548,"value":8835},{"type":2543,"tag":2826,"props":8956,"children":8957},{"style":2971},[8958],{"type":2548,"value":7334},{"type":2543,"tag":2826,"props":8960,"children":8961},{"style":2905},[8962],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":8964,"children":8965},{"style":3062},[8966],{"type":2548,"value":8967},"getItem",{"type":2543,"tag":2826,"props":8969,"children":8970},{"style":2971},[8971],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":8973,"children":8974},{"style":2905},[8975],{"type":2548,"value":7527},{"type":2543,"tag":2826,"props":8977,"children":8978},{"style":2838},[8979],{"type":2548,"value":8861},{"type":2543,"tag":2826,"props":8981,"children":8982},{"style":2905},[8983],{"type":2548,"value":8866},{"type":2543,"tag":2826,"props":8985,"children":8986},{"style":2900},[8987],{"type":2548,"value":8871},{"type":2543,"tag":2826,"props":8989,"children":8990},{"style":2905},[8991],{"type":2548,"value":8876},{"type":2543,"tag":2826,"props":8993,"children":8994},{"style":2971},[8995],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":8997,"children":8998},{"class":2828,"line":2444},[8999],{"type":2543,"tag":2826,"props":9000,"children":9001},{"emptyLinePlaceholder":3093},[9002],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":9004,"children":9005},{"class":2828,"line":2440},[9006],{"type":2543,"tag":2826,"props":9007,"children":9008},{"style":2891},[9009],{"type":2548,"value":9010},"    \u002F\u002F Make sure to always remove the attempt because they are single use only!\n",{"type":2543,"tag":2826,"props":9012,"children":9013},{"class":2828,"line":3278},[9014,9018,9022,9026,9030,9035,9039,9043,9047,9051,9055,9059],{"type":2543,"tag":2826,"props":9015,"children":9016},{"style":4089},[9017],{"type":2548,"value":5342},{"type":2543,"tag":2826,"props":9019,"children":9020},{"style":3062},[9021],{"type":2548,"value":8835},{"type":2543,"tag":2826,"props":9023,"children":9024},{"style":2971},[9025],{"type":2548,"value":7334},{"type":2543,"tag":2826,"props":9027,"children":9028},{"style":2905},[9029],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":9031,"children":9032},{"style":3062},[9033],{"type":2548,"value":9034},"removeItem",{"type":2543,"tag":2826,"props":9036,"children":9037},{"style":2971},[9038],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":9040,"children":9041},{"style":2905},[9042],{"type":2548,"value":7527},{"type":2543,"tag":2826,"props":9044,"children":9045},{"style":2838},[9046],{"type":2548,"value":8861},{"type":2543,"tag":2826,"props":9048,"children":9049},{"style":2905},[9050],{"type":2548,"value":8866},{"type":2543,"tag":2826,"props":9052,"children":9053},{"style":2900},[9054],{"type":2548,"value":8871},{"type":2543,"tag":2826,"props":9056,"children":9057},{"style":2905},[9058],{"type":2548,"value":8876},{"type":2543,"tag":2826,"props":9060,"children":9061},{"style":2971},[9062],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":9064,"children":9065},{"class":2828,"line":2531},[9066],{"type":2543,"tag":2826,"props":9067,"children":9068},{"emptyLinePlaceholder":3093},[9069],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":9071,"children":9072},{"class":2828,"line":3315},[9073,9077,9081,9085,9090],{"type":2543,"tag":2826,"props":9074,"children":9075},{"style":4089},[9076],{"type":2548,"value":7095},{"type":2543,"tag":2826,"props":9078,"children":9079},{"style":2971},[9080],{"type":2548,"value":3918},{"type":2543,"tag":2826,"props":9082,"children":9083},{"style":2905},[9084],{"type":2548,"value":7552},{"type":2543,"tag":2826,"props":9086,"children":9087},{"style":2900},[9088],{"type":2548,"value":9089},"challenge",{"type":2543,"tag":2826,"props":9091,"children":9092},{"style":2971},[9093],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":9095,"children":9096},{"class":2828,"line":3348},[9097,9101,9105,9109,9113,9117,9121,9125,9129,9133,9137,9141,9146,9150,9154],{"type":2543,"tag":2826,"props":9098,"children":9099},{"style":4089},[9100],{"type":2548,"value":7184},{"type":2543,"tag":2826,"props":9102,"children":9103},{"style":3062},[9104],{"type":2548,"value":7189},{"type":2543,"tag":2826,"props":9106,"children":9107},{"style":2971},[9108],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":9110,"children":9111},{"style":2905},[9112],{"type":2548,"value":7198},{"type":2543,"tag":2826,"props":9114,"children":9115},{"style":2971},[9116],{"type":2548,"value":7203},{"type":2543,"tag":2826,"props":9118,"children":9119},{"style":2905},[9120],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":9122,"children":9123},{"style":6427},[9124],{"type":2548,"value":7212},{"type":2543,"tag":2826,"props":9126,"children":9127},{"style":2905},[9128],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":9130,"children":9131},{"style":2971},[9132],{"type":2548,"value":7221},{"type":2543,"tag":2826,"props":9134,"children":9135},{"style":2905},[9136],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":9138,"children":9139},{"style":2905},[9140],{"type":2548,"value":4150},{"type":2543,"tag":2826,"props":9142,"children":9143},{"style":2838},[9144],{"type":2548,"value":9145},"Challenge expired",{"type":2543,"tag":2826,"props":9147,"children":9148},{"style":2905},[9149],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":9151,"children":9152},{"style":2905},[9153],{"type":2548,"value":6939},{"type":2543,"tag":2826,"props":9155,"children":9156},{"style":2971},[9157],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":9159,"children":9160},{"class":2828,"line":3403},[9161],{"type":2543,"tag":2826,"props":9162,"children":9163},{"emptyLinePlaceholder":3093},[9164],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":9166,"children":9167},{"class":2828,"line":3412},[9168,9172],{"type":2543,"tag":2826,"props":9169,"children":9170},{"style":4089},[9171],{"type":2548,"value":5430},{"type":2543,"tag":2826,"props":9173,"children":9174},{"style":2900},[9175],{"type":2548,"value":9176}," challenge\n",{"type":2543,"tag":2826,"props":9178,"children":9179},{"class":2828,"line":2436},[9180],{"type":2543,"tag":2826,"props":9181,"children":9182},{"style":2905},[9183],{"type":2548,"value":4167},{"type":2543,"tag":2826,"props":9185,"children":9186},{"class":2828,"line":3480},[9187,9191,9195,9199,9203,9207,9211,9216,9220],{"type":2543,"tag":2826,"props":9188,"children":9189},{"style":2977},[9190],{"type":2548,"value":5291},{"type":2543,"tag":2826,"props":9192,"children":9193},{"style":2971},[9194],{"type":2548,"value":5296},{"type":2543,"tag":2826,"props":9196,"children":9197},{"style":2905},[9198],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":9200,"children":9201},{"style":3921},[9202],{"type":2548,"value":5305},{"type":2543,"tag":2826,"props":9204,"children":9205},{"style":2905},[9206],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":9208,"children":9209},{"style":2905},[9210],{"type":2548,"value":2998},{"type":2543,"tag":2826,"props":9212,"children":9213},{"style":3921},[9214],{"type":2548,"value":9215}," authenticator",{"type":2543,"tag":2826,"props":9217,"children":9218},{"style":2905},[9219],{"type":2548,"value":3987},{"type":2543,"tag":2826,"props":9221,"children":9222},{"style":2905},[9223],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":9225,"children":9226},{"class":2828,"line":3750},[9227],{"type":2543,"tag":2826,"props":9228,"children":9229},{"style":2891},[9230],{"type":2548,"value":9231},"    \u002F\u002F ...\n",{"type":2543,"tag":2826,"props":9233,"children":9234},{"class":2828,"line":3758},[9235],{"type":2543,"tag":2826,"props":9236,"children":9237},{"style":2905},[9238],{"type":2548,"value":4167},{"type":2543,"tag":2826,"props":9240,"children":9241},{"class":2828,"line":3767},[9242,9246],{"type":2543,"tag":2826,"props":9243,"children":9244},{"style":2905},[9245],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":9247,"children":9248},{"style":2900},[9249],{"type":2548,"value":4269},{"type":2543,"tag":2550,"props":9251,"children":9252},{},[9253],{"type":2548,"value":9254},"On the frontend it is as simple as:",{"type":2543,"tag":2816,"props":9256,"children":9258},{"className":2954,"code":9257,"language":2956,"meta":2416,"style":2416},"\u003Cscript setup lang=\"ts\">\nconst { register, authenticate } = useWebAuthn({\n  registerEndpoint: '\u002Fapi\u002Fwebauthn\u002Fregister', \u002F\u002F Default\n  authenticateEndpoint: '\u002Fapi\u002Fwebauthn\u002Fauthenticate', \u002F\u002F Default\n})\nconst { fetch: fetchUserSession } = useUserSession()\n\nconst userName = ref('')\nasync function signUp() {\n  await register({ userName: userName.value })\n    .then(fetchUserSession) \u002F\u002F refetch the user session\n}\n\nasync function signIn() {\n  await authenticate(userName.value)\n    .then(fetchUserSession) \u002F\u002F refetch the user session\n}\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cform @submit.prevent=\"signUp\">\n    \u003Cinput v-model=\"userName\" placeholder=\"Email or username\" \u002F>\n    \u003Cbutton type=\"submit\">Sign up\u003C\u002Fbutton>\n  \u003C\u002Fform>\n  \u003Cform @submit.prevent=\"signIn\">\n    \u003Cinput v-model=\"userName\" placeholder=\"Email or username\" \u002F>\n    \u003Cbutton type=\"submit\">Sign in\u003C\u002Fbutton>\n  \u003C\u002Fform>\n\u003C\u002Ftemplate>\n",[9259],{"type":2543,"tag":2688,"props":9260,"children":9261},{"__ignoreMap":2416},[9262,9302,9348,9382,9415,9426,9466,9473,9507,9533,9582,9613,9620,9627,9651,9683,9710,9717,9732,9739,9754,9792,9852,9906,9921,9957,10012,10064,10079],{"type":2543,"tag":2826,"props":9263,"children":9264},{"class":2828,"line":2502},[9265,9269,9273,9277,9282,9286,9290,9294,9298],{"type":2543,"tag":2826,"props":9266,"children":9267},{"style":2905},[9268],{"type":2548,"value":2968},{"type":2543,"tag":2826,"props":9270,"children":9271},{"style":2971},[9272],{"type":2548,"value":2974},{"type":2543,"tag":2826,"props":9274,"children":9275},{"style":2977},[9276],{"type":2548,"value":2980},{"type":2543,"tag":2826,"props":9278,"children":9279},{"style":2977},[9280],{"type":2548,"value":9281}," lang",{"type":2543,"tag":2826,"props":9283,"children":9284},{"style":2905},[9285],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":9287,"children":9288},{"style":2905},[9289],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":9291,"children":9292},{"style":2838},[9293],{"type":2548,"value":3507},{"type":2543,"tag":2826,"props":9295,"children":9296},{"style":2905},[9297],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":9299,"children":9300},{"style":2905},[9301],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":9303,"children":9304},{"class":2828,"line":2468},[9305,9309,9313,9318,9322,9327,9331,9335,9340,9344],{"type":2543,"tag":2826,"props":9306,"children":9307},{"style":2977},[9308],{"type":2548,"value":2993},{"type":2543,"tag":2826,"props":9310,"children":9311},{"style":2905},[9312],{"type":2548,"value":2998},{"type":2543,"tag":2826,"props":9314,"children":9315},{"style":2900},[9316],{"type":2548,"value":9317}," register",{"type":2543,"tag":2826,"props":9319,"children":9320},{"style":2905},[9321],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":9323,"children":9324},{"style":2900},[9325],{"type":2548,"value":9326}," authenticate ",{"type":2543,"tag":2826,"props":9328,"children":9329},{"style":2905},[9330],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":9332,"children":9333},{"style":2905},[9334],{"type":2548,"value":3059},{"type":2543,"tag":2826,"props":9336,"children":9337},{"style":3062},[9338],{"type":2548,"value":9339}," useWebAuthn",{"type":2543,"tag":2826,"props":9341,"children":9342},{"style":2900},[9343],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":9345,"children":9346},{"style":2905},[9347],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":9349,"children":9350},{"class":2828,"line":2452},[9351,9356,9360,9364,9369,9373,9377],{"type":2543,"tag":2826,"props":9352,"children":9353},{"style":2971},[9354],{"type":2548,"value":9355},"  registerEndpoint",{"type":2543,"tag":2826,"props":9357,"children":9358},{"style":2905},[9359],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":9361,"children":9362},{"style":2905},[9363],{"type":2548,"value":4150},{"type":2543,"tag":2826,"props":9365,"children":9366},{"style":2838},[9367],{"type":2548,"value":9368},"\u002Fapi\u002Fwebauthn\u002Fregister",{"type":2543,"tag":2826,"props":9370,"children":9371},{"style":2905},[9372],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":9374,"children":9375},{"style":2905},[9376],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":9378,"children":9379},{"style":2891},[9380],{"type":2548,"value":9381}," \u002F\u002F Default\n",{"type":2543,"tag":2826,"props":9383,"children":9384},{"class":2828,"line":3089},[9385,9390,9394,9398,9403,9407,9411],{"type":2543,"tag":2826,"props":9386,"children":9387},{"style":2971},[9388],{"type":2548,"value":9389},"  authenticateEndpoint",{"type":2543,"tag":2826,"props":9391,"children":9392},{"style":2905},[9393],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":9395,"children":9396},{"style":2905},[9397],{"type":2548,"value":4150},{"type":2543,"tag":2826,"props":9399,"children":9400},{"style":2838},[9401],{"type":2548,"value":9402},"\u002Fapi\u002Fwebauthn\u002Fauthenticate",{"type":2543,"tag":2826,"props":9404,"children":9405},{"style":2905},[9406],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":9408,"children":9409},{"style":2905},[9410],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":9412,"children":9413},{"style":2891},[9414],{"type":2548,"value":9381},{"type":2543,"tag":2826,"props":9416,"children":9417},{"class":2828,"line":3099},[9418,9422],{"type":2543,"tag":2826,"props":9419,"children":9420},{"style":2905},[9421],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":9423,"children":9424},{"style":2900},[9425],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":9427,"children":9428},{"class":2828,"line":3116},[9429,9433,9437,9441,9445,9450,9454,9458,9462],{"type":2543,"tag":2826,"props":9430,"children":9431},{"style":2977},[9432],{"type":2548,"value":2993},{"type":2543,"tag":2826,"props":9434,"children":9435},{"style":2905},[9436],{"type":2548,"value":2998},{"type":2543,"tag":2826,"props":9438,"children":9439},{"style":2971},[9440],{"type":2548,"value":3031},{"type":2543,"tag":2826,"props":9442,"children":9443},{"style":2905},[9444],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":9446,"children":9447},{"style":2900},[9448],{"type":2548,"value":9449}," fetchUserSession ",{"type":2543,"tag":2826,"props":9451,"children":9452},{"style":2905},[9453],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":9455,"children":9456},{"style":2905},[9457],{"type":2548,"value":3059},{"type":2543,"tag":2826,"props":9459,"children":9460},{"style":3062},[9461],{"type":2548,"value":3065},{"type":2543,"tag":2826,"props":9463,"children":9464},{"style":2900},[9465],{"type":2548,"value":3070},{"type":2543,"tag":2826,"props":9467,"children":9468},{"class":2828,"line":2448},[9469],{"type":2543,"tag":2826,"props":9470,"children":9471},{"emptyLinePlaceholder":3093},[9472],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":9474,"children":9475},{"class":2828,"line":2444},[9476,9480,9485,9489,9494,9498,9503],{"type":2543,"tag":2826,"props":9477,"children":9478},{"style":2977},[9479],{"type":2548,"value":2993},{"type":2543,"tag":2826,"props":9481,"children":9482},{"style":2900},[9483],{"type":2548,"value":9484}," userName ",{"type":2543,"tag":2826,"props":9486,"children":9487},{"style":2905},[9488],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":9490,"children":9491},{"style":3062},[9492],{"type":2548,"value":9493}," ref",{"type":2543,"tag":2826,"props":9495,"children":9496},{"style":2900},[9497],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":9499,"children":9500},{"style":2905},[9501],{"type":2548,"value":9502},"''",{"type":2543,"tag":2826,"props":9504,"children":9505},{"style":2900},[9506],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":9508,"children":9509},{"class":2828,"line":2440},[9510,9515,9520,9525,9529],{"type":2543,"tag":2826,"props":9511,"children":9512},{"style":2977},[9513],{"type":2548,"value":9514},"async",{"type":2543,"tag":2826,"props":9516,"children":9517},{"style":2977},[9518],{"type":2548,"value":9519}," function",{"type":2543,"tag":2826,"props":9521,"children":9522},{"style":3062},[9523],{"type":2548,"value":9524}," signUp",{"type":2543,"tag":2826,"props":9526,"children":9527},{"style":2905},[9528],{"type":2548,"value":7334},{"type":2543,"tag":2826,"props":9530,"children":9531},{"style":2905},[9532],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":9534,"children":9535},{"class":2828,"line":3278},[9536,9541,9545,9549,9553,9557,9561,9565,9569,9574,9578],{"type":2543,"tag":2826,"props":9537,"children":9538},{"style":4089},[9539],{"type":2548,"value":9540},"  await",{"type":2543,"tag":2826,"props":9542,"children":9543},{"style":3062},[9544],{"type":2548,"value":9317},{"type":2543,"tag":2826,"props":9546,"children":9547},{"style":2971},[9548],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":9550,"children":9551},{"style":2905},[9552],{"type":2548,"value":7198},{"type":2543,"tag":2826,"props":9554,"children":9555},{"style":2971},[9556],{"type":2548,"value":7941},{"type":2543,"tag":2826,"props":9558,"children":9559},{"style":2905},[9560],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":9562,"children":9563},{"style":2900},[9564],{"type":2548,"value":7941},{"type":2543,"tag":2826,"props":9566,"children":9567},{"style":2905},[9568],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":9570,"children":9571},{"style":2900},[9572],{"type":2548,"value":9573},"value",{"type":2543,"tag":2826,"props":9575,"children":9576},{"style":2905},[9577],{"type":2548,"value":6939},{"type":2543,"tag":2826,"props":9579,"children":9580},{"style":2971},[9581],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":9583,"children":9584},{"class":2828,"line":2531},[9585,9590,9595,9599,9604,9608],{"type":2543,"tag":2826,"props":9586,"children":9587},{"style":2905},[9588],{"type":2548,"value":9589},"    .",{"type":2543,"tag":2826,"props":9591,"children":9592},{"style":3062},[9593],{"type":2548,"value":9594},"then",{"type":2543,"tag":2826,"props":9596,"children":9597},{"style":2971},[9598],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":9600,"children":9601},{"style":2900},[9602],{"type":2548,"value":9603},"fetchUserSession",{"type":2543,"tag":2826,"props":9605,"children":9606},{"style":2971},[9607],{"type":2548,"value":7172},{"type":2543,"tag":2826,"props":9609,"children":9610},{"style":2891},[9611],{"type":2548,"value":9612},"\u002F\u002F refetch the user session\n",{"type":2543,"tag":2826,"props":9614,"children":9615},{"class":2828,"line":3315},[9616],{"type":2543,"tag":2826,"props":9617,"children":9618},{"style":2905},[9619],{"type":2548,"value":4005},{"type":2543,"tag":2826,"props":9621,"children":9622},{"class":2828,"line":3348},[9623],{"type":2543,"tag":2826,"props":9624,"children":9625},{"emptyLinePlaceholder":3093},[9626],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":9628,"children":9629},{"class":2828,"line":3403},[9630,9634,9638,9643,9647],{"type":2543,"tag":2826,"props":9631,"children":9632},{"style":2977},[9633],{"type":2548,"value":9514},{"type":2543,"tag":2826,"props":9635,"children":9636},{"style":2977},[9637],{"type":2548,"value":9519},{"type":2543,"tag":2826,"props":9639,"children":9640},{"style":3062},[9641],{"type":2548,"value":9642}," signIn",{"type":2543,"tag":2826,"props":9644,"children":9645},{"style":2905},[9646],{"type":2548,"value":7334},{"type":2543,"tag":2826,"props":9648,"children":9649},{"style":2905},[9650],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":9652,"children":9653},{"class":2828,"line":3412},[9654,9658,9663,9667,9671,9675,9679],{"type":2543,"tag":2826,"props":9655,"children":9656},{"style":4089},[9657],{"type":2548,"value":9540},{"type":2543,"tag":2826,"props":9659,"children":9660},{"style":3062},[9661],{"type":2548,"value":9662}," authenticate",{"type":2543,"tag":2826,"props":9664,"children":9665},{"style":2971},[9666],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":9668,"children":9669},{"style":2900},[9670],{"type":2548,"value":7167},{"type":2543,"tag":2826,"props":9672,"children":9673},{"style":2905},[9674],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":9676,"children":9677},{"style":2900},[9678],{"type":2548,"value":9573},{"type":2543,"tag":2826,"props":9680,"children":9681},{"style":2971},[9682],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":9684,"children":9685},{"class":2828,"line":2436},[9686,9690,9694,9698,9702,9706],{"type":2543,"tag":2826,"props":9687,"children":9688},{"style":2905},[9689],{"type":2548,"value":9589},{"type":2543,"tag":2826,"props":9691,"children":9692},{"style":3062},[9693],{"type":2548,"value":9594},{"type":2543,"tag":2826,"props":9695,"children":9696},{"style":2971},[9697],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":9699,"children":9700},{"style":2900},[9701],{"type":2548,"value":9603},{"type":2543,"tag":2826,"props":9703,"children":9704},{"style":2971},[9705],{"type":2548,"value":7172},{"type":2543,"tag":2826,"props":9707,"children":9708},{"style":2891},[9709],{"type":2548,"value":9612},{"type":2543,"tag":2826,"props":9711,"children":9712},{"class":2828,"line":3480},[9713],{"type":2543,"tag":2826,"props":9714,"children":9715},{"style":2905},[9716],{"type":2548,"value":4005},{"type":2543,"tag":2826,"props":9718,"children":9719},{"class":2828,"line":3750},[9720,9724,9728],{"type":2543,"tag":2826,"props":9721,"children":9722},{"style":2905},[9723],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":9725,"children":9726},{"style":2971},[9727],{"type":2548,"value":2974},{"type":2543,"tag":2826,"props":9729,"children":9730},{"style":2905},[9731],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":9733,"children":9734},{"class":2828,"line":3758},[9735],{"type":2543,"tag":2826,"props":9736,"children":9737},{"emptyLinePlaceholder":3093},[9738],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":9740,"children":9741},{"class":2828,"line":3767},[9742,9746,9750],{"type":2543,"tag":2826,"props":9743,"children":9744},{"style":2905},[9745],{"type":2548,"value":2968},{"type":2543,"tag":2826,"props":9747,"children":9748},{"style":2971},[9749],{"type":2548,"value":3109},{"type":2543,"tag":2826,"props":9751,"children":9752},{"style":2905},[9753],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":9755,"children":9756},{"class":2828,"line":3775},[9757,9761,9766,9771,9775,9779,9784,9788],{"type":2543,"tag":2826,"props":9758,"children":9759},{"style":2905},[9760],{"type":2548,"value":3122},{"type":2543,"tag":2826,"props":9762,"children":9763},{"style":2971},[9764],{"type":2548,"value":9765},"form",{"type":2543,"tag":2826,"props":9767,"children":9768},{"style":2977},[9769],{"type":2548,"value":9770}," @submit.prevent",{"type":2543,"tag":2826,"props":9772,"children":9773},{"style":2905},[9774],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":9776,"children":9777},{"style":2905},[9778],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":9780,"children":9781},{"style":2838},[9782],{"type":2548,"value":9783},"signUp",{"type":2543,"tag":2826,"props":9785,"children":9786},{"style":2905},[9787],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":9789,"children":9790},{"style":2905},[9791],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":9793,"children":9794},{"class":2828,"line":3816},[9795,9799,9804,9809,9813,9817,9821,9825,9830,9834,9838,9843,9847],{"type":2543,"tag":2826,"props":9796,"children":9797},{"style":2905},[9798],{"type":2548,"value":3162},{"type":2543,"tag":2826,"props":9800,"children":9801},{"style":2971},[9802],{"type":2548,"value":9803},"input",{"type":2543,"tag":2826,"props":9805,"children":9806},{"style":2977},[9807],{"type":2548,"value":9808}," v-model",{"type":2543,"tag":2826,"props":9810,"children":9811},{"style":2905},[9812],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":9814,"children":9815},{"style":2905},[9816],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":9818,"children":9819},{"style":2838},[9820],{"type":2548,"value":7167},{"type":2543,"tag":2826,"props":9822,"children":9823},{"style":2905},[9824],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":9826,"children":9827},{"style":2977},[9828],{"type":2548,"value":9829}," placeholder",{"type":2543,"tag":2826,"props":9831,"children":9832},{"style":2905},[9833],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":9835,"children":9836},{"style":2905},[9837],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":9839,"children":9840},{"style":2838},[9841],{"type":2548,"value":9842},"Email or username",{"type":2543,"tag":2826,"props":9844,"children":9845},{"style":2905},[9846],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":9848,"children":9849},{"style":2905},[9850],{"type":2548,"value":9851}," \u002F>\n",{"type":2543,"tag":2826,"props":9853,"children":9854},{"class":2828,"line":3824},[9855,9859,9863,9868,9872,9876,9881,9885,9889,9894,9898,9902],{"type":2543,"tag":2826,"props":9856,"children":9857},{"style":2905},[9858],{"type":2548,"value":3162},{"type":2543,"tag":2826,"props":9860,"children":9861},{"style":2971},[9862],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":9864,"children":9865},{"style":2977},[9866],{"type":2548,"value":9867}," type",{"type":2543,"tag":2826,"props":9869,"children":9870},{"style":2905},[9871],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":9873,"children":9874},{"style":2905},[9875],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":9877,"children":9878},{"style":2838},[9879],{"type":2548,"value":9880},"submit",{"type":2543,"tag":2826,"props":9882,"children":9883},{"style":2905},[9884],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":9886,"children":9887},{"style":2905},[9888],{"type":2548,"value":3171},{"type":2543,"tag":2826,"props":9890,"children":9891},{"style":2900},[9892],{"type":2548,"value":9893},"Sign up",{"type":2543,"tag":2826,"props":9895,"children":9896},{"style":2905},[9897],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":9899,"children":9900},{"style":2971},[9901],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":9903,"children":9904},{"style":2905},[9905],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":9907,"children":9908},{"class":2828,"line":3833},[9909,9913,9917],{"type":2543,"tag":2826,"props":9910,"children":9911},{"style":2905},[9912],{"type":2548,"value":3284},{"type":2543,"tag":2826,"props":9914,"children":9915},{"style":2971},[9916],{"type":2548,"value":9765},{"type":2543,"tag":2826,"props":9918,"children":9919},{"style":2905},[9920],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":9922,"children":9923},{"class":2828,"line":3841},[9924,9928,9932,9936,9940,9944,9949,9953],{"type":2543,"tag":2826,"props":9925,"children":9926},{"style":2905},[9927],{"type":2548,"value":3122},{"type":2543,"tag":2826,"props":9929,"children":9930},{"style":2971},[9931],{"type":2548,"value":9765},{"type":2543,"tag":2826,"props":9933,"children":9934},{"style":2977},[9935],{"type":2548,"value":9770},{"type":2543,"tag":2826,"props":9937,"children":9938},{"style":2905},[9939],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":9941,"children":9942},{"style":2905},[9943],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":9945,"children":9946},{"style":2838},[9947],{"type":2548,"value":9948},"signIn",{"type":2543,"tag":2826,"props":9950,"children":9951},{"style":2905},[9952],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":9954,"children":9955},{"style":2905},[9956],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":9958,"children":9959},{"class":2828,"line":3878},[9960,9964,9968,9972,9976,9980,9984,9988,9992,9996,10000,10004,10008],{"type":2543,"tag":2826,"props":9961,"children":9962},{"style":2905},[9963],{"type":2548,"value":3162},{"type":2543,"tag":2826,"props":9965,"children":9966},{"style":2971},[9967],{"type":2548,"value":9803},{"type":2543,"tag":2826,"props":9969,"children":9970},{"style":2977},[9971],{"type":2548,"value":9808},{"type":2543,"tag":2826,"props":9973,"children":9974},{"style":2905},[9975],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":9977,"children":9978},{"style":2905},[9979],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":9981,"children":9982},{"style":2838},[9983],{"type":2548,"value":7167},{"type":2543,"tag":2826,"props":9985,"children":9986},{"style":2905},[9987],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":9989,"children":9990},{"style":2977},[9991],{"type":2548,"value":9829},{"type":2543,"tag":2826,"props":9993,"children":9994},{"style":2905},[9995],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":9997,"children":9998},{"style":2905},[9999],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":10001,"children":10002},{"style":2838},[10003],{"type":2548,"value":9842},{"type":2543,"tag":2826,"props":10005,"children":10006},{"style":2905},[10007],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":10009,"children":10010},{"style":2905},[10011],{"type":2548,"value":9851},{"type":2543,"tag":2826,"props":10013,"children":10014},{"class":2828,"line":3886},[10015,10019,10023,10027,10031,10035,10039,10043,10047,10052,10056,10060],{"type":2543,"tag":2826,"props":10016,"children":10017},{"style":2905},[10018],{"type":2548,"value":3162},{"type":2543,"tag":2826,"props":10020,"children":10021},{"style":2971},[10022],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":10024,"children":10025},{"style":2977},[10026],{"type":2548,"value":9867},{"type":2543,"tag":2826,"props":10028,"children":10029},{"style":2905},[10030],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":10032,"children":10033},{"style":2905},[10034],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":10036,"children":10037},{"style":2838},[10038],{"type":2548,"value":9880},{"type":2543,"tag":2826,"props":10040,"children":10041},{"style":2905},[10042],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":10044,"children":10045},{"style":2905},[10046],{"type":2548,"value":3171},{"type":2543,"tag":2826,"props":10048,"children":10049},{"style":2900},[10050],{"type":2548,"value":10051},"Sign in",{"type":2543,"tag":2826,"props":10053,"children":10054},{"style":2905},[10055],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":10057,"children":10058},{"style":2971},[10059],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":10061,"children":10062},{"style":2905},[10063],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":10065,"children":10066},{"class":2828,"line":3895},[10067,10071,10075],{"type":2543,"tag":2826,"props":10068,"children":10069},{"style":2905},[10070],{"type":2548,"value":3284},{"type":2543,"tag":2826,"props":10072,"children":10073},{"style":2971},[10074],{"type":2548,"value":9765},{"type":2543,"tag":2826,"props":10076,"children":10077},{"style":2905},[10078],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":10080,"children":10081},{"class":2828,"line":3903},[10082,10086,10090],{"type":2543,"tag":2826,"props":10083,"children":10084},{"style":2905},[10085],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":10087,"children":10088},{"style":2971},[10089],{"type":2548,"value":3109},{"type":2543,"tag":2826,"props":10091,"children":10092},{"style":2905},[10093],{"type":2548,"value":2985},{"type":2543,"tag":2550,"props":10095,"children":10096},{},[10097,10099,10110],{"type":2548,"value":10098},"Take a look at the ",{"type":2543,"tag":2554,"props":10100,"children":10103},{"href":10101,"rel":10102},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils\u002Fblob\u002Fmain\u002Fplayground\u002Fcomponents\u002FWebAuthnModal.vue",[2558],[10104],{"type":2543,"tag":2688,"props":10105,"children":10107},{"className":10106},[],[10108],{"type":2548,"value":10109},"WebAuthnModal.vue",{"type":2548,"value":10111}," for a full example.",{"type":2543,"tag":4933,"props":10113,"children":10115},{"id":10114},"demo",[10116],{"type":2548,"value":10117},"Demo",{"type":2543,"tag":2550,"props":10119,"children":10120},{},[10121,10123,10129,10131,10138,10139,10146],{"type":2548,"value":10122},"A full demo can be found on ",{"type":2543,"tag":2554,"props":10124,"children":10127},{"href":10125,"rel":10126},"https:\u002F\u002Ftodo-passkeys.nuxt.dev",[2558],[10128],{"type":2548,"value":10125},{"type":2548,"value":10130}," using ",{"type":2543,"tag":2554,"props":10132,"children":10135},{"href":10133,"rel":10134},"https:\u002F\u002Form.drizzle.team\u002F",[2558],[10136],{"type":2548,"value":10137},"Drizzle ORM",{"type":2548,"value":5659},{"type":2543,"tag":2554,"props":10140,"children":10143},{"href":10141,"rel":10142},"https:\u002F\u002Fhub.nuxt.com",[2558],[10144],{"type":2548,"value":10145},"NuxtHub",{"type":2548,"value":2781},{"type":2543,"tag":2550,"props":10148,"children":10149},{},[10150,10152,10157],{"type":2548,"value":10151},"The source code of the demo is available on ",{"type":2543,"tag":2554,"props":10153,"children":10155},{"href":2628,"rel":10154},[2558],[10156],{"type":2548,"value":2628},{"type":2548,"value":2781},{"type":2543,"tag":2946,"props":10159,"children":10161},{"id":10160},"extend-session",[10162],{"type":2548,"value":10163},"Extend Session",{"type":2543,"tag":2550,"props":10165,"children":10166},{},[10167],{"type":2548,"value":10168},"We leverage hooks to let you extend the session data with your own data or log when the user clears the session.",{"type":2543,"tag":2816,"props":10170,"children":10172},{"className":3505,"code":10171,"language":3507,"meta":2416,"style":2416},"\u002F\u002F server\u002Fplugins\u002Fsession.ts\nexport default defineNitroPlugin(() => {\n  \u002F\u002F Called when the session is fetched during SSR for the Vue composable (\u002Fapi\u002F_auth\u002Fsession)\n  \u002F\u002F Or when we call useUserSession().fetch()\n  sessionHooks.hook('fetch', async (session, event) => {\n    \u002F\u002F extend User Session by calling your database\n    \u002F\u002F or\n    \u002F\u002F throw createError({ ... }) if session is invalid for example\n  })\n\n  \u002F\u002F Called when we call useUserSession().clear() or clearUserSession(event)\n  sessionHooks.hook('clear', async (session, event) => {\n    \u002F\u002F Log that user logged out\n  })\n})\n",[10173],{"type":2543,"tag":2688,"props":10174,"children":10175},{"__ignoreMap":2416},[10176,10184,10216,10224,10232,10303,10311,10319,10327,10339,10346,10354,10421,10429,10440],{"type":2543,"tag":2826,"props":10177,"children":10178},{"class":2828,"line":2502},[10179],{"type":2543,"tag":2826,"props":10180,"children":10181},{"style":2891},[10182],{"type":2548,"value":10183},"\u002F\u002F server\u002Fplugins\u002Fsession.ts\n",{"type":2543,"tag":2826,"props":10185,"children":10186},{"class":2828,"line":2468},[10187,10191,10195,10200,10204,10208,10212],{"type":2543,"tag":2826,"props":10188,"children":10189},{"style":4089},[10190],{"type":2548,"value":4623},{"type":2543,"tag":2826,"props":10192,"children":10193},{"style":4089},[10194],{"type":2548,"value":4738},{"type":2543,"tag":2826,"props":10196,"children":10197},{"style":3062},[10198],{"type":2548,"value":10199}," defineNitroPlugin",{"type":2543,"tag":2826,"props":10201,"children":10202},{"style":2900},[10203],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":10205,"children":10206},{"style":2905},[10207],{"type":2548,"value":7334},{"type":2543,"tag":2826,"props":10209,"children":10210},{"style":2977},[10211],{"type":2548,"value":3795},{"type":2543,"tag":2826,"props":10213,"children":10214},{"style":2905},[10215],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":10217,"children":10218},{"class":2828,"line":2452},[10219],{"type":2543,"tag":2826,"props":10220,"children":10221},{"style":2891},[10222],{"type":2548,"value":10223},"  \u002F\u002F Called when the session is fetched during SSR for the Vue composable (\u002Fapi\u002F_auth\u002Fsession)\n",{"type":2543,"tag":2826,"props":10225,"children":10226},{"class":2828,"line":3089},[10227],{"type":2543,"tag":2826,"props":10228,"children":10229},{"style":2891},[10230],{"type":2548,"value":10231},"  \u002F\u002F Or when we call useUserSession().fetch()\n",{"type":2543,"tag":2826,"props":10233,"children":10234},{"class":2828,"line":3099},[10235,10240,10244,10249,10253,10257,10262,10266,10270,10275,10279,10283,10287,10291,10295,10299],{"type":2543,"tag":2826,"props":10236,"children":10237},{"style":2900},[10238],{"type":2548,"value":10239},"  sessionHooks",{"type":2543,"tag":2826,"props":10241,"children":10242},{"style":2905},[10243],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":10245,"children":10246},{"style":3062},[10247],{"type":2548,"value":10248},"hook",{"type":2543,"tag":2826,"props":10250,"children":10251},{"style":2971},[10252],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":10254,"children":10255},{"style":2905},[10256],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":10258,"children":10259},{"style":2838},[10260],{"type":2548,"value":10261},"fetch",{"type":2543,"tag":2826,"props":10263,"children":10264},{"style":2905},[10265],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":10267,"children":10268},{"style":2905},[10269],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":10271,"children":10272},{"style":2977},[10273],{"type":2548,"value":10274}," async",{"type":2543,"tag":2826,"props":10276,"children":10277},{"style":2905},[10278],{"type":2548,"value":3918},{"type":2543,"tag":2826,"props":10280,"children":10281},{"style":3921},[10282],{"type":2548,"value":7104},{"type":2543,"tag":2826,"props":10284,"children":10285},{"style":2905},[10286],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":10288,"children":10289},{"style":3921},[10290],{"type":2548,"value":7019},{"type":2543,"tag":2826,"props":10292,"children":10293},{"style":2905},[10294],{"type":2548,"value":5509},{"type":2543,"tag":2826,"props":10296,"children":10297},{"style":2977},[10298],{"type":2548,"value":3795},{"type":2543,"tag":2826,"props":10300,"children":10301},{"style":2905},[10302],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":10304,"children":10305},{"class":2828,"line":3116},[10306],{"type":2543,"tag":2826,"props":10307,"children":10308},{"style":2891},[10309],{"type":2548,"value":10310},"    \u002F\u002F extend User Session by calling your database\n",{"type":2543,"tag":2826,"props":10312,"children":10313},{"class":2828,"line":2448},[10314],{"type":2543,"tag":2826,"props":10315,"children":10316},{"style":2891},[10317],{"type":2548,"value":10318},"    \u002F\u002F or\n",{"type":2543,"tag":2826,"props":10320,"children":10321},{"class":2828,"line":2444},[10322],{"type":2543,"tag":2826,"props":10323,"children":10324},{"style":2891},[10325],{"type":2548,"value":10326},"    \u002F\u002F throw createError({ ... }) if session is invalid for example\n",{"type":2543,"tag":2826,"props":10328,"children":10329},{"class":2828,"line":2440},[10330,10335],{"type":2543,"tag":2826,"props":10331,"children":10332},{"style":2905},[10333],{"type":2548,"value":10334},"  }",{"type":2543,"tag":2826,"props":10336,"children":10337},{"style":2971},[10338],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":10340,"children":10341},{"class":2828,"line":3278},[10342],{"type":2543,"tag":2826,"props":10343,"children":10344},{"emptyLinePlaceholder":3093},[10345],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":10347,"children":10348},{"class":2828,"line":2531},[10349],{"type":2543,"tag":2826,"props":10350,"children":10351},{"style":2891},[10352],{"type":2548,"value":10353},"  \u002F\u002F Called when we call useUserSession().clear() or clearUserSession(event)\n",{"type":2543,"tag":2826,"props":10355,"children":10356},{"class":2828,"line":3315},[10357,10361,10365,10369,10373,10377,10381,10385,10389,10393,10397,10401,10405,10409,10413,10417],{"type":2543,"tag":2826,"props":10358,"children":10359},{"style":2900},[10360],{"type":2548,"value":10239},{"type":2543,"tag":2826,"props":10362,"children":10363},{"style":2905},[10364],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":10366,"children":10367},{"style":3062},[10368],{"type":2548,"value":10248},{"type":2543,"tag":2826,"props":10370,"children":10371},{"style":2971},[10372],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":10374,"children":10375},{"style":2905},[10376],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":10378,"children":10379},{"style":2838},[10380],{"type":2548,"value":3250},{"type":2543,"tag":2826,"props":10382,"children":10383},{"style":2905},[10384],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":10386,"children":10387},{"style":2905},[10388],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":10390,"children":10391},{"style":2977},[10392],{"type":2548,"value":10274},{"type":2543,"tag":2826,"props":10394,"children":10395},{"style":2905},[10396],{"type":2548,"value":3918},{"type":2543,"tag":2826,"props":10398,"children":10399},{"style":3921},[10400],{"type":2548,"value":7104},{"type":2543,"tag":2826,"props":10402,"children":10403},{"style":2905},[10404],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":10406,"children":10407},{"style":3921},[10408],{"type":2548,"value":7019},{"type":2543,"tag":2826,"props":10410,"children":10411},{"style":2905},[10412],{"type":2548,"value":5509},{"type":2543,"tag":2826,"props":10414,"children":10415},{"style":2977},[10416],{"type":2548,"value":3795},{"type":2543,"tag":2826,"props":10418,"children":10419},{"style":2905},[10420],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":10422,"children":10423},{"class":2828,"line":3348},[10424],{"type":2543,"tag":2826,"props":10425,"children":10426},{"style":2891},[10427],{"type":2548,"value":10428},"    \u002F\u002F Log that user logged out\n",{"type":2543,"tag":2826,"props":10430,"children":10431},{"class":2828,"line":3403},[10432,10436],{"type":2543,"tag":2826,"props":10433,"children":10434},{"style":2905},[10435],{"type":2548,"value":10334},{"type":2543,"tag":2826,"props":10437,"children":10438},{"style":2971},[10439],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":10441,"children":10442},{"class":2828,"line":3412},[10443,10447],{"type":2543,"tag":2826,"props":10444,"children":10445},{"style":2905},[10446],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":10448,"children":10449},{"style":2900},[10450],{"type":2548,"value":4269},{"type":2543,"tag":2634,"props":10452,"children":10454},{"id":10453},"server-side-rendering",[10455],{"type":2548,"value":10456},"Server-Side Rendering",{"type":2543,"tag":2550,"props":10458,"children":10459},{},[10460,10462,10468,10470],{"type":2548,"value":10461},"You can make authenticated requests both from the client and the server. However, you must use ",{"type":2543,"tag":2688,"props":10463,"children":10465},{"className":10464},[],[10466],{"type":2548,"value":10467},"useRequestFetch()",{"type":2548,"value":10469}," to make authenticated requests during SSR if you are not using ",{"type":2543,"tag":2688,"props":10471,"children":10473},{"className":10472},[],[10474],{"type":2548,"value":10475},"useFetch()",{"type":2543,"tag":2816,"props":10477,"children":10479},{"className":2954,"code":10478,"language":2956,"meta":2416,"style":2416},"\u003Cscript setup lang=\"ts\">\n\u002F\u002F When using useAsyncData\nconst { data } = await useAsyncData('team', () => useRequestFetch()('\u002Fapi\u002Fprotected-endpoint'))\n\n\u002F\u002F useFetch will automatically use useRequestFetch during SSR\nconst { data } = await useFetch('\u002Fapi\u002Fprotected-endpoint')\n\u003C\u002Fscript>\n",[10480],{"type":2543,"tag":2688,"props":10481,"children":10482},{"__ignoreMap":2416},[10483,10522,10530,10620,10627,10635,10687],{"type":2543,"tag":2826,"props":10484,"children":10485},{"class":2828,"line":2502},[10486,10490,10494,10498,10502,10506,10510,10514,10518],{"type":2543,"tag":2826,"props":10487,"children":10488},{"style":2905},[10489],{"type":2548,"value":2968},{"type":2543,"tag":2826,"props":10491,"children":10492},{"style":2971},[10493],{"type":2548,"value":2974},{"type":2543,"tag":2826,"props":10495,"children":10496},{"style":2977},[10497],{"type":2548,"value":2980},{"type":2543,"tag":2826,"props":10499,"children":10500},{"style":2977},[10501],{"type":2548,"value":9281},{"type":2543,"tag":2826,"props":10503,"children":10504},{"style":2905},[10505],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":10507,"children":10508},{"style":2905},[10509],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":10511,"children":10512},{"style":2838},[10513],{"type":2548,"value":3507},{"type":2543,"tag":2826,"props":10515,"children":10516},{"style":2905},[10517],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":10519,"children":10520},{"style":2905},[10521],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":10523,"children":10524},{"class":2828,"line":2468},[10525],{"type":2543,"tag":2826,"props":10526,"children":10527},{"style":2891},[10528],{"type":2548,"value":10529},"\u002F\u002F When using useAsyncData\n",{"type":2543,"tag":2826,"props":10531,"children":10532},{"class":2828,"line":2452},[10533,10537,10541,10546,10550,10554,10558,10563,10567,10571,10576,10580,10584,10588,10592,10597,10602,10606,10611,10615],{"type":2543,"tag":2826,"props":10534,"children":10535},{"style":2977},[10536],{"type":2548,"value":2993},{"type":2543,"tag":2826,"props":10538,"children":10539},{"style":2905},[10540],{"type":2548,"value":2998},{"type":2543,"tag":2826,"props":10542,"children":10543},{"style":2900},[10544],{"type":2548,"value":10545}," data ",{"type":2543,"tag":2826,"props":10547,"children":10548},{"style":2905},[10549],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":10551,"children":10552},{"style":2905},[10553],{"type":2548,"value":3059},{"type":2543,"tag":2826,"props":10555,"children":10556},{"style":4089},[10557],{"type":2548,"value":4345},{"type":2543,"tag":2826,"props":10559,"children":10560},{"style":3062},[10561],{"type":2548,"value":10562}," useAsyncData",{"type":2543,"tag":2826,"props":10564,"children":10565},{"style":2900},[10566],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":10568,"children":10569},{"style":2905},[10570],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":10572,"children":10573},{"style":2838},[10574],{"type":2548,"value":10575},"team",{"type":2543,"tag":2826,"props":10577,"children":10578},{"style":2905},[10579],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":10581,"children":10582},{"style":2905},[10583],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":10585,"children":10586},{"style":2905},[10587],{"type":2548,"value":3790},{"type":2543,"tag":2826,"props":10589,"children":10590},{"style":2977},[10591],{"type":2548,"value":3795},{"type":2543,"tag":2826,"props":10593,"children":10594},{"style":3062},[10595],{"type":2548,"value":10596}," useRequestFetch",{"type":2543,"tag":2826,"props":10598,"children":10599},{"style":2900},[10600],{"type":2548,"value":10601},"()(",{"type":2543,"tag":2826,"props":10603,"children":10604},{"style":2905},[10605],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":10607,"children":10608},{"style":2838},[10609],{"type":2548,"value":10610},"\u002Fapi\u002Fprotected-endpoint",{"type":2543,"tag":2826,"props":10612,"children":10613},{"style":2905},[10614],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":10616,"children":10617},{"style":2900},[10618],{"type":2548,"value":10619},"))\n",{"type":2543,"tag":2826,"props":10621,"children":10622},{"class":2828,"line":3089},[10623],{"type":2543,"tag":2826,"props":10624,"children":10625},{"emptyLinePlaceholder":3093},[10626],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":10628,"children":10629},{"class":2828,"line":3099},[10630],{"type":2543,"tag":2826,"props":10631,"children":10632},{"style":2891},[10633],{"type":2548,"value":10634},"\u002F\u002F useFetch will automatically use useRequestFetch during SSR\n",{"type":2543,"tag":2826,"props":10636,"children":10637},{"class":2828,"line":3116},[10638,10642,10646,10650,10654,10658,10662,10667,10671,10675,10679,10683],{"type":2543,"tag":2826,"props":10639,"children":10640},{"style":2977},[10641],{"type":2548,"value":2993},{"type":2543,"tag":2826,"props":10643,"children":10644},{"style":2905},[10645],{"type":2548,"value":2998},{"type":2543,"tag":2826,"props":10647,"children":10648},{"style":2900},[10649],{"type":2548,"value":10545},{"type":2543,"tag":2826,"props":10651,"children":10652},{"style":2905},[10653],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":10655,"children":10656},{"style":2905},[10657],{"type":2548,"value":3059},{"type":2543,"tag":2826,"props":10659,"children":10660},{"style":4089},[10661],{"type":2548,"value":4345},{"type":2543,"tag":2826,"props":10663,"children":10664},{"style":3062},[10665],{"type":2548,"value":10666}," useFetch",{"type":2543,"tag":2826,"props":10668,"children":10669},{"style":2900},[10670],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":10672,"children":10673},{"style":2905},[10674],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":10676,"children":10677},{"style":2838},[10678],{"type":2548,"value":10610},{"type":2543,"tag":2826,"props":10680,"children":10681},{"style":2905},[10682],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":10684,"children":10685},{"style":2900},[10686],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":10688,"children":10689},{"class":2828,"line":2448},[10690,10694,10698],{"type":2543,"tag":2826,"props":10691,"children":10692},{"style":2905},[10693],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":10695,"children":10696},{"style":2971},[10697],{"type":2548,"value":2974},{"type":2543,"tag":2826,"props":10699,"children":10700},{"style":2905},[10701],{"type":2548,"value":2985},{"type":2543,"tag":4007,"props":10703,"children":10704},{},[10705],{"type":2543,"tag":2550,"props":10706,"children":10707},{},[10708,10710,10717,10719,10724],{"type":2548,"value":10709},"There's ",{"type":2543,"tag":2554,"props":10711,"children":10714},{"href":10712,"rel":10713},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fissues\u002F24813",[2558],[10715],{"type":2548,"value":10716},"an open issue",{"type":2548,"value":10718}," to include credentials in ",{"type":2543,"tag":2688,"props":10720,"children":10722},{"className":10721},[],[10723],{"type":2548,"value":762},{"type":2548,"value":10725}," in Nuxt.",{"type":2543,"tag":2634,"props":10727,"children":10729},{"id":10728},"hybrid-rendering",[10730],{"type":2548,"value":2650},{"type":2543,"tag":2550,"props":10732,"children":10733},{},[10734,10736,10749],{"type":2548,"value":10735},"When using ",{"type":2543,"tag":2554,"props":10737,"children":10740},{"href":10738,"rel":10739},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fguide\u002Fconcepts\u002Frendering#hybrid-rendering",[2558],[10741,10743],{"type":2548,"value":10742},"Nuxt ",{"type":2543,"tag":2688,"props":10744,"children":10746},{"className":10745},[],[10747],{"type":2548,"value":10748},"routeRules",{"type":2548,"value":10750}," to prerender or cache your pages, Nuxt Auth Utils will not fetch the user session during prerendering but instead fetch it on the client-side (after hydration).",{"type":2543,"tag":2550,"props":10752,"children":10753},{},[10754],{"type":2548,"value":10755},"This is because the user session is stored in a secure cookie and cannot be accessed during prerendering.",{"type":2543,"tag":2550,"props":10757,"children":10758},{},[10759],{"type":2543,"tag":3498,"props":10760,"children":10761},{},[10762],{"type":2548,"value":10763},"This means that you should not rely on the user session during prerendering.",{"type":2543,"tag":2550,"props":10765,"children":10766},{},[10767,10769,10775,10777,10782],{"type":2548,"value":10768},"You may also choose to instruct Nuxt Auth Utils to fetch the user session only on the client side, with the ",{"type":2543,"tag":2688,"props":10770,"children":10772},{"className":10771},[],[10773],{"type":2548,"value":10774},"loadStrategy",{"type":2548,"value":10776}," option in your ",{"type":2543,"tag":2688,"props":10778,"children":10780},{"className":10779},[],[10781],{"type":2548,"value":244},{"type":2548,"value":3566},{"type":2543,"tag":2816,"props":10784,"children":10786},{"className":3505,"code":10785,"language":3507,"meta":2416,"style":2416},"export default defineNuxtConfig({\n  auth: {\n    loadStrategy: 'client-only'\n  }\n})\n",[10787],{"type":2543,"tag":2688,"props":10788,"children":10789},{"__ignoreMap":2416},[10790,10813,10828,10853,10860],{"type":2543,"tag":2826,"props":10791,"children":10792},{"class":2828,"line":2502},[10793,10797,10801,10805,10809],{"type":2543,"tag":2826,"props":10794,"children":10795},{"style":4089},[10796],{"type":2548,"value":4623},{"type":2543,"tag":2826,"props":10798,"children":10799},{"style":4089},[10800],{"type":2548,"value":4738},{"type":2543,"tag":2826,"props":10802,"children":10803},{"style":3062},[10804],{"type":2548,"value":4743},{"type":2543,"tag":2826,"props":10806,"children":10807},{"style":2900},[10808],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":10810,"children":10811},{"style":2905},[10812],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":10814,"children":10815},{"class":2828,"line":2468},[10816,10820,10824],{"type":2543,"tag":2826,"props":10817,"children":10818},{"style":2971},[10819],{"type":2548,"value":6013},{"type":2543,"tag":2826,"props":10821,"children":10822},{"style":2905},[10823],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":10825,"children":10826},{"style":2905},[10827],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":10829,"children":10830},{"class":2828,"line":2452},[10831,10836,10840,10844,10849],{"type":2543,"tag":2826,"props":10832,"children":10833},{"style":2971},[10834],{"type":2548,"value":10835},"    loadStrategy",{"type":2543,"tag":2826,"props":10837,"children":10838},{"style":2905},[10839],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":10841,"children":10842},{"style":2905},[10843],{"type":2548,"value":4150},{"type":2543,"tag":2826,"props":10845,"children":10846},{"style":2838},[10847],{"type":2548,"value":10848},"client-only",{"type":2543,"tag":2826,"props":10850,"children":10851},{"style":2905},[10852],{"type":2548,"value":4159},{"type":2543,"tag":2826,"props":10854,"children":10855},{"class":2828,"line":3089},[10856],{"type":2543,"tag":2826,"props":10857,"children":10858},{"style":2905},[10859],{"type":2548,"value":4527},{"type":2543,"tag":2826,"props":10861,"children":10862},{"class":2828,"line":3099},[10863,10867],{"type":2543,"tag":2826,"props":10864,"children":10865},{"style":2905},[10866],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":10868,"children":10869},{"style":2900},[10870],{"type":2548,"value":4269},{"type":2543,"tag":2550,"props":10872,"children":10873},{},[10874,10876,10881,10883,10888,10889,10895],{"type":2548,"value":10875},"When using the ",{"type":2543,"tag":2688,"props":10877,"children":10879},{"className":10878},[],[10880],{"type":2548,"value":10848},{"type":2548,"value":10882}," load strategy, the user session can still be manually fetched on the server side by calling ",{"type":2543,"tag":2688,"props":10884,"children":10886},{"className":10885},[],[10887],{"type":2548,"value":10261},{"type":2548,"value":6774},{"type":2543,"tag":2688,"props":10890,"children":10892},{"className":10891},[],[10893],{"type":2548,"value":10894},"useUserSession",{"type":2548,"value":10896}," composable.",{"type":2543,"tag":2946,"props":10898,"children":10900},{"id":10899},"disable-session-loading",[10901],{"type":2548,"value":10902},"Disable session loading",{"type":2543,"tag":2550,"props":10904,"children":10905},{},[10906,10908,10913,10914,10919],{"type":2548,"value":10907},"You may also choose to disable session loading entirely, with the ",{"type":2543,"tag":2688,"props":10909,"children":10911},{"className":10910},[],[10912],{"type":2548,"value":10774},{"type":2548,"value":10776},{"type":2543,"tag":2688,"props":10915,"children":10917},{"className":10916},[],[10918],{"type":2548,"value":244},{"type":2548,"value":3566},{"type":2543,"tag":2816,"props":10921,"children":10923},{"className":3505,"code":10922,"language":3507,"meta":2416,"style":2416},"export default defineNuxtConfig({\n  auth: {\n    loadStrategy: 'none'\n  }\n})\n",[10924],{"type":2543,"tag":2688,"props":10925,"children":10926},{"__ignoreMap":2416},[10927,10950,10965,10989,10996],{"type":2543,"tag":2826,"props":10928,"children":10929},{"class":2828,"line":2502},[10930,10934,10938,10942,10946],{"type":2543,"tag":2826,"props":10931,"children":10932},{"style":4089},[10933],{"type":2548,"value":4623},{"type":2543,"tag":2826,"props":10935,"children":10936},{"style":4089},[10937],{"type":2548,"value":4738},{"type":2543,"tag":2826,"props":10939,"children":10940},{"style":3062},[10941],{"type":2548,"value":4743},{"type":2543,"tag":2826,"props":10943,"children":10944},{"style":2900},[10945],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":10947,"children":10948},{"style":2905},[10949],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":10951,"children":10952},{"class":2828,"line":2468},[10953,10957,10961],{"type":2543,"tag":2826,"props":10954,"children":10955},{"style":2971},[10956],{"type":2548,"value":6013},{"type":2543,"tag":2826,"props":10958,"children":10959},{"style":2905},[10960],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":10962,"children":10963},{"style":2905},[10964],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":10966,"children":10967},{"class":2828,"line":2452},[10968,10972,10976,10980,10985],{"type":2543,"tag":2826,"props":10969,"children":10970},{"style":2971},[10971],{"type":2548,"value":10835},{"type":2543,"tag":2826,"props":10973,"children":10974},{"style":2905},[10975],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":10977,"children":10978},{"style":2905},[10979],{"type":2548,"value":4150},{"type":2543,"tag":2826,"props":10981,"children":10982},{"style":2838},[10983],{"type":2548,"value":10984},"none",{"type":2543,"tag":2826,"props":10986,"children":10987},{"style":2905},[10988],{"type":2548,"value":4159},{"type":2543,"tag":2826,"props":10990,"children":10991},{"class":2828,"line":3089},[10992],{"type":2543,"tag":2826,"props":10993,"children":10994},{"style":2905},[10995],{"type":2548,"value":4527},{"type":2543,"tag":2826,"props":10997,"children":10998},{"class":2828,"line":3099},[10999,11003],{"type":2543,"tag":2826,"props":11000,"children":11001},{"style":2905},[11002],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":11004,"children":11005},{"style":2900},[11006],{"type":2548,"value":4269},{"type":2543,"tag":2550,"props":11008,"children":11009},{},[11010,11011,11016,11018,11024],{"type":2548,"value":10875},{"type":2543,"tag":2688,"props":11012,"children":11014},{"className":11013},[],[11015],{"type":2548,"value":10984},{"type":2548,"value":11017}," load strategy, the user session can still be manually fetched by calling ",{"type":2543,"tag":2688,"props":11019,"children":11021},{"className":11020},[],[11022],{"type":2548,"value":11023},"useUserSession().fetch()",{"type":2548,"value":2781},{"type":2543,"tag":2946,"props":11026,"children":11028},{"id":11027},"authstate-component",[11029,11034],{"type":2543,"tag":2688,"props":11030,"children":11032},{"className":11031},[],[11033],{"type":2548,"value":2717},{"type":2548,"value":2719},{"type":2543,"tag":2550,"props":11036,"children":11037},{},[11038,11040,11045],{"type":2548,"value":11039},"You can use the ",{"type":2543,"tag":2688,"props":11041,"children":11043},{"className":11042},[],[11044],{"type":2548,"value":2717},{"type":2548,"value":11046}," component to safely display auth-related data in your components without worrying about the rendering mode.",{"type":2543,"tag":2550,"props":11048,"children":11049},{},[11050],{"type":2548,"value":11051},"One common use case if the Login button in the header:",{"type":2543,"tag":2816,"props":11053,"children":11055},{"className":2954,"code":11054,"language":2956,"meta":2416,"style":2416},"\u003Ctemplate>\n  \u003Cheader>\n    \u003CAuthState v-slot=\"{ loggedIn, clear }\">\n      \u003Cbutton v-if=\"loggedIn\" @click=\"clear\">Logout\u003C\u002Fbutton>\n      \u003CNuxtLink v-else to=\"\u002Flogin\">Login\u003C\u002FNuxtLink>\n    \u003C\u002FAuthState>\n  \u003C\u002Fheader>\n\u003C\u002Ftemplate>\n",[11056],{"type":2543,"tag":2688,"props":11057,"children":11058},{"__ignoreMap":2416},[11059,11074,11090,11144,11216,11275,11291,11306],{"type":2543,"tag":2826,"props":11060,"children":11061},{"class":2828,"line":2502},[11062,11066,11070],{"type":2543,"tag":2826,"props":11063,"children":11064},{"style":2905},[11065],{"type":2548,"value":2968},{"type":2543,"tag":2826,"props":11067,"children":11068},{"style":2971},[11069],{"type":2548,"value":3109},{"type":2543,"tag":2826,"props":11071,"children":11072},{"style":2905},[11073],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11075,"children":11076},{"class":2828,"line":2468},[11077,11081,11086],{"type":2543,"tag":2826,"props":11078,"children":11079},{"style":2905},[11080],{"type":2548,"value":3122},{"type":2543,"tag":2826,"props":11082,"children":11083},{"style":2971},[11084],{"type":2548,"value":11085},"header",{"type":2543,"tag":2826,"props":11087,"children":11088},{"style":2905},[11089],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11091,"children":11092},{"class":2828,"line":2452},[11093,11097,11102,11107,11111,11115,11120,11124,11128,11132,11136,11140],{"type":2543,"tag":2826,"props":11094,"children":11095},{"style":2905},[11096],{"type":2548,"value":3162},{"type":2543,"tag":2826,"props":11098,"children":11099},{"style":2971},[11100],{"type":2548,"value":11101},"AuthState",{"type":2543,"tag":2826,"props":11103,"children":11104},{"style":2977},[11105],{"type":2548,"value":11106}," v-slot",{"type":2543,"tag":2826,"props":11108,"children":11109},{"style":2905},[11110],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":11112,"children":11113},{"style":2905},[11114],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":11116,"children":11117},{"style":2905},[11118],{"type":2548,"value":11119},"{ ",{"type":2543,"tag":2826,"props":11121,"children":11122},{"style":2900},[11123],{"type":2548,"value":3146},{"type":2543,"tag":2826,"props":11125,"children":11126},{"style":2905},[11127],{"type":2548,"value":6708},{"type":2543,"tag":2826,"props":11129,"children":11130},{"style":2900},[11131],{"type":2548,"value":3250},{"type":2543,"tag":2826,"props":11133,"children":11134},{"style":2905},[11135],{"type":2548,"value":6939},{"type":2543,"tag":2826,"props":11137,"children":11138},{"style":2905},[11139],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":11141,"children":11142},{"style":2905},[11143],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11145,"children":11146},{"class":2828,"line":3089},[11147,11152,11156,11160,11164,11168,11172,11176,11180,11184,11188,11192,11196,11200,11204,11208,11212],{"type":2543,"tag":2826,"props":11148,"children":11149},{"style":2905},[11150],{"type":2548,"value":11151},"      \u003C",{"type":2543,"tag":2826,"props":11153,"children":11154},{"style":2971},[11155],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":11157,"children":11158},{"style":2977},[11159],{"type":2548,"value":3132},{"type":2543,"tag":2826,"props":11161,"children":11162},{"style":2905},[11163],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":11165,"children":11166},{"style":2905},[11167],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":11169,"children":11170},{"style":2838},[11171],{"type":2548,"value":3146},{"type":2543,"tag":2826,"props":11173,"children":11174},{"style":2905},[11175],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":11177,"children":11178},{"style":2977},[11179],{"type":2548,"value":3237},{"type":2543,"tag":2826,"props":11181,"children":11182},{"style":2905},[11183],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":11185,"children":11186},{"style":2905},[11187],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":11189,"children":11190},{"style":2838},[11191],{"type":2548,"value":3250},{"type":2543,"tag":2826,"props":11193,"children":11194},{"style":2905},[11195],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":11197,"children":11198},{"style":2905},[11199],{"type":2548,"value":3171},{"type":2543,"tag":2826,"props":11201,"children":11202},{"style":2900},[11203],{"type":2548,"value":3263},{"type":2543,"tag":2826,"props":11205,"children":11206},{"style":2905},[11207],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":11209,"children":11210},{"style":2971},[11211],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":11213,"children":11214},{"style":2905},[11215],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11217,"children":11218},{"class":2828,"line":3099},[11219,11223,11228,11232,11237,11241,11245,11250,11254,11258,11263,11267,11271],{"type":2543,"tag":2826,"props":11220,"children":11221},{"style":2905},[11222],{"type":2548,"value":11151},{"type":2543,"tag":2826,"props":11224,"children":11225},{"style":2971},[11226],{"type":2548,"value":11227},"NuxtLink",{"type":2543,"tag":2826,"props":11229,"children":11230},{"style":4089},[11231],{"type":2548,"value":3308},{"type":2543,"tag":2826,"props":11233,"children":11234},{"style":2977},[11235],{"type":2548,"value":11236}," to",{"type":2543,"tag":2826,"props":11238,"children":11239},{"style":2905},[11240],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":11242,"children":11243},{"style":2905},[11244],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":11246,"children":11247},{"style":2838},[11248],{"type":2548,"value":11249},"\u002Flogin",{"type":2543,"tag":2826,"props":11251,"children":11252},{"style":2905},[11253],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":11255,"children":11256},{"style":2905},[11257],{"type":2548,"value":3171},{"type":2543,"tag":2826,"props":11259,"children":11260},{"style":2900},[11261],{"type":2548,"value":11262},"Login",{"type":2543,"tag":2826,"props":11264,"children":11265},{"style":2905},[11266],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":11268,"children":11269},{"style":2971},[11270],{"type":2548,"value":11227},{"type":2543,"tag":2826,"props":11272,"children":11273},{"style":2905},[11274],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11276,"children":11277},{"class":2828,"line":3116},[11278,11283,11287],{"type":2543,"tag":2826,"props":11279,"children":11280},{"style":2905},[11281],{"type":2548,"value":11282},"    \u003C\u002F",{"type":2543,"tag":2826,"props":11284,"children":11285},{"style":2971},[11286],{"type":2548,"value":11101},{"type":2543,"tag":2826,"props":11288,"children":11289},{"style":2905},[11290],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11292,"children":11293},{"class":2828,"line":2448},[11294,11298,11302],{"type":2543,"tag":2826,"props":11295,"children":11296},{"style":2905},[11297],{"type":2548,"value":3284},{"type":2543,"tag":2826,"props":11299,"children":11300},{"style":2971},[11301],{"type":2548,"value":11085},{"type":2543,"tag":2826,"props":11303,"children":11304},{"style":2905},[11305],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11307,"children":11308},{"class":2828,"line":2444},[11309,11313,11317],{"type":2543,"tag":2826,"props":11310,"children":11311},{"style":2905},[11312],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":11314,"children":11315},{"style":2971},[11316],{"type":2548,"value":3109},{"type":2543,"tag":2826,"props":11318,"children":11319},{"style":2905},[11320],{"type":2548,"value":2985},{"type":2543,"tag":2550,"props":11322,"children":11323},{},[11324,11326,11331],{"type":2548,"value":11325},"If the page is cached or prerendered or the load strategy set as ",{"type":2543,"tag":2688,"props":11327,"children":11329},{"className":11328},[],[11330],{"type":2548,"value":10848},{"type":2548,"value":11332},", nothing will be rendered until the user session is fetched on the client-side.",{"type":2543,"tag":2550,"props":11334,"children":11335},{},[11336,11337,11343],{"type":2548,"value":11039},{"type":2543,"tag":2688,"props":11338,"children":11340},{"className":11339},[],[11341],{"type":2548,"value":11342},"placeholder",{"type":2548,"value":11344}," slot to show a placeholder on server-side and while the user session is being fetched on client-side for the prerendered pages:",{"type":2543,"tag":2816,"props":11346,"children":11348},{"className":2954,"code":11347,"language":2956,"meta":2416,"style":2416},"\u003Ctemplate>\n  \u003Cheader>\n    \u003CAuthState>\n      \u003Ctemplate #default=\"{ loggedIn, clear }\">\n        \u003Cbutton v-if=\"loggedIn\" @click=\"clear\">Logout\u003C\u002Fbutton>\n        \u003CNuxtLink v-else to=\"\u002Flogin\">Login\u003C\u002FNuxtLink>\n      \u003C\u002Ftemplate>\n      \u003Ctemplate #placeholder>\n        \u003Cbutton disabled>Loading...\u003C\u002Fbutton>\n      \u003C\u002Ftemplate>\n    \u003C\u002FAuthState>\n  \u003C\u002Fheader>\n\u003C\u002Ftemplate>\n",[11349],{"type":2543,"tag":2688,"props":11350,"children":11351},{"__ignoreMap":2416},[11352,11367,11382,11397,11455,11527,11582,11598,11621,11658,11673,11688,11703],{"type":2543,"tag":2826,"props":11353,"children":11354},{"class":2828,"line":2502},[11355,11359,11363],{"type":2543,"tag":2826,"props":11356,"children":11357},{"style":2905},[11358],{"type":2548,"value":2968},{"type":2543,"tag":2826,"props":11360,"children":11361},{"style":2971},[11362],{"type":2548,"value":3109},{"type":2543,"tag":2826,"props":11364,"children":11365},{"style":2905},[11366],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11368,"children":11369},{"class":2828,"line":2468},[11370,11374,11378],{"type":2543,"tag":2826,"props":11371,"children":11372},{"style":2905},[11373],{"type":2548,"value":3122},{"type":2543,"tag":2826,"props":11375,"children":11376},{"style":2971},[11377],{"type":2548,"value":11085},{"type":2543,"tag":2826,"props":11379,"children":11380},{"style":2905},[11381],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11383,"children":11384},{"class":2828,"line":2452},[11385,11389,11393],{"type":2543,"tag":2826,"props":11386,"children":11387},{"style":2905},[11388],{"type":2548,"value":3162},{"type":2543,"tag":2826,"props":11390,"children":11391},{"style":2971},[11392],{"type":2548,"value":11101},{"type":2543,"tag":2826,"props":11394,"children":11395},{"style":2905},[11396],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11398,"children":11399},{"class":2828,"line":3089},[11400,11404,11408,11413,11418,11422,11426,11430,11434,11438,11443,11447,11451],{"type":2543,"tag":2826,"props":11401,"children":11402},{"style":2905},[11403],{"type":2548,"value":11151},{"type":2543,"tag":2826,"props":11405,"children":11406},{"style":2971},[11407],{"type":2548,"value":3109},{"type":2543,"tag":2826,"props":11409,"children":11410},{"style":2905},[11411],{"type":2548,"value":11412}," #",{"type":2543,"tag":2826,"props":11414,"children":11415},{"style":2977},[11416],{"type":2548,"value":11417},"default",{"type":2543,"tag":2826,"props":11419,"children":11420},{"style":2905},[11421],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":11423,"children":11424},{"style":2905},[11425],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":11427,"children":11428},{"style":2905},[11429],{"type":2548,"value":7198},{"type":2543,"tag":2826,"props":11431,"children":11432},{"style":2900},[11433],{"type":2548,"value":3003},{"type":2543,"tag":2826,"props":11435,"children":11436},{"style":2905},[11437],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":11439,"children":11440},{"style":2900},[11441],{"type":2548,"value":11442}," clear ",{"type":2543,"tag":2826,"props":11444,"children":11445},{"style":2905},[11446],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":11448,"children":11449},{"style":2905},[11450],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":11452,"children":11453},{"style":2905},[11454],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11456,"children":11457},{"class":2828,"line":3099},[11458,11463,11467,11471,11475,11479,11483,11487,11491,11495,11499,11503,11507,11511,11515,11519,11523],{"type":2543,"tag":2826,"props":11459,"children":11460},{"style":2905},[11461],{"type":2548,"value":11462},"        \u003C",{"type":2543,"tag":2826,"props":11464,"children":11465},{"style":2971},[11466],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":11468,"children":11469},{"style":2977},[11470],{"type":2548,"value":3132},{"type":2543,"tag":2826,"props":11472,"children":11473},{"style":2905},[11474],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":11476,"children":11477},{"style":2905},[11478],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":11480,"children":11481},{"style":2838},[11482],{"type":2548,"value":3146},{"type":2543,"tag":2826,"props":11484,"children":11485},{"style":2905},[11486],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":11488,"children":11489},{"style":2977},[11490],{"type":2548,"value":3237},{"type":2543,"tag":2826,"props":11492,"children":11493},{"style":2905},[11494],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":11496,"children":11497},{"style":2905},[11498],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":11500,"children":11501},{"style":2838},[11502],{"type":2548,"value":3250},{"type":2543,"tag":2826,"props":11504,"children":11505},{"style":2905},[11506],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":11508,"children":11509},{"style":2905},[11510],{"type":2548,"value":3171},{"type":2543,"tag":2826,"props":11512,"children":11513},{"style":2900},[11514],{"type":2548,"value":3263},{"type":2543,"tag":2826,"props":11516,"children":11517},{"style":2905},[11518],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":11520,"children":11521},{"style":2971},[11522],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":11524,"children":11525},{"style":2905},[11526],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11528,"children":11529},{"class":2828,"line":3116},[11530,11534,11538,11542,11546,11550,11554,11558,11562,11566,11570,11574,11578],{"type":2543,"tag":2826,"props":11531,"children":11532},{"style":2905},[11533],{"type":2548,"value":11462},{"type":2543,"tag":2826,"props":11535,"children":11536},{"style":2971},[11537],{"type":2548,"value":11227},{"type":2543,"tag":2826,"props":11539,"children":11540},{"style":4089},[11541],{"type":2548,"value":3308},{"type":2543,"tag":2826,"props":11543,"children":11544},{"style":2977},[11545],{"type":2548,"value":11236},{"type":2543,"tag":2826,"props":11547,"children":11548},{"style":2905},[11549],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":11551,"children":11552},{"style":2905},[11553],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":11555,"children":11556},{"style":2838},[11557],{"type":2548,"value":11249},{"type":2543,"tag":2826,"props":11559,"children":11560},{"style":2905},[11561],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":11563,"children":11564},{"style":2905},[11565],{"type":2548,"value":3171},{"type":2543,"tag":2826,"props":11567,"children":11568},{"style":2900},[11569],{"type":2548,"value":11262},{"type":2543,"tag":2826,"props":11571,"children":11572},{"style":2905},[11573],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":11575,"children":11576},{"style":2971},[11577],{"type":2548,"value":11227},{"type":2543,"tag":2826,"props":11579,"children":11580},{"style":2905},[11581],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11583,"children":11584},{"class":2828,"line":2448},[11585,11590,11594],{"type":2543,"tag":2826,"props":11586,"children":11587},{"style":2905},[11588],{"type":2548,"value":11589},"      \u003C\u002F",{"type":2543,"tag":2826,"props":11591,"children":11592},{"style":2971},[11593],{"type":2548,"value":3109},{"type":2543,"tag":2826,"props":11595,"children":11596},{"style":2905},[11597],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11599,"children":11600},{"class":2828,"line":2444},[11601,11605,11609,11613,11617],{"type":2543,"tag":2826,"props":11602,"children":11603},{"style":2905},[11604],{"type":2548,"value":11151},{"type":2543,"tag":2826,"props":11606,"children":11607},{"style":2971},[11608],{"type":2548,"value":3109},{"type":2543,"tag":2826,"props":11610,"children":11611},{"style":2905},[11612],{"type":2548,"value":11412},{"type":2543,"tag":2826,"props":11614,"children":11615},{"style":2977},[11616],{"type":2548,"value":11342},{"type":2543,"tag":2826,"props":11618,"children":11619},{"style":2905},[11620],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11622,"children":11623},{"class":2828,"line":2440},[11624,11628,11632,11637,11641,11646,11650,11654],{"type":2543,"tag":2826,"props":11625,"children":11626},{"style":2905},[11627],{"type":2548,"value":11462},{"type":2543,"tag":2826,"props":11629,"children":11630},{"style":2971},[11631],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":11633,"children":11634},{"style":2977},[11635],{"type":2548,"value":11636}," disabled",{"type":2543,"tag":2826,"props":11638,"children":11639},{"style":2905},[11640],{"type":2548,"value":3171},{"type":2543,"tag":2826,"props":11642,"children":11643},{"style":2900},[11644],{"type":2548,"value":11645},"Loading...",{"type":2543,"tag":2826,"props":11647,"children":11648},{"style":2905},[11649],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":11651,"children":11652},{"style":2971},[11653],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":11655,"children":11656},{"style":2905},[11657],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11659,"children":11660},{"class":2828,"line":3278},[11661,11665,11669],{"type":2543,"tag":2826,"props":11662,"children":11663},{"style":2905},[11664],{"type":2548,"value":11589},{"type":2543,"tag":2826,"props":11666,"children":11667},{"style":2971},[11668],{"type":2548,"value":3109},{"type":2543,"tag":2826,"props":11670,"children":11671},{"style":2905},[11672],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11674,"children":11675},{"class":2828,"line":2531},[11676,11680,11684],{"type":2543,"tag":2826,"props":11677,"children":11678},{"style":2905},[11679],{"type":2548,"value":11282},{"type":2543,"tag":2826,"props":11681,"children":11682},{"style":2971},[11683],{"type":2548,"value":11101},{"type":2543,"tag":2826,"props":11685,"children":11686},{"style":2905},[11687],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11689,"children":11690},{"class":2828,"line":3315},[11691,11695,11699],{"type":2543,"tag":2826,"props":11692,"children":11693},{"style":2905},[11694],{"type":2548,"value":3284},{"type":2543,"tag":2826,"props":11696,"children":11697},{"style":2971},[11698],{"type":2548,"value":11085},{"type":2543,"tag":2826,"props":11700,"children":11701},{"style":2905},[11702],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":11704,"children":11705},{"class":2828,"line":3348},[11706,11710,11714],{"type":2543,"tag":2826,"props":11707,"children":11708},{"style":2905},[11709],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":11711,"children":11712},{"style":2971},[11713],{"type":2548,"value":3109},{"type":2543,"tag":2826,"props":11715,"children":11716},{"style":2905},[11717],{"type":2548,"value":2985},{"type":2543,"tag":2550,"props":11719,"children":11720},{},[11721,11723,11728,11730,11736,11738,11744],{"type":2548,"value":11722},"If you are caching your routes with ",{"type":2543,"tag":2688,"props":11724,"children":11726},{"className":11725},[],[11727],{"type":2548,"value":10748},{"type":2548,"value":11729},", please make sure to use ",{"type":2543,"tag":2554,"props":11731,"children":11734},{"href":11732,"rel":11733},"https:\u002F\u002Fgithub.com\u002Funjs\u002Fnitro",[2558],[11735],{"type":2548,"value":971},{"type":2548,"value":11737}," >= ",{"type":2543,"tag":2688,"props":11739,"children":11741},{"className":11740},[],[11742],{"type":2548,"value":11743},"2.9.7",{"type":2548,"value":11745}," to support the client-side fetching of the user session.",{"type":2543,"tag":2634,"props":11747,"children":11749},{"id":11748},"websocket-support",[11750],{"type":2548,"value":11751},"WebSocket Support",{"type":2543,"tag":2550,"props":11753,"children":11754},{},[11755,11757,11764],{"type":2548,"value":11756},"Nuxt Auth Utils is compatible with ",{"type":2543,"tag":2554,"props":11758,"children":11761},{"href":11759,"rel":11760},"https:\u002F\u002Fnitro.build\u002Fguide\u002Fwebsocket",[2558],[11762],{"type":2548,"value":11763},"Nitro WebSockets",{"type":2548,"value":2781},{"type":2543,"tag":2550,"props":11766,"children":11767},{},[11768,11770,11776,11777,11782],{"type":2548,"value":11769},"Make sure to enable the ",{"type":2543,"tag":2688,"props":11771,"children":11773},{"className":11772},[],[11774],{"type":2548,"value":11775},"experimental.websocket",{"type":2548,"value":10776},{"type":2543,"tag":2688,"props":11778,"children":11780},{"className":11779},[],[11781],{"type":2548,"value":244},{"type":2548,"value":3566},{"type":2543,"tag":2816,"props":11784,"children":11786},{"className":3505,"code":11785,"language":3507,"meta":2416,"style":2416},"export default defineNuxtConfig({\n  nitro: {\n    experimental: {\n      websocket: true\n    }\n  }\n})\n",[11787],{"type":2543,"tag":2688,"props":11788,"children":11789},{"__ignoreMap":2416},[11790,11813,11829,11845,11861,11868,11875],{"type":2543,"tag":2826,"props":11791,"children":11792},{"class":2828,"line":2502},[11793,11797,11801,11805,11809],{"type":2543,"tag":2826,"props":11794,"children":11795},{"style":4089},[11796],{"type":2548,"value":4623},{"type":2543,"tag":2826,"props":11798,"children":11799},{"style":4089},[11800],{"type":2548,"value":4738},{"type":2543,"tag":2826,"props":11802,"children":11803},{"style":3062},[11804],{"type":2548,"value":4743},{"type":2543,"tag":2826,"props":11806,"children":11807},{"style":2900},[11808],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":11810,"children":11811},{"style":2905},[11812],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":11814,"children":11815},{"class":2828,"line":2468},[11816,11821,11825],{"type":2543,"tag":2826,"props":11817,"children":11818},{"style":2971},[11819],{"type":2548,"value":11820},"  nitro",{"type":2543,"tag":2826,"props":11822,"children":11823},{"style":2905},[11824],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":11826,"children":11827},{"style":2905},[11828],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":11830,"children":11831},{"class":2828,"line":2452},[11832,11837,11841],{"type":2543,"tag":2826,"props":11833,"children":11834},{"style":2971},[11835],{"type":2548,"value":11836},"    experimental",{"type":2543,"tag":2826,"props":11838,"children":11839},{"style":2905},[11840],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":11842,"children":11843},{"style":2905},[11844],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":11846,"children":11847},{"class":2828,"line":3089},[11848,11853,11857],{"type":2543,"tag":2826,"props":11849,"children":11850},{"style":2971},[11851],{"type":2548,"value":11852},"      websocket",{"type":2543,"tag":2826,"props":11854,"children":11855},{"style":2905},[11856],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":11858,"children":11859},{"style":5273},[11860],{"type":2548,"value":5276},{"type":2543,"tag":2826,"props":11862,"children":11863},{"class":2828,"line":3099},[11864],{"type":2543,"tag":2826,"props":11865,"children":11866},{"style":2905},[11867],{"type":2548,"value":4879},{"type":2543,"tag":2826,"props":11869,"children":11870},{"class":2828,"line":3116},[11871],{"type":2543,"tag":2826,"props":11872,"children":11873},{"style":2905},[11874],{"type":2548,"value":4527},{"type":2543,"tag":2826,"props":11876,"children":11877},{"class":2828,"line":2448},[11878,11882],{"type":2543,"tag":2826,"props":11879,"children":11880},{"style":2905},[11881],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":11883,"children":11884},{"style":2900},[11885],{"type":2548,"value":4269},{"type":2543,"tag":2550,"props":11887,"children":11888},{},[11889,11890,11896,11898,11904],{"type":2548,"value":11039},{"type":2543,"tag":2688,"props":11891,"children":11893},{"className":11892},[],[11894],{"type":2548,"value":11895},"requireUserSession",{"type":2548,"value":11897}," function in the ",{"type":2543,"tag":2688,"props":11899,"children":11901},{"className":11900},[],[11902],{"type":2548,"value":11903},"upgrade",{"type":2548,"value":11905}," function to check if the user is authenticated before upgrading the WebSocket connection.",{"type":2543,"tag":2816,"props":11907,"children":11909},{"className":3505,"code":11908,"language":3507,"meta":2416,"style":2416},"\u002F\u002F server\u002Froutes\u002Fws.ts\nexport default defineWebSocketHandler({\n  async upgrade(request) {\n    \u002F\u002F Make sure the user is authenticated before upgrading the WebSocket connection\n    await requireUserSession(request)\n  },\n  async open(peer) {\n    const { user } = await requireUserSession(peer)\n\n    peer.send(`Hello, ${user.name}!`)\n  },\n  message(peer, message) {\n    peer.send(`Echo: ${message}`)\n  },\n})\n",[11910],{"type":2543,"tag":2688,"props":11911,"children":11912},{"__ignoreMap":2416},[11913,11921,11945,11974,11982,12005,12012,12041,12084,12091,12154,12161,12193,12238,12245],{"type":2543,"tag":2826,"props":11914,"children":11915},{"class":2828,"line":2502},[11916],{"type":2543,"tag":2826,"props":11917,"children":11918},{"style":2891},[11919],{"type":2548,"value":11920},"\u002F\u002F server\u002Froutes\u002Fws.ts\n",{"type":2543,"tag":2826,"props":11922,"children":11923},{"class":2828,"line":2468},[11924,11928,11932,11937,11941],{"type":2543,"tag":2826,"props":11925,"children":11926},{"style":4089},[11927],{"type":2548,"value":4623},{"type":2543,"tag":2826,"props":11929,"children":11930},{"style":4089},[11931],{"type":2548,"value":4738},{"type":2543,"tag":2826,"props":11933,"children":11934},{"style":3062},[11935],{"type":2548,"value":11936}," defineWebSocketHandler",{"type":2543,"tag":2826,"props":11938,"children":11939},{"style":2900},[11940],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":11942,"children":11943},{"style":2905},[11944],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":11946,"children":11947},{"class":2828,"line":2452},[11948,11952,11957,11961,11966,11970],{"type":2543,"tag":2826,"props":11949,"children":11950},{"style":2977},[11951],{"type":2548,"value":5291},{"type":2543,"tag":2826,"props":11953,"children":11954},{"style":2971},[11955],{"type":2548,"value":11956}," upgrade",{"type":2543,"tag":2826,"props":11958,"children":11959},{"style":2905},[11960],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":11962,"children":11963},{"style":3921},[11964],{"type":2548,"value":11965},"request",{"type":2543,"tag":2826,"props":11967,"children":11968},{"style":2905},[11969],{"type":2548,"value":5509},{"type":2543,"tag":2826,"props":11971,"children":11972},{"style":2905},[11973],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":11975,"children":11976},{"class":2828,"line":3089},[11977],{"type":2543,"tag":2826,"props":11978,"children":11979},{"style":2891},[11980],{"type":2548,"value":11981},"    \u002F\u002F Make sure the user is authenticated before upgrading the WebSocket connection\n",{"type":2543,"tag":2826,"props":11983,"children":11984},{"class":2828,"line":3099},[11985,11989,11993,11997,12001],{"type":2543,"tag":2826,"props":11986,"children":11987},{"style":4089},[11988],{"type":2548,"value":5342},{"type":2543,"tag":2826,"props":11990,"children":11991},{"style":3062},[11992],{"type":2548,"value":4425},{"type":2543,"tag":2826,"props":11994,"children":11995},{"style":2971},[11996],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":11998,"children":11999},{"style":2900},[12000],{"type":2548,"value":11965},{"type":2543,"tag":2826,"props":12002,"children":12003},{"style":2971},[12004],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":12006,"children":12007},{"class":2828,"line":3116},[12008],{"type":2543,"tag":2826,"props":12009,"children":12010},{"style":2905},[12011],{"type":2548,"value":4167},{"type":2543,"tag":2826,"props":12013,"children":12014},{"class":2828,"line":2448},[12015,12019,12024,12028,12033,12037],{"type":2543,"tag":2826,"props":12016,"children":12017},{"style":2977},[12018],{"type":2548,"value":5291},{"type":2543,"tag":2826,"props":12020,"children":12021},{"style":2971},[12022],{"type":2548,"value":12023}," open",{"type":2543,"tag":2826,"props":12025,"children":12026},{"style":2905},[12027],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":12029,"children":12030},{"style":3921},[12031],{"type":2548,"value":12032},"peer",{"type":2543,"tag":2826,"props":12034,"children":12035},{"style":2905},[12036],{"type":2548,"value":5509},{"type":2543,"tag":2826,"props":12038,"children":12039},{"style":2905},[12040],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":12042,"children":12043},{"class":2828,"line":2444},[12044,12048,12052,12056,12060,12064,12068,12072,12076,12080],{"type":2543,"tag":2826,"props":12045,"children":12046},{"style":2977},[12047],{"type":2548,"value":7059},{"type":2543,"tag":2826,"props":12049,"children":12050},{"style":2905},[12051],{"type":2548,"value":2998},{"type":2543,"tag":2826,"props":12053,"children":12054},{"style":2900},[12055],{"type":2548,"value":3013},{"type":2543,"tag":2826,"props":12057,"children":12058},{"style":2905},[12059],{"type":2548,"value":6939},{"type":2543,"tag":2826,"props":12061,"children":12062},{"style":2905},[12063],{"type":2548,"value":3059},{"type":2543,"tag":2826,"props":12065,"children":12066},{"style":4089},[12067],{"type":2548,"value":4345},{"type":2543,"tag":2826,"props":12069,"children":12070},{"style":3062},[12071],{"type":2548,"value":4425},{"type":2543,"tag":2826,"props":12073,"children":12074},{"style":2971},[12075],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":12077,"children":12078},{"style":2900},[12079],{"type":2548,"value":12032},{"type":2543,"tag":2826,"props":12081,"children":12082},{"style":2971},[12083],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":12085,"children":12086},{"class":2828,"line":2440},[12087],{"type":2543,"tag":2826,"props":12088,"children":12089},{"emptyLinePlaceholder":3093},[12090],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":12092,"children":12093},{"class":2828,"line":3278},[12094,12099,12103,12108,12112,12116,12121,12125,12129,12133,12138,12142,12146,12150],{"type":2543,"tag":2826,"props":12095,"children":12096},{"style":2900},[12097],{"type":2548,"value":12098},"    peer",{"type":2543,"tag":2826,"props":12100,"children":12101},{"style":2905},[12102],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":12104,"children":12105},{"style":3062},[12106],{"type":2548,"value":12107},"send",{"type":2543,"tag":2826,"props":12109,"children":12110},{"style":2971},[12111],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":12113,"children":12114},{"style":2905},[12115],{"type":2548,"value":7527},{"type":2543,"tag":2826,"props":12117,"children":12118},{"style":2838},[12119],{"type":2548,"value":12120},"Hello, ",{"type":2543,"tag":2826,"props":12122,"children":12123},{"style":2905},[12124],{"type":2548,"value":8866},{"type":2543,"tag":2826,"props":12126,"children":12127},{"style":2900},[12128],{"type":2548,"value":7113},{"type":2543,"tag":2826,"props":12130,"children":12131},{"style":2905},[12132],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":12134,"children":12135},{"style":2900},[12136],{"type":2548,"value":12137},"name",{"type":2543,"tag":2826,"props":12139,"children":12140},{"style":2905},[12141],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":12143,"children":12144},{"style":2838},[12145],{"type":2548,"value":7552},{"type":2543,"tag":2826,"props":12147,"children":12148},{"style":2905},[12149],{"type":2548,"value":7527},{"type":2543,"tag":2826,"props":12151,"children":12152},{"style":2971},[12153],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":12155,"children":12156},{"class":2828,"line":2531},[12157],{"type":2543,"tag":2826,"props":12158,"children":12159},{"style":2905},[12160],{"type":2548,"value":4167},{"type":2543,"tag":2826,"props":12162,"children":12163},{"class":2828,"line":3315},[12164,12169,12173,12177,12181,12185,12189],{"type":2543,"tag":2826,"props":12165,"children":12166},{"style":2971},[12167],{"type":2548,"value":12168},"  message",{"type":2543,"tag":2826,"props":12170,"children":12171},{"style":2905},[12172],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":12174,"children":12175},{"style":3921},[12176],{"type":2548,"value":12032},{"type":2543,"tag":2826,"props":12178,"children":12179},{"style":2905},[12180],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":12182,"children":12183},{"style":3921},[12184],{"type":2548,"value":7221},{"type":2543,"tag":2826,"props":12186,"children":12187},{"style":2905},[12188],{"type":2548,"value":5509},{"type":2543,"tag":2826,"props":12190,"children":12191},{"style":2905},[12192],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":12194,"children":12195},{"class":2828,"line":3348},[12196,12200,12204,12208,12212,12216,12221,12225,12230,12234],{"type":2543,"tag":2826,"props":12197,"children":12198},{"style":2900},[12199],{"type":2548,"value":12098},{"type":2543,"tag":2826,"props":12201,"children":12202},{"style":2905},[12203],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":12205,"children":12206},{"style":3062},[12207],{"type":2548,"value":12107},{"type":2543,"tag":2826,"props":12209,"children":12210},{"style":2971},[12211],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":12213,"children":12214},{"style":2905},[12215],{"type":2548,"value":7527},{"type":2543,"tag":2826,"props":12217,"children":12218},{"style":2838},[12219],{"type":2548,"value":12220},"Echo: ",{"type":2543,"tag":2826,"props":12222,"children":12223},{"style":2905},[12224],{"type":2548,"value":8866},{"type":2543,"tag":2826,"props":12226,"children":12227},{"style":2900},[12228],{"type":2548,"value":12229},"message",{"type":2543,"tag":2826,"props":12231,"children":12232},{"style":2905},[12233],{"type":2548,"value":8876},{"type":2543,"tag":2826,"props":12235,"children":12236},{"style":2971},[12237],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":12239,"children":12240},{"class":2828,"line":3403},[12241],{"type":2543,"tag":2826,"props":12242,"children":12243},{"style":2905},[12244],{"type":2548,"value":4167},{"type":2543,"tag":2826,"props":12246,"children":12247},{"class":2828,"line":3412},[12248,12252],{"type":2543,"tag":2826,"props":12249,"children":12250},{"style":2905},[12251],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":12253,"children":12254},{"style":2900},[12255],{"type":2548,"value":4269},{"type":2543,"tag":2550,"props":12257,"children":12258},{},[12259,12261,12268],{"type":2548,"value":12260},"Then, in your application, you can use the ",{"type":2543,"tag":2554,"props":12262,"children":12265},{"href":12263,"rel":12264},"https:\u002F\u002Fvueuse.org\u002Fcore\u002FuseWebSocket\u002F",[2558],[12266],{"type":2548,"value":12267},"useWebSocket",{"type":2548,"value":12269}," composable to connect to the WebSocket:",{"type":2543,"tag":2816,"props":12271,"children":12273},{"className":2954,"code":12272,"language":2956,"meta":2416,"style":2416},"\u003Cscript setup>\nconst { status, data, send, open, close } = useWebSocket('\u002Fws', { immediate: false })\n\n\u002F\u002F Only open the websocket after the page is hydrated (client-only)\nonMounted(open)\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Cp>Status: {{ status }}\u003C\u002Fp>\n    \u003Cp>Data: {{ data }}\u003C\u002Fp>\n    \u003Cp>\n      \u003Cbutton @click=\"open\">Open\u003C\u002Fbutton>\n      \u003Cbutton @click=\"close(1000, 'Closing')\">Close\u003C\u002Fbutton>\n      \u003Cbutton @click=\"send('hello')\">Send hello\u003C\u002Fbutton>\n    \u003C\u002Fp>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n",[12274],{"type":2543,"tag":2688,"props":12275,"children":12276},{"__ignoreMap":2416},[12277,12296,12407,12414,12422,12435,12450,12457,12472,12487,12519,12551,12566,12619,12672,12725,12740,12755],{"type":2543,"tag":2826,"props":12278,"children":12279},{"class":2828,"line":2502},[12280,12284,12288,12292],{"type":2543,"tag":2826,"props":12281,"children":12282},{"style":2905},[12283],{"type":2548,"value":2968},{"type":2543,"tag":2826,"props":12285,"children":12286},{"style":2971},[12287],{"type":2548,"value":2974},{"type":2543,"tag":2826,"props":12289,"children":12290},{"style":2977},[12291],{"type":2548,"value":2980},{"type":2543,"tag":2826,"props":12293,"children":12294},{"style":2905},[12295],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":12297,"children":12298},{"class":2828,"line":2468},[12299,12303,12307,12312,12316,12321,12325,12330,12334,12338,12342,12347,12351,12355,12360,12364,12368,12373,12377,12381,12385,12390,12394,12399,12403],{"type":2543,"tag":2826,"props":12300,"children":12301},{"style":2977},[12302],{"type":2548,"value":2993},{"type":2543,"tag":2826,"props":12304,"children":12305},{"style":2905},[12306],{"type":2548,"value":2998},{"type":2543,"tag":2826,"props":12308,"children":12309},{"style":2900},[12310],{"type":2548,"value":12311}," status",{"type":2543,"tag":2826,"props":12313,"children":12314},{"style":2905},[12315],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":12317,"children":12318},{"style":2900},[12319],{"type":2548,"value":12320}," data",{"type":2543,"tag":2826,"props":12322,"children":12323},{"style":2905},[12324],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":12326,"children":12327},{"style":2900},[12328],{"type":2548,"value":12329}," send",{"type":2543,"tag":2826,"props":12331,"children":12332},{"style":2905},[12333],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":12335,"children":12336},{"style":2900},[12337],{"type":2548,"value":12023},{"type":2543,"tag":2826,"props":12339,"children":12340},{"style":2905},[12341],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":12343,"children":12344},{"style":2900},[12345],{"type":2548,"value":12346}," close ",{"type":2543,"tag":2826,"props":12348,"children":12349},{"style":2905},[12350],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":12352,"children":12353},{"style":2905},[12354],{"type":2548,"value":3059},{"type":2543,"tag":2826,"props":12356,"children":12357},{"style":3062},[12358],{"type":2548,"value":12359}," useWebSocket",{"type":2543,"tag":2826,"props":12361,"children":12362},{"style":2900},[12363],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":12365,"children":12366},{"style":2905},[12367],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":12369,"children":12370},{"style":2838},[12371],{"type":2548,"value":12372},"\u002Fws",{"type":2543,"tag":2826,"props":12374,"children":12375},{"style":2905},[12376],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":12378,"children":12379},{"style":2905},[12380],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":12382,"children":12383},{"style":2905},[12384],{"type":2548,"value":2998},{"type":2543,"tag":2826,"props":12386,"children":12387},{"style":2971},[12388],{"type":2548,"value":12389}," immediate",{"type":2543,"tag":2826,"props":12391,"children":12392},{"style":2905},[12393],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":12395,"children":12396},{"style":5273},[12397],{"type":2548,"value":12398}," false",{"type":2543,"tag":2826,"props":12400,"children":12401},{"style":2905},[12402],{"type":2548,"value":6939},{"type":2543,"tag":2826,"props":12404,"children":12405},{"style":2900},[12406],{"type":2548,"value":4269},{"type":2543,"tag":2826,"props":12408,"children":12409},{"class":2828,"line":2452},[12410],{"type":2543,"tag":2826,"props":12411,"children":12412},{"emptyLinePlaceholder":3093},[12413],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":12415,"children":12416},{"class":2828,"line":3089},[12417],{"type":2543,"tag":2826,"props":12418,"children":12419},{"style":2891},[12420],{"type":2548,"value":12421},"\u002F\u002F Only open the websocket after the page is hydrated (client-only)\n",{"type":2543,"tag":2826,"props":12423,"children":12424},{"class":2828,"line":3099},[12425,12430],{"type":2543,"tag":2826,"props":12426,"children":12427},{"style":3062},[12428],{"type":2548,"value":12429},"onMounted",{"type":2543,"tag":2826,"props":12431,"children":12432},{"style":2900},[12433],{"type":2548,"value":12434},"(open)\n",{"type":2543,"tag":2826,"props":12436,"children":12437},{"class":2828,"line":3116},[12438,12442,12446],{"type":2543,"tag":2826,"props":12439,"children":12440},{"style":2905},[12441],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":12443,"children":12444},{"style":2971},[12445],{"type":2548,"value":2974},{"type":2543,"tag":2826,"props":12447,"children":12448},{"style":2905},[12449],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":12451,"children":12452},{"class":2828,"line":2448},[12453],{"type":2543,"tag":2826,"props":12454,"children":12455},{"emptyLinePlaceholder":3093},[12456],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":12458,"children":12459},{"class":2828,"line":2444},[12460,12464,12468],{"type":2543,"tag":2826,"props":12461,"children":12462},{"style":2905},[12463],{"type":2548,"value":2968},{"type":2543,"tag":2826,"props":12465,"children":12466},{"style":2971},[12467],{"type":2548,"value":3109},{"type":2543,"tag":2826,"props":12469,"children":12470},{"style":2905},[12471],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":12473,"children":12474},{"class":2828,"line":2440},[12475,12479,12483],{"type":2543,"tag":2826,"props":12476,"children":12477},{"style":2905},[12478],{"type":2548,"value":3122},{"type":2543,"tag":2826,"props":12480,"children":12481},{"style":2971},[12482],{"type":2548,"value":3127},{"type":2543,"tag":2826,"props":12484,"children":12485},{"style":2905},[12486],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":12488,"children":12489},{"class":2828,"line":3278},[12490,12494,12498,12502,12507,12511,12515],{"type":2543,"tag":2826,"props":12491,"children":12492},{"style":2905},[12493],{"type":2548,"value":3162},{"type":2543,"tag":2826,"props":12495,"children":12496},{"style":2971},[12497],{"type":2548,"value":2550},{"type":2543,"tag":2826,"props":12499,"children":12500},{"style":2905},[12501],{"type":2548,"value":3171},{"type":2543,"tag":2826,"props":12503,"children":12504},{"style":2900},[12505],{"type":2548,"value":12506},"Status: {{ status }}",{"type":2543,"tag":2826,"props":12508,"children":12509},{"style":2905},[12510],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":12512,"children":12513},{"style":2971},[12514],{"type":2548,"value":2550},{"type":2543,"tag":2826,"props":12516,"children":12517},{"style":2905},[12518],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":12520,"children":12521},{"class":2828,"line":2531},[12522,12526,12530,12534,12539,12543,12547],{"type":2543,"tag":2826,"props":12523,"children":12524},{"style":2905},[12525],{"type":2548,"value":3162},{"type":2543,"tag":2826,"props":12527,"children":12528},{"style":2971},[12529],{"type":2548,"value":2550},{"type":2543,"tag":2826,"props":12531,"children":12532},{"style":2905},[12533],{"type":2548,"value":3171},{"type":2543,"tag":2826,"props":12535,"children":12536},{"style":2900},[12537],{"type":2548,"value":12538},"Data: {{ data }}",{"type":2543,"tag":2826,"props":12540,"children":12541},{"style":2905},[12542],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":12544,"children":12545},{"style":2971},[12546],{"type":2548,"value":2550},{"type":2543,"tag":2826,"props":12548,"children":12549},{"style":2905},[12550],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":12552,"children":12553},{"class":2828,"line":3315},[12554,12558,12562],{"type":2543,"tag":2826,"props":12555,"children":12556},{"style":2905},[12557],{"type":2548,"value":3162},{"type":2543,"tag":2826,"props":12559,"children":12560},{"style":2971},[12561],{"type":2548,"value":2550},{"type":2543,"tag":2826,"props":12563,"children":12564},{"style":2905},[12565],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":12567,"children":12568},{"class":2828,"line":3348},[12569,12573,12577,12581,12585,12589,12594,12598,12602,12607,12611,12615],{"type":2543,"tag":2826,"props":12570,"children":12571},{"style":2905},[12572],{"type":2548,"value":11151},{"type":2543,"tag":2826,"props":12574,"children":12575},{"style":2971},[12576],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":12578,"children":12579},{"style":2977},[12580],{"type":2548,"value":3237},{"type":2543,"tag":2826,"props":12582,"children":12583},{"style":2905},[12584],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":12586,"children":12587},{"style":2905},[12588],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":12590,"children":12591},{"style":2838},[12592],{"type":2548,"value":12593},"open",{"type":2543,"tag":2826,"props":12595,"children":12596},{"style":2905},[12597],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":12599,"children":12600},{"style":2905},[12601],{"type":2548,"value":3171},{"type":2543,"tag":2826,"props":12603,"children":12604},{"style":2900},[12605],{"type":2548,"value":12606},"Open",{"type":2543,"tag":2826,"props":12608,"children":12609},{"style":2905},[12610],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":12612,"children":12613},{"style":2971},[12614],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":12616,"children":12617},{"style":2905},[12618],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":12620,"children":12621},{"class":2828,"line":3403},[12622,12626,12630,12634,12638,12642,12647,12651,12655,12660,12664,12668],{"type":2543,"tag":2826,"props":12623,"children":12624},{"style":2905},[12625],{"type":2548,"value":11151},{"type":2543,"tag":2826,"props":12627,"children":12628},{"style":2971},[12629],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":12631,"children":12632},{"style":2977},[12633],{"type":2548,"value":3237},{"type":2543,"tag":2826,"props":12635,"children":12636},{"style":2905},[12637],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":12639,"children":12640},{"style":2905},[12641],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":12643,"children":12644},{"style":2838},[12645],{"type":2548,"value":12646},"close(1000, 'Closing')",{"type":2543,"tag":2826,"props":12648,"children":12649},{"style":2905},[12650],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":12652,"children":12653},{"style":2905},[12654],{"type":2548,"value":3171},{"type":2543,"tag":2826,"props":12656,"children":12657},{"style":2900},[12658],{"type":2548,"value":12659},"Close",{"type":2543,"tag":2826,"props":12661,"children":12662},{"style":2905},[12663],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":12665,"children":12666},{"style":2971},[12667],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":12669,"children":12670},{"style":2905},[12671],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":12673,"children":12674},{"class":2828,"line":3412},[12675,12679,12683,12687,12691,12695,12700,12704,12708,12713,12717,12721],{"type":2543,"tag":2826,"props":12676,"children":12677},{"style":2905},[12678],{"type":2548,"value":11151},{"type":2543,"tag":2826,"props":12680,"children":12681},{"style":2971},[12682],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":12684,"children":12685},{"style":2977},[12686],{"type":2548,"value":3237},{"type":2543,"tag":2826,"props":12688,"children":12689},{"style":2905},[12690],{"type":2548,"value":2908},{"type":2543,"tag":2826,"props":12692,"children":12693},{"style":2905},[12694],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":12696,"children":12697},{"style":2838},[12698],{"type":2548,"value":12699},"send('hello')",{"type":2543,"tag":2826,"props":12701,"children":12702},{"style":2905},[12703],{"type":2548,"value":3141},{"type":2543,"tag":2826,"props":12705,"children":12706},{"style":2905},[12707],{"type":2548,"value":3171},{"type":2543,"tag":2826,"props":12709,"children":12710},{"style":2900},[12711],{"type":2548,"value":12712},"Send hello",{"type":2543,"tag":2826,"props":12714,"children":12715},{"style":2905},[12716],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":12718,"children":12719},{"style":2971},[12720],{"type":2548,"value":3232},{"type":2543,"tag":2826,"props":12722,"children":12723},{"style":2905},[12724],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":12726,"children":12727},{"class":2828,"line":2436},[12728,12732,12736],{"type":2543,"tag":2826,"props":12729,"children":12730},{"style":2905},[12731],{"type":2548,"value":11282},{"type":2543,"tag":2826,"props":12733,"children":12734},{"style":2971},[12735],{"type":2548,"value":2550},{"type":2543,"tag":2826,"props":12737,"children":12738},{"style":2905},[12739],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":12741,"children":12742},{"class":2828,"line":3480},[12743,12747,12751],{"type":2543,"tag":2826,"props":12744,"children":12745},{"style":2905},[12746],{"type":2548,"value":3284},{"type":2543,"tag":2826,"props":12748,"children":12749},{"style":2971},[12750],{"type":2548,"value":3127},{"type":2543,"tag":2826,"props":12752,"children":12753},{"style":2905},[12754],{"type":2548,"value":2985},{"type":2543,"tag":2826,"props":12756,"children":12757},{"class":2828,"line":3750},[12758,12762,12766],{"type":2543,"tag":2826,"props":12759,"children":12760},{"style":2905},[12761],{"type":2548,"value":3078},{"type":2543,"tag":2826,"props":12763,"children":12764},{"style":2971},[12765],{"type":2548,"value":3109},{"type":2543,"tag":2826,"props":12767,"children":12768},{"style":2905},[12769],{"type":2548,"value":2985},{"type":2543,"tag":2634,"props":12771,"children":12773},{"id":12772},"configuration",[12774],{"type":2548,"value":27},{"type":2543,"tag":2550,"props":12776,"children":12777},{},[12778,12780,12786,12788,12801],{"type":2548,"value":12779},"We leverage ",{"type":2543,"tag":2688,"props":12781,"children":12783},{"className":12782},[],[12784],{"type":2548,"value":12785},"runtimeConfig.session",{"type":2548,"value":12787}," to give the defaults option to ",{"type":2543,"tag":2554,"props":12789,"children":12792},{"href":12790,"rel":12791},"https:\u002F\u002Fh3.unjs.io\u002Fexamples\u002Fhandle-session",[2558],[12793,12795],{"type":2548,"value":12794},"h3 ",{"type":2543,"tag":2688,"props":12796,"children":12798},{"className":12797},[],[12799],{"type":2548,"value":12800},"useSession",{"type":2548,"value":2781},{"type":2543,"tag":2550,"props":12803,"children":12804},{},[12805,12807,12812],{"type":2548,"value":12806},"You can overwrite the options in your ",{"type":2543,"tag":2688,"props":12808,"children":12810},{"className":12809},[],[12811],{"type":2548,"value":244},{"type":2548,"value":3566},{"type":2543,"tag":2816,"props":12814,"children":12816},{"className":3505,"code":12815,"language":3507,"meta":2416,"style":2416},"export default defineNuxtConfig({\n  modules: ['nuxt-auth-utils'],\n  runtimeConfig: {\n    session: {\n      maxAge: 60 * 60 * 24 * 7 \u002F\u002F 1 week\n    }\n  }\n})\n",[12817],{"type":2543,"tag":2688,"props":12818,"children":12819},{"__ignoreMap":2416},[12820,12843,12878,12893,12909,12958,12965,12972],{"type":2543,"tag":2826,"props":12821,"children":12822},{"class":2828,"line":2502},[12823,12827,12831,12835,12839],{"type":2543,"tag":2826,"props":12824,"children":12825},{"style":4089},[12826],{"type":2548,"value":4623},{"type":2543,"tag":2826,"props":12828,"children":12829},{"style":4089},[12830],{"type":2548,"value":4738},{"type":2543,"tag":2826,"props":12832,"children":12833},{"style":3062},[12834],{"type":2548,"value":4743},{"type":2543,"tag":2826,"props":12836,"children":12837},{"style":2900},[12838],{"type":2548,"value":4748},{"type":2543,"tag":2826,"props":12840,"children":12841},{"style":2905},[12842],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":12844,"children":12845},{"class":2828,"line":2468},[12846,12850,12854,12858,12862,12866,12870,12874],{"type":2543,"tag":2826,"props":12847,"children":12848},{"style":2971},[12849],{"type":2548,"value":5975},{"type":2543,"tag":2826,"props":12851,"children":12852},{"style":2905},[12853],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":12855,"children":12856},{"style":2900},[12857],{"type":2548,"value":5984},{"type":2543,"tag":2826,"props":12859,"children":12860},{"style":2905},[12861],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":12863,"children":12864},{"style":2838},[12865],{"type":2548,"value":2415},{"type":2543,"tag":2826,"props":12867,"children":12868},{"style":2905},[12869],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":12871,"children":12872},{"style":2900},[12873],{"type":2548,"value":6001},{"type":2543,"tag":2826,"props":12875,"children":12876},{"style":2905},[12877],{"type":2548,"value":4839},{"type":2543,"tag":2826,"props":12879,"children":12880},{"class":2828,"line":2452},[12881,12885,12889],{"type":2543,"tag":2826,"props":12882,"children":12883},{"style":2971},[12884],{"type":2548,"value":4761},{"type":2543,"tag":2826,"props":12886,"children":12887},{"style":2905},[12888],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":12890,"children":12891},{"style":2905},[12892],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":12894,"children":12895},{"class":2828,"line":3089},[12896,12901,12905],{"type":2543,"tag":2826,"props":12897,"children":12898},{"style":2971},[12899],{"type":2548,"value":12900},"    session",{"type":2543,"tag":2826,"props":12902,"children":12903},{"style":2905},[12904],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":12906,"children":12907},{"style":2905},[12908],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":12910,"children":12911},{"class":2828,"line":3099},[12912,12917,12921,12926,12931,12935,12939,12944,12948,12953],{"type":2543,"tag":2826,"props":12913,"children":12914},{"style":2971},[12915],{"type":2548,"value":12916},"      maxAge",{"type":2543,"tag":2826,"props":12918,"children":12919},{"style":2905},[12920],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":12922,"children":12923},{"style":6427},[12924],{"type":2548,"value":12925}," 60",{"type":2543,"tag":2826,"props":12927,"children":12928},{"style":2905},[12929],{"type":2548,"value":12930}," *",{"type":2543,"tag":2826,"props":12932,"children":12933},{"style":6427},[12934],{"type":2548,"value":12925},{"type":2543,"tag":2826,"props":12936,"children":12937},{"style":2905},[12938],{"type":2548,"value":12930},{"type":2543,"tag":2826,"props":12940,"children":12941},{"style":6427},[12942],{"type":2548,"value":12943}," 24",{"type":2543,"tag":2826,"props":12945,"children":12946},{"style":2905},[12947],{"type":2548,"value":12930},{"type":2543,"tag":2826,"props":12949,"children":12950},{"style":6427},[12951],{"type":2548,"value":12952}," 7",{"type":2543,"tag":2826,"props":12954,"children":12955},{"style":2891},[12956],{"type":2548,"value":12957}," \u002F\u002F 1 week\n",{"type":2543,"tag":2826,"props":12959,"children":12960},{"class":2828,"line":3116},[12961],{"type":2543,"tag":2826,"props":12962,"children":12963},{"style":2905},[12964],{"type":2548,"value":4879},{"type":2543,"tag":2826,"props":12966,"children":12967},{"class":2828,"line":2448},[12968],{"type":2543,"tag":2826,"props":12969,"children":12970},{"style":2905},[12971],{"type":2548,"value":4527},{"type":2543,"tag":2826,"props":12973,"children":12974},{"class":2828,"line":2444},[12975,12979],{"type":2543,"tag":2826,"props":12976,"children":12977},{"style":2905},[12978],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":12980,"children":12981},{"style":2900},[12982],{"type":2548,"value":4269},{"type":2543,"tag":2550,"props":12984,"children":12985},{},[12986],{"type":2548,"value":12987},"Our defaults are:",{"type":2543,"tag":2816,"props":12989,"children":12991},{"className":3505,"code":12990,"language":3507,"meta":2416,"style":2416},"{\n  name: 'nuxt-session',\n  password: process.env.NUXT_SESSION_PASSWORD || '',\n  cookie: {\n    sameSite: 'lax'\n  }\n}\n",[12992],{"type":2543,"tag":2688,"props":12993,"children":12994},{"__ignoreMap":2416},[12995,13002,13031,13079,13095,13120,13127],{"type":2543,"tag":2826,"props":12996,"children":12997},{"class":2828,"line":2502},[12998],{"type":2543,"tag":2826,"props":12999,"children":13000},{"style":2905},[13001],{"type":2548,"value":4753},{"type":2543,"tag":2826,"props":13003,"children":13004},{"class":2828,"line":2468},[13005,13010,13014,13018,13023,13027],{"type":2543,"tag":2826,"props":13006,"children":13007},{"style":2832},[13008],{"type":2548,"value":13009},"  name",{"type":2543,"tag":2826,"props":13011,"children":13012},{"style":2905},[13013],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":13015,"children":13016},{"style":2905},[13017],{"type":2548,"value":4150},{"type":2543,"tag":2826,"props":13019,"children":13020},{"style":2838},[13021],{"type":2548,"value":13022},"nuxt-session",{"type":2543,"tag":2826,"props":13024,"children":13025},{"style":2905},[13026],{"type":2548,"value":4490},{"type":2543,"tag":2826,"props":13028,"children":13029},{"style":2905},[13030],{"type":2548,"value":4839},{"type":2543,"tag":2826,"props":13032,"children":13033},{"class":2828,"line":2452},[13034,13039,13043,13048,13052,13057,13061,13065,13070,13075],{"type":2543,"tag":2826,"props":13035,"children":13036},{"style":2832},[13037],{"type":2548,"value":13038},"  password",{"type":2543,"tag":2826,"props":13040,"children":13041},{"style":2905},[13042],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":13044,"children":13045},{"style":2900},[13046],{"type":2548,"value":13047}," process",{"type":2543,"tag":2826,"props":13049,"children":13050},{"style":2905},[13051],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":13053,"children":13054},{"style":2900},[13055],{"type":2548,"value":13056},"env",{"type":2543,"tag":2826,"props":13058,"children":13059},{"style":2905},[13060],{"type":2548,"value":2781},{"type":2543,"tag":2826,"props":13062,"children":13063},{"style":2900},[13064],{"type":2548,"value":2870},{"type":2543,"tag":2826,"props":13066,"children":13067},{"style":2905},[13068],{"type":2548,"value":13069}," ||",{"type":2543,"tag":2826,"props":13071,"children":13072},{"style":2905},[13073],{"type":2548,"value":13074}," ''",{"type":2543,"tag":2826,"props":13076,"children":13077},{"style":2905},[13078],{"type":2548,"value":4839},{"type":2543,"tag":2826,"props":13080,"children":13081},{"class":2828,"line":3089},[13082,13087,13091],{"type":2543,"tag":2826,"props":13083,"children":13084},{"style":2832},[13085],{"type":2548,"value":13086},"  cookie",{"type":2543,"tag":2826,"props":13088,"children":13089},{"style":2905},[13090],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":13092,"children":13093},{"style":2905},[13094],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":13096,"children":13097},{"class":2828,"line":3099},[13098,13103,13107,13111,13116],{"type":2543,"tag":2826,"props":13099,"children":13100},{"style":2832},[13101],{"type":2548,"value":13102},"    sameSite",{"type":2543,"tag":2826,"props":13104,"children":13105},{"style":2905},[13106],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":13108,"children":13109},{"style":2905},[13110],{"type":2548,"value":4150},{"type":2543,"tag":2826,"props":13112,"children":13113},{"style":2838},[13114],{"type":2548,"value":13115},"lax",{"type":2543,"tag":2826,"props":13117,"children":13118},{"style":2905},[13119],{"type":2548,"value":4159},{"type":2543,"tag":2826,"props":13121,"children":13122},{"class":2828,"line":3116},[13123],{"type":2543,"tag":2826,"props":13124,"children":13125},{"style":2905},[13126],{"type":2548,"value":4527},{"type":2543,"tag":2826,"props":13128,"children":13129},{"class":2828,"line":2448},[13130],{"type":2543,"tag":2826,"props":13131,"children":13132},{"style":2905},[13133],{"type":2548,"value":4005},{"type":2543,"tag":2550,"props":13135,"children":13136},{},[13137,13139,13145,13146,13152],{"type":2548,"value":13138},"You can also overwrite the session config by passing it as 3rd argument of the ",{"type":2543,"tag":2688,"props":13140,"children":13142},{"className":13141},[],[13143],{"type":2548,"value":13144},"setUserSession",{"type":2548,"value":5659},{"type":2543,"tag":2688,"props":13147,"children":13149},{"className":13148},[],[13150],{"type":2548,"value":13151},"replaceUserSession",{"type":2548,"value":13153}," functions:",{"type":2543,"tag":2816,"props":13155,"children":13157},{"className":3505,"code":13156,"language":3507,"meta":2416,"style":2416},"await setUserSession(event, { ... } , {\n  maxAge: 60 * 60 * 24 * 7 \u002F\u002F 1 week\n})\n",[13158],{"type":2543,"tag":2688,"props":13159,"children":13160},{"__ignoreMap":2416},[13161,13202,13246],{"type":2543,"tag":2826,"props":13162,"children":13163},{"class":2828,"line":2502},[13164,13168,13172,13176,13180,13184,13189,13193,13198],{"type":2543,"tag":2826,"props":13165,"children":13166},{"style":4089},[13167],{"type":2548,"value":4092},{"type":2543,"tag":2826,"props":13169,"children":13170},{"style":3062},[13171],{"type":2548,"value":4097},{"type":2543,"tag":2826,"props":13173,"children":13174},{"style":2900},[13175],{"type":2548,"value":4102},{"type":2543,"tag":2826,"props":13177,"children":13178},{"style":2905},[13179],{"type":2548,"value":3008},{"type":2543,"tag":2826,"props":13181,"children":13182},{"style":2905},[13183],{"type":2548,"value":2998},{"type":2543,"tag":2826,"props":13185,"children":13186},{"style":2905},[13187],{"type":2548,"value":13188}," ...",{"type":2543,"tag":2826,"props":13190,"children":13191},{"style":2905},[13192],{"type":2548,"value":6939},{"type":2543,"tag":2826,"props":13194,"children":13195},{"style":2905},[13196],{"type":2548,"value":13197}," ,",{"type":2543,"tag":2826,"props":13199,"children":13200},{"style":2905},[13201],{"type":2548,"value":3529},{"type":2543,"tag":2826,"props":13203,"children":13204},{"class":2828,"line":2468},[13205,13210,13214,13218,13222,13226,13230,13234,13238,13242],{"type":2543,"tag":2826,"props":13206,"children":13207},{"style":2971},[13208],{"type":2548,"value":13209},"  maxAge",{"type":2543,"tag":2826,"props":13211,"children":13212},{"style":2905},[13213],{"type":2548,"value":3566},{"type":2543,"tag":2826,"props":13215,"children":13216},{"style":6427},[13217],{"type":2548,"value":12925},{"type":2543,"tag":2826,"props":13219,"children":13220},{"style":2905},[13221],{"type":2548,"value":12930},{"type":2543,"tag":2826,"props":13223,"children":13224},{"style":6427},[13225],{"type":2548,"value":12925},{"type":2543,"tag":2826,"props":13227,"children":13228},{"style":2905},[13229],{"type":2548,"value":12930},{"type":2543,"tag":2826,"props":13231,"children":13232},{"style":6427},[13233],{"type":2548,"value":12943},{"type":2543,"tag":2826,"props":13235,"children":13236},{"style":2905},[13237],{"type":2548,"value":12930},{"type":2543,"tag":2826,"props":13239,"children":13240},{"style":6427},[13241],{"type":2548,"value":12952},{"type":2543,"tag":2826,"props":13243,"children":13244},{"style":2891},[13245],{"type":2548,"value":12957},{"type":2543,"tag":2826,"props":13247,"children":13248},{"class":2828,"line":2452},[13249,13253],{"type":2543,"tag":2826,"props":13250,"children":13251},{"style":2905},[13252],{"type":2548,"value":3054},{"type":2543,"tag":2826,"props":13254,"children":13255},{"style":2900},[13256],{"type":2548,"value":4269},{"type":2543,"tag":2550,"props":13258,"children":13259},{},[13260,13262,13273],{"type":2548,"value":13261},"Checkout the ",{"type":2543,"tag":2554,"props":13263,"children":13266},{"href":13264,"rel":13265},"https:\u002F\u002Fgithub.com\u002Funjs\u002Fh3\u002Fblob\u002Fc04c458810e34eb15c1647e1369e7d7ef19f567d\u002Fsrc\u002Futils\u002Fsession.ts#L20",[2558],[13267],{"type":2543,"tag":2688,"props":13268,"children":13270},{"className":13269},[],[13271],{"type":2548,"value":13272},"SessionConfig",{"type":2548,"value":13274}," for all options.",{"type":2543,"tag":2634,"props":13276,"children":13278},{"id":13277},"more",[13279],{"type":2548,"value":13280},"More",{"type":2543,"tag":2600,"props":13282,"children":13283},{},[13284],{"type":2543,"tag":2604,"props":13285,"children":13286},{},[13287,13294,13296],{"type":2543,"tag":2554,"props":13288,"children":13291},{"href":13289,"rel":13290},"https:\u002F\u002Fgithub.com\u002Fbarbapapazes\u002Fnuxt-authorization",[2558],[13292],{"type":2548,"value":13293},"nuxt-authorization",{"type":2548,"value":13295},": Authorization module for managing permissions inside a Nuxt app, compatible with ",{"type":2543,"tag":2688,"props":13297,"children":13299},{"className":13298},[],[13300],{"type":2548,"value":2415},{"type":2543,"tag":2634,"props":13302,"children":13304},{"id":13303},"development",[13305],{"type":2548,"value":13306},"Development",{"type":2543,"tag":2816,"props":13308,"children":13310},{"className":2818,"code":13309,"language":2820,"meta":2416,"style":2416},"# Install dependencies\npnpm install\n\n# Generate type stubs\npnpm run dev:prepare\n\n# Develop with the playground\npnpm run dev\n\n# Build the playground\npnpm run dev:build\n\n# Run ESLint\npnpm run lint\n\n# Run Vitest\npnpm run test\npnpm run test:watch\n\n# Release new version\npnpm run release\n",[13311],{"type":2543,"tag":2688,"props":13312,"children":13313},{"__ignoreMap":2416},[13314,13322,13335,13342,13350,13367,13374,13382,13398,13405,13413,13429,13436,13444,13460,13467,13475,13491,13507,13514,13522],{"type":2543,"tag":2826,"props":13315,"children":13316},{"class":2828,"line":2502},[13317],{"type":2543,"tag":2826,"props":13318,"children":13319},{"style":2891},[13320],{"type":2548,"value":13321},"# Install dependencies\n",{"type":2543,"tag":2826,"props":13323,"children":13324},{"class":2828,"line":2468},[13325,13330],{"type":2543,"tag":2826,"props":13326,"children":13327},{"style":2832},[13328],{"type":2548,"value":13329},"pnpm",{"type":2543,"tag":2826,"props":13331,"children":13332},{"style":2838},[13333],{"type":2548,"value":13334}," install\n",{"type":2543,"tag":2826,"props":13336,"children":13337},{"class":2828,"line":2452},[13338],{"type":2543,"tag":2826,"props":13339,"children":13340},{"emptyLinePlaceholder":3093},[13341],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":13343,"children":13344},{"class":2828,"line":3089},[13345],{"type":2543,"tag":2826,"props":13346,"children":13347},{"style":2891},[13348],{"type":2548,"value":13349},"# Generate type stubs\n",{"type":2543,"tag":2826,"props":13351,"children":13352},{"class":2828,"line":3099},[13353,13357,13362],{"type":2543,"tag":2826,"props":13354,"children":13355},{"style":2832},[13356],{"type":2548,"value":13329},{"type":2543,"tag":2826,"props":13358,"children":13359},{"style":2838},[13360],{"type":2548,"value":13361}," run",{"type":2543,"tag":2826,"props":13363,"children":13364},{"style":2838},[13365],{"type":2548,"value":13366}," dev:prepare\n",{"type":2543,"tag":2826,"props":13368,"children":13369},{"class":2828,"line":3116},[13370],{"type":2543,"tag":2826,"props":13371,"children":13372},{"emptyLinePlaceholder":3093},[13373],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":13375,"children":13376},{"class":2828,"line":2448},[13377],{"type":2543,"tag":2826,"props":13378,"children":13379},{"style":2891},[13380],{"type":2548,"value":13381},"# Develop with the playground\n",{"type":2543,"tag":2826,"props":13383,"children":13384},{"class":2828,"line":2444},[13385,13389,13393],{"type":2543,"tag":2826,"props":13386,"children":13387},{"style":2832},[13388],{"type":2548,"value":13329},{"type":2543,"tag":2826,"props":13390,"children":13391},{"style":2838},[13392],{"type":2548,"value":13361},{"type":2543,"tag":2826,"props":13394,"children":13395},{"style":2838},[13396],{"type":2548,"value":13397}," dev\n",{"type":2543,"tag":2826,"props":13399,"children":13400},{"class":2828,"line":2440},[13401],{"type":2543,"tag":2826,"props":13402,"children":13403},{"emptyLinePlaceholder":3093},[13404],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":13406,"children":13407},{"class":2828,"line":3278},[13408],{"type":2543,"tag":2826,"props":13409,"children":13410},{"style":2891},[13411],{"type":2548,"value":13412},"# Build the playground\n",{"type":2543,"tag":2826,"props":13414,"children":13415},{"class":2828,"line":2531},[13416,13420,13424],{"type":2543,"tag":2826,"props":13417,"children":13418},{"style":2832},[13419],{"type":2548,"value":13329},{"type":2543,"tag":2826,"props":13421,"children":13422},{"style":2838},[13423],{"type":2548,"value":13361},{"type":2543,"tag":2826,"props":13425,"children":13426},{"style":2838},[13427],{"type":2548,"value":13428}," dev:build\n",{"type":2543,"tag":2826,"props":13430,"children":13431},{"class":2828,"line":3315},[13432],{"type":2543,"tag":2826,"props":13433,"children":13434},{"emptyLinePlaceholder":3093},[13435],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":13437,"children":13438},{"class":2828,"line":3348},[13439],{"type":2543,"tag":2826,"props":13440,"children":13441},{"style":2891},[13442],{"type":2548,"value":13443},"# Run ESLint\n",{"type":2543,"tag":2826,"props":13445,"children":13446},{"class":2828,"line":3403},[13447,13451,13455],{"type":2543,"tag":2826,"props":13448,"children":13449},{"style":2832},[13450],{"type":2548,"value":13329},{"type":2543,"tag":2826,"props":13452,"children":13453},{"style":2838},[13454],{"type":2548,"value":13361},{"type":2543,"tag":2826,"props":13456,"children":13457},{"style":2838},[13458],{"type":2548,"value":13459}," lint\n",{"type":2543,"tag":2826,"props":13461,"children":13462},{"class":2828,"line":3412},[13463],{"type":2543,"tag":2826,"props":13464,"children":13465},{"emptyLinePlaceholder":3093},[13466],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":13468,"children":13469},{"class":2828,"line":2436},[13470],{"type":2543,"tag":2826,"props":13471,"children":13472},{"style":2891},[13473],{"type":2548,"value":13474},"# Run Vitest\n",{"type":2543,"tag":2826,"props":13476,"children":13477},{"class":2828,"line":3480},[13478,13482,13486],{"type":2543,"tag":2826,"props":13479,"children":13480},{"style":2832},[13481],{"type":2548,"value":13329},{"type":2543,"tag":2826,"props":13483,"children":13484},{"style":2838},[13485],{"type":2548,"value":13361},{"type":2543,"tag":2826,"props":13487,"children":13488},{"style":2838},[13489],{"type":2548,"value":13490}," test\n",{"type":2543,"tag":2826,"props":13492,"children":13493},{"class":2828,"line":3750},[13494,13498,13502],{"type":2543,"tag":2826,"props":13495,"children":13496},{"style":2832},[13497],{"type":2548,"value":13329},{"type":2543,"tag":2826,"props":13499,"children":13500},{"style":2838},[13501],{"type":2548,"value":13361},{"type":2543,"tag":2826,"props":13503,"children":13504},{"style":2838},[13505],{"type":2548,"value":13506}," test:watch\n",{"type":2543,"tag":2826,"props":13508,"children":13509},{"class":2828,"line":3758},[13510],{"type":2543,"tag":2826,"props":13511,"children":13512},{"emptyLinePlaceholder":3093},[13513],{"type":2548,"value":3096},{"type":2543,"tag":2826,"props":13515,"children":13516},{"class":2828,"line":3767},[13517],{"type":2543,"tag":2826,"props":13518,"children":13519},{"style":2891},[13520],{"type":2548,"value":13521},"# Release new version\n",{"type":2543,"tag":2826,"props":13523,"children":13524},{"class":2828,"line":3775},[13525,13529,13533],{"type":2543,"tag":2826,"props":13526,"children":13527},{"style":2832},[13528],{"type":2548,"value":13329},{"type":2543,"tag":2826,"props":13530,"children":13531},{"style":2838},[13532],{"type":2548,"value":13361},{"type":2543,"tag":2826,"props":13534,"children":13535},{"style":2838},[13536],{"type":2548,"value":13537}," release\n",{"type":2543,"tag":13539,"props":13540,"children":13541},"style",{},[13542],{"type":2548,"value":13543},"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);}",{"title":2416,"searchDepth":2468,"depth":2468,"links":13545},[13546,13547,13548,13549,13552,13560,13561,13566,13567,13568,13569],{"id":2636,"depth":2468,"text":450},{"id":2754,"depth":2468,"text":2757},{"id":2795,"depth":2468,"text":2798},{"id":2936,"depth":2468,"text":2939,"children":13550},[13551],{"id":2948,"depth":2452,"text":2951},{"id":4030,"depth":2468,"text":4033,"children":13553},[13554,13555,13556,13557,13558,13559],{"id":4049,"depth":2452,"text":4052},{"id":4643,"depth":2452,"text":4646},{"id":5644,"depth":2452,"text":2670},{"id":6096,"depth":2452,"text":6099},{"id":6246,"depth":2452,"text":2679},{"id":10160,"depth":2452,"text":10163},{"id":10453,"depth":2468,"text":10456},{"id":10728,"depth":2468,"text":2650,"children":13562},[13563,13564],{"id":10899,"depth":2452,"text":10902},{"id":11027,"depth":2452,"text":13565},"\u003CAuthState> component",{"id":11748,"depth":2468,"text":11751},{"id":12772,"depth":2468,"text":27},{"id":13277,"depth":2468,"text":13280},{"id":13303,"depth":2468,"text":13306},{"v5":13571,"v4":13572,"v3":13573,"v2":13574},"5 (nightly)","4.5.2","3.21.11","2.18.1"]