[{"data":1,"prerenderedAt":1598},["ShallowReactive",2],{"docs-navigation:en":3,"content-page:docs:CpdwAVIWTtjESUkx7NQVBZes8kHm5ovXUUmpKbZlSus":595,"content-page-surround:docs:CpdwAVIWTtjESUkx7NQVBZes8kHm5ovXUUmpKbZlSus":1586,"i-logos:typescript-icon":1591,"i-lucide:clipboard":1595},[4,55,123,191,450,509,554,590],{"title":5,"page":6,"canonicalKey":7,"locale":8,"id":9,"draft":6,"icon":10,"sidebar":11,"children":12},"Learn",false,"1","en","content:docs:1.overview:.navigation.yml","i-lucide-book-open","section",[13,20,27,34,41,48],{"title":14,"id":15,"canonicalKey":16,"locale":8,"draft":6,"navigation":17,"icon":18,"path":19},"Better Convex Nuxt","content:docs:1.overview:1.introduction.md","1\u002F1",{"icon":18},"i-lucide-orbit","\u002Fdocs\u002Foverview\u002Fintroduction",{"title":21,"id":22,"canonicalKey":23,"locale":8,"draft":6,"navigation":24,"icon":25,"path":26},"Why Better Convex Nuxt","content:docs:1.overview:2.why-better-convex-nuxt.md","1\u002F2",{"icon":25},"i-lucide-badge-check","\u002Fdocs\u002Foverview\u002Fwhy-better-convex-nuxt",{"title":28,"id":29,"canonicalKey":30,"locale":8,"draft":6,"navigation":31,"icon":32,"path":33},"Who It Is For","content:docs:1.overview:3.who-it-is-for.md","1\u002F3",{"icon":32},"i-lucide-users","\u002Fdocs\u002Foverview\u002Fwho-it-is-for",{"title":35,"id":36,"canonicalKey":37,"locale":8,"draft":6,"navigation":38,"icon":39,"path":40},"Use Cases","content:docs:1.overview:4.use-cases.md","1\u002F4",{"icon":39},"i-lucide-layout-dashboard","\u002Fdocs\u002Foverview\u002Fuse-cases",{"title":42,"id":43,"canonicalKey":44,"locale":8,"draft":6,"navigation":45,"icon":46,"path":47},"Compare Nuxt Integrations","content:docs:1.overview:5.comparison.md","1\u002F5",{"icon":46},"i-lucide-scale","\u002Fdocs\u002Foverview\u002Fcomparison",{"title":49,"id":50,"canonicalKey":51,"locale":8,"draft":6,"navigation":52,"icon":53,"path":54},"Limitations and Trade-offs","content:docs:1.overview:6.limitations.md","1\u002F6",{"icon":53},"i-lucide-triangle-alert","\u002Fdocs\u002Foverview\u002Flimitations",{"title":56,"page":6,"canonicalKey":57,"locale":8,"id":58,"draft":6,"icon":59,"children":60},"Understand","2","content:docs:2.understand:.navigation.yml","i-lucide-brain",[61,67,74,81,88,95,102,109,116],{"title":62,"id":63,"canonicalKey":64,"locale":8,"draft":6,"navigation":65,"icon":59,"path":66},"Mental Model","content:docs:2.understand:1.mental-model.md","2\u002F1",{"icon":59},"\u002Fdocs\u002Funderstand\u002Fmental-model",{"title":68,"id":69,"canonicalKey":70,"locale":8,"draft":6,"navigation":71,"icon":72,"path":73},"Request Lifecycle","content:docs:2.understand:2.request-lifecycle.md","2\u002F2",{"icon":72},"i-lucide-route","\u002Fdocs\u002Funderstand\u002Frequest-lifecycle",{"title":75,"id":76,"canonicalKey":77,"locale":8,"draft":6,"navigation":78,"icon":79,"path":80},"SSR, Hydration, and Real-Time","content:docs:2.understand:3.ssr-hydration-realtime.md","2\u002F3",{"icon":79},"i-lucide-refresh-cw","\u002Fdocs\u002Funderstand\u002Fssr-hydration-realtime",{"title":82,"id":83,"canonicalKey":84,"locale":8,"draft":6,"navigation":85,"icon":86,"path":87},"Query Ownership and Caching","content:docs:2.understand:4.query-ownership-and-caching.md","2\u002F4",{"icon":86},"i-lucide-database","\u002Fdocs\u002Funderstand\u002Fquery-ownership-and-caching",{"title":89,"id":90,"canonicalKey":91,"locale":8,"draft":6,"navigation":92,"icon":93,"path":94},"Authentication and Identity","content:docs:2.understand:5.authentication-and-identity.md","2\u002F5",{"icon":93},"i-lucide-fingerprint","\u002Fdocs\u002Funderstand\u002Fauthentication-and-identity",{"title":96,"id":97,"canonicalKey":98,"locale":8,"draft":6,"navigation":99,"icon":100,"path":101},"Server and Client Boundaries","content:docs:2.understand:6.server-and-client-boundaries.md","2\u002F6",{"icon":100},"i-lucide-panels-top-left","\u002Fdocs\u002Funderstand\u002Fserver-and-client-boundaries",{"title":103,"id":104,"canonicalKey":105,"locale":8,"draft":6,"navigation":106,"icon":107,"path":108},"Errors and Failures","content:docs:2.understand:7.errors-and-failures.md","2\u002F7",{"icon":107},"i-lucide-circle-x","\u002Fdocs\u002Funderstand\u002Ferrors-and-failures",{"title":110,"id":111,"canonicalKey":112,"locale":8,"draft":6,"navigation":113,"icon":114,"path":115},"Design Decisions","content:docs:2.understand:8.design-decisions.md","2\u002F8",{"icon":114},"i-lucide-git-branch","\u002Fdocs\u002Funderstand\u002Fdesign-decisions",{"title":117,"id":118,"canonicalKey":119,"locale":8,"draft":6,"navigation":120,"icon":121,"path":122},"Glossary","content:docs:2.understand:9.glossary.md","2\u002F9",{"icon":121},"i-lucide-book-a","\u002Fdocs\u002Funderstand\u002Fglossary",{"title":124,"page":6,"canonicalKey":125,"locale":8,"id":126,"draft":6,"icon":127,"children":128},"Get Started","3","content:docs:3.get-started:.navigation.yml","i-lucide-rocket",[129,136,143,150,157,164,171,178,185],{"title":130,"id":131,"canonicalKey":132,"locale":8,"draft":6,"navigation":133,"icon":134,"path":135},"Choose Your Path","content:docs:3.get-started:1.choose-your-path.md","3\u002F1",{"icon":134},"i-lucide-signpost","\u002Fdocs\u002Fget-started\u002Fchoose-your-path",{"title":137,"id":138,"canonicalKey":139,"locale":8,"draft":6,"navigation":140,"icon":141,"path":142},"Installation","content:docs:3.get-started:2.installation.md","3\u002F2",{"icon":141},"i-lucide-download","\u002Fdocs\u002Fget-started\u002Finstallation",{"title":144,"id":145,"canonicalKey":146,"locale":8,"draft":6,"navigation":147,"icon":148,"path":149},"First Real-Time Page","content:docs:3.get-started:3.first-realtime-page.md","3\u002F3",{"icon":148},"i-lucide-radio","\u002Fdocs\u002Fget-started\u002Ffirst-realtime-page",{"title":151,"id":152,"canonicalKey":153,"locale":8,"draft":6,"navigation":154,"icon":155,"path":156},"Add a Mutation","content:docs:3.get-started:4.add-a-mutation.md","3\u002F4",{"icon":155},"i-lucide-square-pen","\u002Fdocs\u002Fget-started\u002Fadd-a-mutation",{"title":158,"id":159,"canonicalKey":160,"locale":8,"draft":6,"navigation":161,"icon":162,"path":163},"Add Authentication","content:docs:3.get-started:5.add-authentication.md","3\u002F5",{"icon":162},"i-lucide-log-in","\u002Fdocs\u002Fget-started\u002Fadd-authentication",{"title":165,"id":166,"canonicalKey":167,"locale":8,"draft":6,"navigation":168,"icon":169,"path":170},"Protect Data","content:docs:3.get-started:6.protect-data.md","3\u002F6",{"icon":169},"i-lucide-shield-check","\u002Fdocs\u002Fget-started\u002Fprotect-data",{"title":172,"id":173,"canonicalKey":174,"locale":8,"draft":6,"navigation":175,"icon":176,"path":177},"Project Structure","content:docs:3.get-started:7.project-structure.md","3\u002F7",{"icon":176},"i-lucide-folder-tree","\u002Fdocs\u002Fget-started\u002Fproject-structure",{"title":179,"id":180,"canonicalKey":181,"locale":8,"draft":6,"navigation":182,"icon":183,"path":184},"Next Steps","content:docs:3.get-started:8.next-steps.md","3\u002F8",{"icon":183},"i-lucide-arrow-right","\u002Fdocs\u002Fget-started\u002Fnext-steps",{"title":186,"id":187,"canonicalKey":188,"locale":8,"draft":6,"navigation":189,"icon":100,"path":190},"Plain Vue and Vite","content:docs:3.get-started:9.plain-vue.md","3\u002F9",{"icon":100},"\u002Fdocs\u002Fget-started\u002Fplain-vue",{"title":192,"page":6,"canonicalKey":193,"locale":8,"id":194,"draft":6,"icon":195,"sidebar":11,"children":196},"Build","4","content:docs:4.build:.navigation.yml","i-lucide-blocks",[197,234,265,336,368,393,432],{"title":198,"page":6,"canonicalKey":199,"locale":8,"children":200},"Queries","4\u002F1",[201,206,213,220,227],{"title":198,"id":202,"canonicalKey":203,"locale":8,"draft":6,"navigation":204,"icon":86,"path":205},"content:docs:4.build:1.queries:1.queries.md","4\u002F1\u002F1",{"icon":86},"\u002Fdocs\u002Fbuild\u002Fqueries\u002Fqueries",{"title":207,"id":208,"canonicalKey":209,"locale":8,"draft":6,"navigation":210,"icon":211,"path":212},"Reactive Arguments","content:docs:4.build:1.queries:2.reactive-arguments.md","4\u002F1\u002F2",{"icon":211},"i-lucide-sliders-horizontal","\u002Fdocs\u002Fbuild\u002Fqueries\u002Freactive-arguments",{"title":214,"id":215,"canonicalKey":216,"locale":8,"draft":6,"navigation":217,"icon":218,"path":219},"Loading and Stale Data","content:docs:4.build:1.queries:3.loading-and-stale-data.md","4\u002F1\u002F3",{"icon":218},"i-lucide-loader-circle","\u002Fdocs\u002Fbuild\u002Fqueries\u002Floading-and-stale-data",{"title":221,"id":222,"canonicalKey":223,"locale":8,"draft":6,"navigation":224,"icon":225,"path":226},"Query Execution Options","content:docs:4.build:1.queries:4.ssr-options.md","4\u002F1\u002F4",{"icon":225},"i-lucide-server-cog","\u002Fdocs\u002Fbuild\u002Fqueries\u002Fssr-options",{"title":228,"id":229,"canonicalKey":230,"locale":8,"draft":6,"navigation":231,"icon":232,"path":233},"Pagination","content:docs:4.build:1.queries:6.pagination.md","4\u002F1\u002F6",{"icon":232},"i-lucide-list-plus","\u002Fdocs\u002Fbuild\u002Fqueries\u002Fpagination",{"title":235,"page":6,"canonicalKey":236,"locale":8,"children":237},"Write Data","4\u002F2",[238,244,251,258],{"title":239,"id":240,"canonicalKey":241,"locale":8,"draft":6,"navigation":242,"icon":155,"path":243},"Mutations","content:docs:4.build:2.write-data:1.mutations.md","4\u002F2\u002F1",{"icon":155},"\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Fmutations",{"title":245,"id":246,"canonicalKey":247,"locale":8,"draft":6,"navigation":248,"icon":249,"path":250},"Actions","content:docs:4.build:2.write-data:2.actions.md","4\u002F2\u002F2",{"icon":249},"i-lucide-zap","\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Factions",{"title":252,"id":253,"canonicalKey":254,"locale":8,"draft":6,"navigation":255,"icon":256,"path":257},"Optimistic Updates","content:docs:4.build:2.write-data:3.optimistic-updates.md","4\u002F2\u002F3",{"icon":256},"i-lucide-gauge","\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Foptimistic-updates",{"title":259,"id":260,"canonicalKey":261,"locale":8,"draft":6,"navigation":262,"icon":263,"path":264},"Concurrent Operations","content:docs:4.build:2.write-data:4.concurrent-operations.md","4\u002F2\u002F4",{"icon":263},"i-lucide-git-fork","\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Fconcurrent-operations",{"title":266,"page":6,"canonicalKey":267,"locale":8,"children":268},"Authentication","4\u002F3",[269,275,282,289,295,301,308,315,322,329],{"title":266,"id":270,"canonicalKey":271,"locale":8,"draft":6,"navigation":272,"icon":273,"path":274},"content:docs:4.build:3.authentication:1.overview.md","4\u002F3\u002F1",{"icon":273},"i-lucide-shield","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Foverview",{"title":276,"id":277,"canonicalKey":278,"locale":8,"draft":6,"navigation":279,"icon":280,"path":281},"Better Auth Setup","content:docs:4.build:3.authentication:2.better-auth-setup.md","4\u002F3\u002F2",{"icon":280},"i-lucide-settings-2","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fbetter-auth-setup",{"title":283,"id":284,"canonicalKey":285,"locale":8,"draft":6,"navigation":286,"icon":287,"path":288},"Auth State and User Data","content:docs:4.build:3.authentication:3.auth-state-and-user.md","4\u002F3\u002F3",{"icon":287},"i-lucide-user-round","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fauth-state-and-user",{"title":290,"id":291,"canonicalKey":292,"locale":8,"draft":6,"navigation":293,"icon":162,"path":294},"Sign In and Sign Out","content:docs:4.build:3.authentication:4.sign-in-and-sign-out.md","4\u002F3\u002F4",{"icon":162},"\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fsign-in-and-sign-out",{"title":296,"id":297,"canonicalKey":298,"locale":8,"draft":6,"navigation":299,"icon":72,"path":300},"Route Protection","content:docs:4.build:3.authentication:5.route-protection.md","4\u002F3\u002F5",{"icon":72},"\u002Fdocs\u002Fbuild\u002Fauthentication\u002Froute-protection",{"title":302,"id":303,"canonicalKey":304,"locale":8,"draft":6,"navigation":305,"icon":306,"path":307},"Backend Authorization","content:docs:4.build:3.authentication:6.backend-authorization.md","4\u002F3\u002F6",{"icon":306},"i-lucide-lock-keyhole","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fbackend-authorization",{"title":309,"id":310,"canonicalKey":311,"locale":8,"draft":6,"navigation":312,"icon":313,"path":314},"Better Auth Plugins","content:docs:4.build:3.authentication:7.better-auth-plugins.md","4\u002F3\u002F7",{"icon":313},"i-lucide-plug","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fbetter-auth-plugins",{"title":316,"id":317,"canonicalKey":318,"locale":8,"draft":6,"navigation":319,"icon":320,"path":321},"Custom User Fields","content:docs:4.build:3.authentication:8.custom-user-fields.md","4\u002F3\u002F8",{"icon":320},"i-lucide-user-cog","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fcustom-user-fields",{"title":323,"id":324,"canonicalKey":325,"locale":8,"draft":6,"navigation":326,"icon":327,"path":328},"User Synchronization","content:docs:4.build:3.authentication:9.user-synchronization.md","4\u002F3\u002F9",{"icon":327},"i-lucide-refresh-ccw","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fuser-synchronization",{"title":330,"id":331,"canonicalKey":332,"locale":8,"draft":6,"navigation":333,"icon":334,"path":335},"Delegated OAuth and MCP","content:docs:4.build:3.authentication:10.delegated-oauth-and-mcp.md","4\u002F3\u002F10",{"icon":334},"i-lucide-bot","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fdelegated-oauth-and-mcp",{"title":337,"page":6,"canonicalKey":338,"locale":8,"children":339},"Server","4\u002F4",[340,347,354,361],{"title":341,"id":342,"canonicalKey":343,"locale":8,"draft":6,"navigation":344,"icon":345,"path":346},"serverConvex","content:docs:4.build:4.server:1.server-convex.md","4\u002F4\u002F1",{"icon":345},"i-lucide-server","\u002Fdocs\u002Fbuild\u002Fserver\u002Fserver-convex",{"title":348,"id":349,"canonicalKey":350,"locale":8,"draft":6,"navigation":351,"icon":352,"path":353},"Server Routes","content:docs:4.build:4.server:2.server-routes.md","4\u002F4\u002F2",{"icon":352},"i-lucide-waypoints","\u002Fdocs\u002Fbuild\u002Fserver\u002Fserver-routes",{"title":355,"id":356,"canonicalKey":357,"locale":8,"draft":6,"navigation":358,"icon":359,"path":360},"Webhooks and Jobs","content:docs:4.build:4.server:3.webhooks-and-jobs.md","4\u002F4\u002F3",{"icon":359},"i-lucide-webhook","\u002Fdocs\u002Fbuild\u002Fserver\u002Fwebhooks-and-jobs",{"title":362,"id":363,"canonicalKey":364,"locale":8,"draft":6,"navigation":365,"icon":366,"path":367},"Credentials and Server Security","content:docs:4.build:4.server:4.credentials-and-security.md","4\u002F4\u002F4",{"icon":366},"i-lucide-key-round","\u002Fdocs\u002Fbuild\u002Fserver\u002Fcredentials-and-security",{"title":369,"page":6,"canonicalKey":370,"locale":8,"children":371},"Files","4\u002F5",[372,379,386],{"title":373,"id":374,"canonicalKey":375,"locale":8,"draft":6,"navigation":376,"icon":377,"path":378},"Upload Files","content:docs:4.build:5.files:1.upload-files.md","4\u002F5\u002F1",{"icon":377},"i-lucide-upload","\u002Fdocs\u002Fbuild\u002Ffiles\u002Fupload-files",{"title":380,"id":381,"canonicalKey":382,"locale":8,"draft":6,"navigation":383,"icon":384,"path":385},"Storage URLs","content:docs:4.build:5.files:3.storage-urls.md","4\u002F5\u002F3",{"icon":384},"i-lucide-link","\u002Fdocs\u002Fbuild\u002Ffiles\u002Fstorage-urls",{"title":387,"id":388,"canonicalKey":389,"locale":8,"draft":6,"navigation":390,"icon":391,"path":392},"File Validation and Deletion","content:docs:4.build:5.files:4.validation-and-deletion.md","4\u002F5\u002F4",{"icon":391},"i-lucide-file-x","\u002Fdocs\u002Fbuild\u002Ffiles\u002Fvalidation-and-deletion",{"title":394,"page":6,"canonicalKey":395,"locale":8,"children":396},"Application Behavior","4\u002F6",[397,404,411,418,425],{"title":398,"id":399,"canonicalKey":400,"locale":8,"draft":6,"navigation":401,"icon":402,"path":403},"Connection State","content:docs:4.build:6.application-behavior:1.connection-state.md","4\u002F6\u002F1",{"icon":402},"i-lucide-wifi","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Fconnection-state",{"title":405,"id":406,"canonicalKey":407,"locale":8,"draft":6,"navigation":408,"icon":409,"path":410},"Error Handling","content:docs:4.build:6.application-behavior:2.error-handling.md","4\u002F6\u002F2",{"icon":409},"i-lucide-circle-alert","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Ferror-handling",{"title":412,"id":413,"canonicalKey":414,"locale":8,"draft":6,"navigation":415,"icon":416,"path":417},"Logging","content:docs:4.build:6.application-behavior:3.logging.md","4\u002F6\u002F3",{"icon":416},"i-lucide-scroll-text","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Flogging",{"title":419,"id":420,"canonicalKey":421,"locale":8,"draft":6,"navigation":422,"icon":423,"path":424},"DevTools","content:docs:4.build:6.application-behavior:4.devtools.md","4\u002F6\u002F4",{"icon":423},"i-lucide-wrench","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Fdevtools",{"title":426,"id":427,"canonicalKey":428,"locale":8,"draft":6,"navigation":429,"icon":430,"path":431},"Performance","content:docs:4.build:6.application-behavior:5.performance.md","4\u002F6\u002F5",{"icon":430},"i-lucide-chart-no-axes-combined","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Fperformance",{"title":433,"page":6,"canonicalKey":434,"locale":8,"id":435,"draft":6,"icon":334,"children":436},"Agents and MCP","4\u002F7","content:docs:4.build:7.agents:.navigation.yml",[437,444],{"title":438,"id":439,"canonicalKey":440,"locale":8,"draft":6,"navigation":441,"icon":442,"path":443},"MCP on Convex","content:docs:4.build:7.agents:1.mcp.md","4\u002F7\u002F1",{"icon":442},"i-lucide-plug-zap","\u002Fdocs\u002Fbuild\u002Fagents\u002Fmcp",{"title":445,"id":446,"canonicalKey":447,"locale":8,"draft":6,"navigation":448,"icon":100,"path":449},"Vue MCP Apps","content:docs:4.build:7.agents:2.mcp-apps.md","4\u002F7\u002F2",{"icon":100},"\u002Fdocs\u002Fbuild\u002Fagents\u002Fmcp-apps",{"title":451,"page":6,"canonicalKey":452,"locale":8,"id":453,"draft":6,"icon":454,"children":455},"Recipes","5","content:docs:5.recipes:.navigation.yml","i-lucide-cooking-pot",[456,462,469,476,483,490,497,503],{"title":457,"id":458,"canonicalKey":459,"locale":8,"draft":6,"navigation":460,"icon":39,"path":461},"Protected Dashboard","content:docs:5.recipes:1.protected-dashboard.md","5\u002F1",{"icon":39},"\u002Fdocs\u002Frecipes\u002Fprotected-dashboard",{"title":463,"id":464,"canonicalKey":465,"locale":8,"draft":6,"navigation":466,"icon":467,"path":468},"Real-Time Feed","content:docs:5.recipes:2.realtime-feed.md","5\u002F2",{"icon":467},"i-lucide-messages-square","\u002Fdocs\u002Frecipes\u002Frealtime-feed",{"title":470,"id":471,"canonicalKey":472,"locale":8,"draft":6,"navigation":473,"icon":474,"path":475},"Optimistic Todo List","content:docs:5.recipes:3.optimistic-todo-list.md","5\u002F3",{"icon":474},"i-lucide-list-todo","\u002Fdocs\u002Frecipes\u002Foptimistic-todo-list",{"title":477,"id":478,"canonicalKey":479,"locale":8,"draft":6,"navigation":480,"icon":481,"path":482},"Infinite Scroll","content:docs:5.recipes:4.infinite-scroll.md","5\u002F4",{"icon":481},"i-lucide-mouse","\u002Fdocs\u002Frecipes\u002Finfinite-scroll",{"title":484,"id":485,"canonicalKey":486,"locale":8,"draft":6,"navigation":487,"icon":488,"path":489},"File Upload Form","content:docs:5.recipes:5.file-upload-form.md","5\u002F5",{"icon":488},"i-lucide-file-up","\u002Fdocs\u002Frecipes\u002Ffile-upload-form",{"title":491,"id":492,"canonicalKey":493,"locale":8,"draft":6,"navigation":494,"icon":495,"path":496},"Organization Permissions","content:docs:5.recipes:6.organization-permissions.md","5\u002F6",{"icon":495},"i-lucide-building-2","\u002Fdocs\u002Frecipes\u002Forganization-permissions",{"title":498,"id":499,"canonicalKey":500,"locale":8,"draft":6,"navigation":501,"icon":345,"path":502},"Authenticated Server Route","content:docs:5.recipes:7.authenticated-server-route.md","5\u002F7",{"icon":345},"\u002Fdocs\u002Frecipes\u002Fauthenticated-server-route",{"title":504,"id":505,"canonicalKey":506,"locale":8,"draft":6,"navigation":507,"icon":100,"path":508},"Public and Private Data","content:docs:5.recipes:8.public-and-private-data.md","5\u002F8",{"icon":100},"\u002Fdocs\u002Frecipes\u002Fpublic-and-private-data",{"title":510,"page":6,"canonicalKey":511,"locale":8,"id":512,"draft":6,"icon":513,"children":514},"Reference","6","content:docs:6.reference:.navigation.yml","i-lucide-braces",[515,521,527,533,540,547],{"title":516,"id":517,"canonicalKey":518,"locale":8,"draft":6,"navigation":519,"icon":513,"path":520},"Composables","content:docs:6.reference:1.composables.md","6\u002F1",{"icon":513},"\u002Fdocs\u002Freference\u002Fcomposables",{"title":522,"id":523,"canonicalKey":524,"locale":8,"draft":6,"navigation":525,"icon":345,"path":526},"Server API","content:docs:6.reference:3.server-api.md","6\u002F3",{"icon":345},"\u002Fdocs\u002Freference\u002Fserver-api",{"title":528,"id":529,"canonicalKey":530,"locale":8,"draft":6,"navigation":531,"icon":107,"path":532},"Error Types","content:docs:6.reference:4.error-types.md","6\u002F4",{"icon":107},"\u002Fdocs\u002Freference\u002Ferror-types",{"title":534,"id":535,"canonicalKey":536,"locale":8,"draft":6,"navigation":537,"icon":538,"path":539},"Module Configuration","content:docs:6.reference:5.module-configuration.md","6\u002F5",{"icon":538},"i-lucide-settings","\u002Fdocs\u002Freference\u002Fmodule-configuration",{"title":541,"id":542,"canonicalKey":543,"locale":8,"draft":6,"navigation":544,"icon":545,"path":546},"Package Exports","content:docs:6.reference:6.package-exports.md","6\u002F6",{"icon":545},"i-lucide-package-open","\u002Fdocs\u002Freference\u002Fpackage-exports",{"title":548,"id":549,"canonicalKey":550,"locale":8,"draft":6,"navigation":551,"icon":552,"path":553},"API Surface","content:docs:6.reference:7.api-surface.md","6\u002F7",{"icon":552},"i-lucide-list","\u002Fdocs\u002Freference\u002Fapi-surface",{"title":555,"page":6,"canonicalKey":556,"locale":8,"id":557,"draft":6,"icon":280,"children":558},"Operations","7","content:docs:7.operations:.navigation.yml",[559,566,572,578,584],{"title":560,"id":561,"canonicalKey":562,"locale":8,"draft":6,"navigation":563,"icon":564,"path":565},"Environment Variables","content:docs:7.operations:1.environment-variables.md","7\u002F1",{"icon":564},"i-lucide-variable","\u002Fdocs\u002Foperations\u002Fenvironment-variables",{"title":567,"id":568,"canonicalKey":569,"locale":8,"draft":6,"navigation":570,"icon":127,"path":571},"Deployment","content:docs:7.operations:2.deployment.md","7\u002F2",{"icon":127},"\u002Fdocs\u002Foperations\u002Fdeployment",{"title":573,"id":574,"canonicalKey":575,"locale":8,"draft":6,"navigation":576,"icon":169,"path":577},"Security Model","content:docs:7.operations:3.security-model.md","7\u002F3",{"icon":169},"\u002Fdocs\u002Foperations\u002Fsecurity-model",{"title":579,"id":580,"canonicalKey":581,"locale":8,"draft":6,"navigation":582,"icon":423,"path":583},"Troubleshooting","content:docs:7.operations:4.troubleshooting.md","7\u002F4",{"icon":423},"\u002Fdocs\u002Foperations\u002Ftroubleshooting",{"title":585,"id":586,"canonicalKey":587,"locale":8,"draft":6,"navigation":588,"icon":25,"path":589},"Release Compatibility","content:docs:7.operations:5.release-compatibility.md","7\u002F5",{"icon":25},"\u002Fdocs\u002Foperations\u002Frelease-compatibility",{"title":591,"id":592,"canonicalKey":593,"locale":8,"draft":6,"path":594},"Better Convex documentation","content:docs:index.md","\u002F","\u002Fdocs",{"title":348,"description":596,"navigation":597,"body":598,"type":1573,"id":349,"canonicalKey":350,"draft":6,"partial":6,"locale":8,"collection":1574,"navigationFile":6,"file":1575,"route":1581,"resolution":1583},"Decide when a Nuxt API route should call Convex and return a safe server response.",{"icon":352},{"type":599,"children":600,"toc":1563},"root",[601,609,616,646,652,1425,1430,1436,1448,1454,1459,1465],{"type":602,"tag":603,"props":604,"children":605},"element","p",{},[606],{"type":607,"value":608},"text","Do not wrap every Convex function in a Nuxt API route. Browser queries and mutations already call Convex with identity and type safety.",{"type":602,"tag":610,"props":611,"children":613},"h2",{"id":612},"use-a-nitro-route-when",[614],{"type":607,"value":615},"Use a Nitro route when",{"type":602,"tag":617,"props":618,"children":619},"ul",{},[620,626,631,636,641],{"type":602,"tag":621,"props":622,"children":623},"li",{},[624],{"type":607,"value":625},"the operation requires a server-held third-party secret;",{"type":602,"tag":621,"props":627,"children":628},{},[629],{"type":607,"value":630},"an external client calls your Nuxt API rather than Convex directly;",{"type":602,"tag":621,"props":632,"children":633},{},[634],{"type":607,"value":635},"the route verifies a webhook;",{"type":602,"tag":621,"props":637,"children":638},{},[639],{"type":607,"value":640},"Nuxt owns a response contract, cookie, or header;",{"type":602,"tag":621,"props":642,"children":643},{},[644],{"type":607,"value":645},"the operation composes multiple server-only systems.",{"type":602,"tag":610,"props":647,"children":649},{"id":648},"validated-route-example",[650],{"type":607,"value":651},"Validated route example",{"type":602,"tag":653,"props":654,"children":658},"pre",{"language":655,"filename":656,"class":657},"ts","server\u002Fapi\u002Freports.post.ts","shiki shiki-themes light-plus dark-plus dark:dark-plus",[659],{"type":602,"tag":660,"props":661,"children":663},"code",{"class":662},"language-ts",[664,704,706,734,735,764,765,794,795,798,799,839,840,887,888,896,897,900,901,953,954,1012,1013,1045,1046,1094,1095,1103,1104,1107,1108,1120,1121,1203,1204,1239,1240,1248,1249,1275,1276,1310,1311,1371,1372,1409,1410,1417,1418],{"type":602,"tag":665,"props":666,"children":669},"span",{"class":667,"style":668},"line","display: inline",[670,676,682,688,693,698],{"type":602,"tag":665,"props":671,"children":673},{"style":672},"color:#AF00DB;--shiki-dark:#C586C0",[674],{"type":607,"value":675},"import",{"type":602,"tag":665,"props":677,"children":679},{"style":678},"color:#000000;--shiki-dark:#D4D4D4",[680],{"type":607,"value":681}," { ",{"type":602,"tag":665,"props":683,"children":685},{"style":684},"color:#001080;--shiki-dark:#9CDCFE",[686],{"type":607,"value":687},"api",{"type":602,"tag":665,"props":689,"children":690},{"style":678},[691],{"type":607,"value":692}," } ",{"type":602,"tag":665,"props":694,"children":695},{"style":672},[696],{"type":607,"value":697},"from",{"type":602,"tag":665,"props":699,"children":701},{"style":700},"color:#A31515;--shiki-dark:#CE9178",[702],{"type":607,"value":703}," '#convex\u002Fapi'",{"type":607,"value":705},"\n",{"type":602,"tag":665,"props":707,"children":708},{"class":667,"style":668},[709,713,717,721,725,729],{"type":602,"tag":665,"props":710,"children":711},{"style":672},[712],{"type":607,"value":675},{"type":602,"tag":665,"props":714,"children":715},{"style":678},[716],{"type":607,"value":681},{"type":602,"tag":665,"props":718,"children":719},{"style":684},[720],{"type":607,"value":341},{"type":602,"tag":665,"props":722,"children":723},{"style":678},[724],{"type":607,"value":692},{"type":602,"tag":665,"props":726,"children":727},{"style":672},[728],{"type":607,"value":697},{"type":602,"tag":665,"props":730,"children":731},{"style":700},[732],{"type":607,"value":733}," '#convex\u002Fserver'",{"type":607,"value":705},{"type":602,"tag":665,"props":736,"children":737},{"class":667,"style":668},[738,742,746,751,755,759],{"type":602,"tag":665,"props":739,"children":740},{"style":672},[741],{"type":607,"value":675},{"type":602,"tag":665,"props":743,"children":744},{"style":678},[745],{"type":607,"value":681},{"type":602,"tag":665,"props":747,"children":748},{"style":684},[749],{"type":607,"value":750},"normalizeConvexError",{"type":602,"tag":665,"props":752,"children":753},{"style":678},[754],{"type":607,"value":692},{"type":602,"tag":665,"props":756,"children":757},{"style":672},[758],{"type":607,"value":697},{"type":602,"tag":665,"props":760,"children":761},{"style":700},[762],{"type":607,"value":763}," '@lupinum\u002Fbetter-convex-nuxt\u002Ferrors'",{"type":607,"value":705},{"type":602,"tag":665,"props":766,"children":767},{"class":667,"style":668},[768,772,776,781,785,789],{"type":602,"tag":665,"props":769,"children":770},{"style":672},[771],{"type":607,"value":675},{"type":602,"tag":665,"props":773,"children":774},{"style":678},[775],{"type":607,"value":681},{"type":602,"tag":665,"props":777,"children":778},{"style":684},[779],{"type":607,"value":780},"z",{"type":602,"tag":665,"props":782,"children":783},{"style":678},[784],{"type":607,"value":692},{"type":602,"tag":665,"props":786,"children":787},{"style":672},[788],{"type":607,"value":697},{"type":602,"tag":665,"props":790,"children":791},{"style":700},[792],{"type":607,"value":793}," 'zod'",{"type":607,"value":705},{"type":602,"tag":665,"props":796,"children":797},{"class":667,"style":668},[],{"type":607,"value":705},{"type":602,"tag":665,"props":800,"children":801},{"class":667,"style":668},[802,808,814,819,823,828,834],{"type":602,"tag":665,"props":803,"children":805},{"style":804},"color:#0000FF;--shiki-dark:#569CD6",[806],{"type":607,"value":807},"const",{"type":602,"tag":665,"props":809,"children":811},{"style":810},"color:#0070C1;--shiki-dark:#4FC1FF",[812],{"type":607,"value":813}," bodySchema",{"type":602,"tag":665,"props":815,"children":816},{"style":678},[817],{"type":607,"value":818}," = ",{"type":602,"tag":665,"props":820,"children":821},{"style":684},[822],{"type":607,"value":780},{"type":602,"tag":665,"props":824,"children":825},{"style":678},[826],{"type":607,"value":827},".",{"type":602,"tag":665,"props":829,"children":831},{"style":830},"color:#795E26;--shiki-dark:#DCDCAA",[832],{"type":607,"value":833},"object",{"type":602,"tag":665,"props":835,"children":836},{"style":678},[837],{"type":607,"value":838},"({",{"type":607,"value":705},{"type":602,"tag":665,"props":841,"children":842},{"class":667,"style":668},[843,848,853,857,862,867,872,877,882],{"type":602,"tag":665,"props":844,"children":845},{"style":684},[846],{"type":607,"value":847},"  projectId:",{"type":602,"tag":665,"props":849,"children":850},{"style":684},[851],{"type":607,"value":852}," z",{"type":602,"tag":665,"props":854,"children":855},{"style":678},[856],{"type":607,"value":827},{"type":602,"tag":665,"props":858,"children":859},{"style":830},[860],{"type":607,"value":861},"string",{"type":602,"tag":665,"props":863,"children":864},{"style":678},[865],{"type":607,"value":866},"().",{"type":602,"tag":665,"props":868,"children":869},{"style":830},[870],{"type":607,"value":871},"min",{"type":602,"tag":665,"props":873,"children":874},{"style":678},[875],{"type":607,"value":876},"(",{"type":602,"tag":665,"props":878,"children":880},{"style":879},"color:#098658;--shiki-dark:#B5CEA8",[881],{"type":607,"value":7},{"type":602,"tag":665,"props":883,"children":884},{"style":678},[885],{"type":607,"value":886},"),",{"type":607,"value":705},{"type":602,"tag":665,"props":889,"children":890},{"class":667,"style":668},[891],{"type":602,"tag":665,"props":892,"children":893},{"style":678},[894],{"type":607,"value":895},"})",{"type":607,"value":705},{"type":602,"tag":665,"props":898,"children":899},{"class":667,"style":668},[],{"type":607,"value":705},{"type":602,"tag":665,"props":902,"children":903},{"class":667,"style":668},[904,909,914,919,923,928,933,938,943,948],{"type":602,"tag":665,"props":905,"children":906},{"style":672},[907],{"type":607,"value":908},"export",{"type":602,"tag":665,"props":910,"children":911},{"style":672},[912],{"type":607,"value":913}," default",{"type":602,"tag":665,"props":915,"children":916},{"style":830},[917],{"type":607,"value":918}," defineEventHandler",{"type":602,"tag":665,"props":920,"children":921},{"style":678},[922],{"type":607,"value":876},{"type":602,"tag":665,"props":924,"children":925},{"style":804},[926],{"type":607,"value":927},"async",{"type":602,"tag":665,"props":929,"children":930},{"style":678},[931],{"type":607,"value":932}," (",{"type":602,"tag":665,"props":934,"children":935},{"style":684},[936],{"type":607,"value":937},"event",{"type":602,"tag":665,"props":939,"children":940},{"style":678},[941],{"type":607,"value":942},") ",{"type":602,"tag":665,"props":944,"children":945},{"style":804},[946],{"type":607,"value":947},"=>",{"type":602,"tag":665,"props":949,"children":950},{"style":678},[951],{"type":607,"value":952}," {",{"type":607,"value":705},{"type":602,"tag":665,"props":955,"children":956},{"class":667,"style":668},[957,962,967,971,976,980,985,989,994,999,1003,1007],{"type":602,"tag":665,"props":958,"children":959},{"style":804},[960],{"type":607,"value":961},"  const",{"type":602,"tag":665,"props":963,"children":964},{"style":810},[965],{"type":607,"value":966}," parsed",{"type":602,"tag":665,"props":968,"children":969},{"style":678},[970],{"type":607,"value":818},{"type":602,"tag":665,"props":972,"children":973},{"style":684},[974],{"type":607,"value":975},"bodySchema",{"type":602,"tag":665,"props":977,"children":978},{"style":678},[979],{"type":607,"value":827},{"type":602,"tag":665,"props":981,"children":982},{"style":830},[983],{"type":607,"value":984},"safeParse",{"type":602,"tag":665,"props":986,"children":987},{"style":678},[988],{"type":607,"value":876},{"type":602,"tag":665,"props":990,"children":991},{"style":672},[992],{"type":607,"value":993},"await",{"type":602,"tag":665,"props":995,"children":996},{"style":830},[997],{"type":607,"value":998}," readBody",{"type":602,"tag":665,"props":1000,"children":1001},{"style":678},[1002],{"type":607,"value":876},{"type":602,"tag":665,"props":1004,"children":1005},{"style":684},[1006],{"type":607,"value":937},{"type":602,"tag":665,"props":1008,"children":1009},{"style":678},[1010],{"type":607,"value":1011},"))",{"type":607,"value":705},{"type":602,"tag":665,"props":1014,"children":1015},{"class":667,"style":668},[1016,1021,1026,1031,1035,1040],{"type":602,"tag":665,"props":1017,"children":1018},{"style":672},[1019],{"type":607,"value":1020},"  if",{"type":602,"tag":665,"props":1022,"children":1023},{"style":678},[1024],{"type":607,"value":1025}," (!",{"type":602,"tag":665,"props":1027,"children":1028},{"style":684},[1029],{"type":607,"value":1030},"parsed",{"type":602,"tag":665,"props":1032,"children":1033},{"style":678},[1034],{"type":607,"value":827},{"type":602,"tag":665,"props":1036,"children":1037},{"style":684},[1038],{"type":607,"value":1039},"success",{"type":602,"tag":665,"props":1041,"children":1042},{"style":678},[1043],{"type":607,"value":1044},") {",{"type":607,"value":705},{"type":602,"tag":665,"props":1047,"children":1048},{"class":667,"style":668},[1049,1054,1059,1064,1069,1074,1079,1084,1089],{"type":602,"tag":665,"props":1050,"children":1051},{"style":672},[1052],{"type":607,"value":1053},"    throw",{"type":602,"tag":665,"props":1055,"children":1056},{"style":830},[1057],{"type":607,"value":1058}," createError",{"type":602,"tag":665,"props":1060,"children":1061},{"style":678},[1062],{"type":607,"value":1063},"({ ",{"type":602,"tag":665,"props":1065,"children":1066},{"style":684},[1067],{"type":607,"value":1068},"status:",{"type":602,"tag":665,"props":1070,"children":1071},{"style":879},[1072],{"type":607,"value":1073}," 400",{"type":602,"tag":665,"props":1075,"children":1076},{"style":678},[1077],{"type":607,"value":1078},", ",{"type":602,"tag":665,"props":1080,"children":1081},{"style":684},[1082],{"type":607,"value":1083},"statusText:",{"type":602,"tag":665,"props":1085,"children":1086},{"style":700},[1087],{"type":607,"value":1088}," 'Invalid request'",{"type":602,"tag":665,"props":1090,"children":1091},{"style":678},[1092],{"type":607,"value":1093}," })",{"type":607,"value":705},{"type":602,"tag":665,"props":1096,"children":1097},{"class":667,"style":668},[1098],{"type":602,"tag":665,"props":1099,"children":1100},{"style":678},[1101],{"type":607,"value":1102},"  }",{"type":607,"value":705},{"type":602,"tag":665,"props":1105,"children":1106},{"class":667,"style":668},[],{"type":607,"value":705},{"type":602,"tag":665,"props":1109,"children":1110},{"class":667,"style":668},[1111,1116],{"type":602,"tag":665,"props":1112,"children":1113},{"style":672},[1114],{"type":607,"value":1115},"  try",{"type":602,"tag":665,"props":1117,"children":1118},{"style":678},[1119],{"type":607,"value":952},{"type":607,"value":705},{"type":602,"tag":665,"props":1122,"children":1123},{"class":667,"style":668},[1124,1129,1134,1139,1143,1147,1152,1157,1162,1167,1172,1176,1180,1184,1189,1193,1198],{"type":602,"tag":665,"props":1125,"children":1126},{"style":672},[1127],{"type":607,"value":1128},"    return",{"type":602,"tag":665,"props":1130,"children":1131},{"style":672},[1132],{"type":607,"value":1133}," await",{"type":602,"tag":665,"props":1135,"children":1136},{"style":830},[1137],{"type":607,"value":1138}," serverConvex",{"type":602,"tag":665,"props":1140,"children":1141},{"style":678},[1142],{"type":607,"value":876},{"type":602,"tag":665,"props":1144,"children":1145},{"style":684},[1146],{"type":607,"value":937},{"type":602,"tag":665,"props":1148,"children":1149},{"style":678},[1150],{"type":607,"value":1151},", { ",{"type":602,"tag":665,"props":1153,"children":1154},{"style":684},[1155],{"type":607,"value":1156},"auth:",{"type":602,"tag":665,"props":1158,"children":1159},{"style":700},[1160],{"type":607,"value":1161}," 'required'",{"type":602,"tag":665,"props":1163,"children":1164},{"style":678},[1165],{"type":607,"value":1166}," }).",{"type":602,"tag":665,"props":1168,"children":1169},{"style":830},[1170],{"type":607,"value":1171},"action",{"type":602,"tag":665,"props":1173,"children":1174},{"style":678},[1175],{"type":607,"value":876},{"type":602,"tag":665,"props":1177,"children":1178},{"style":684},[1179],{"type":607,"value":687},{"type":602,"tag":665,"props":1181,"children":1182},{"style":678},[1183],{"type":607,"value":827},{"type":602,"tag":665,"props":1185,"children":1186},{"style":684},[1187],{"type":607,"value":1188},"reports",{"type":602,"tag":665,"props":1190,"children":1191},{"style":678},[1192],{"type":607,"value":827},{"type":602,"tag":665,"props":1194,"children":1195},{"style":684},[1196],{"type":607,"value":1197},"generate",{"type":602,"tag":665,"props":1199,"children":1200},{"style":678},[1201],{"type":607,"value":1202},", {",{"type":607,"value":705},{"type":602,"tag":665,"props":1205,"children":1206},{"class":667,"style":668},[1207,1212,1216,1220,1225,1229,1234],{"type":602,"tag":665,"props":1208,"children":1209},{"style":684},[1210],{"type":607,"value":1211},"      projectId:",{"type":602,"tag":665,"props":1213,"children":1214},{"style":684},[1215],{"type":607,"value":966},{"type":602,"tag":665,"props":1217,"children":1218},{"style":678},[1219],{"type":607,"value":827},{"type":602,"tag":665,"props":1221,"children":1222},{"style":684},[1223],{"type":607,"value":1224},"data",{"type":602,"tag":665,"props":1226,"children":1227},{"style":678},[1228],{"type":607,"value":827},{"type":602,"tag":665,"props":1230,"children":1231},{"style":684},[1232],{"type":607,"value":1233},"projectId",{"type":602,"tag":665,"props":1235,"children":1236},{"style":678},[1237],{"type":607,"value":1238},",",{"type":607,"value":705},{"type":602,"tag":665,"props":1241,"children":1242},{"class":667,"style":668},[1243],{"type":602,"tag":665,"props":1244,"children":1245},{"style":678},[1246],{"type":607,"value":1247},"    })",{"type":607,"value":705},{"type":602,"tag":665,"props":1250,"children":1251},{"class":667,"style":668},[1252,1257,1262,1266,1271],{"type":602,"tag":665,"props":1253,"children":1254},{"style":678},[1255],{"type":607,"value":1256},"  } ",{"type":602,"tag":665,"props":1258,"children":1259},{"style":672},[1260],{"type":607,"value":1261},"catch",{"type":602,"tag":665,"props":1263,"children":1264},{"style":678},[1265],{"type":607,"value":932},{"type":602,"tag":665,"props":1267,"children":1268},{"style":684},[1269],{"type":607,"value":1270},"error",{"type":602,"tag":665,"props":1272,"children":1273},{"style":678},[1274],{"type":607,"value":1044},{"type":607,"value":705},{"type":602,"tag":665,"props":1277,"children":1278},{"class":667,"style":668},[1279,1284,1289,1293,1297,1301,1305],{"type":602,"tag":665,"props":1280,"children":1281},{"style":804},[1282],{"type":607,"value":1283},"    const",{"type":602,"tag":665,"props":1285,"children":1286},{"style":810},[1287],{"type":607,"value":1288}," callError",{"type":602,"tag":665,"props":1290,"children":1291},{"style":678},[1292],{"type":607,"value":818},{"type":602,"tag":665,"props":1294,"children":1295},{"style":830},[1296],{"type":607,"value":750},{"type":602,"tag":665,"props":1298,"children":1299},{"style":678},[1300],{"type":607,"value":876},{"type":602,"tag":665,"props":1302,"children":1303},{"style":684},[1304],{"type":607,"value":1270},{"type":602,"tag":665,"props":1306,"children":1307},{"style":678},[1308],{"type":607,"value":1309},")",{"type":607,"value":705},{"type":602,"tag":665,"props":1312,"children":1313},{"class":667,"style":668},[1314,1318,1323,1327,1332,1336,1341,1346,1351,1356,1361,1366],{"type":602,"tag":665,"props":1315,"children":1316},{"style":804},[1317],{"type":607,"value":1283},{"type":602,"tag":665,"props":1319,"children":1320},{"style":810},[1321],{"type":607,"value":1322}," status",{"type":602,"tag":665,"props":1324,"children":1325},{"style":678},[1326],{"type":607,"value":818},{"type":602,"tag":665,"props":1328,"children":1329},{"style":684},[1330],{"type":607,"value":1331},"callError",{"type":602,"tag":665,"props":1333,"children":1334},{"style":678},[1335],{"type":607,"value":827},{"type":602,"tag":665,"props":1337,"children":1338},{"style":684},[1339],{"type":607,"value":1340},"kind",{"type":602,"tag":665,"props":1342,"children":1343},{"style":678},[1344],{"type":607,"value":1345}," === ",{"type":602,"tag":665,"props":1347,"children":1348},{"style":700},[1349],{"type":607,"value":1350},"'authentication'",{"type":602,"tag":665,"props":1352,"children":1353},{"style":678},[1354],{"type":607,"value":1355}," ? ",{"type":602,"tag":665,"props":1357,"children":1358},{"style":879},[1359],{"type":607,"value":1360},"401",{"type":602,"tag":665,"props":1362,"children":1363},{"style":678},[1364],{"type":607,"value":1365}," : ",{"type":602,"tag":665,"props":1367,"children":1368},{"style":879},[1369],{"type":607,"value":1370},"502",{"type":607,"value":705},{"type":602,"tag":665,"props":1373,"children":1374},{"class":667,"style":668},[1375,1379,1383,1387,1392,1396,1400,1405],{"type":602,"tag":665,"props":1376,"children":1377},{"style":672},[1378],{"type":607,"value":1053},{"type":602,"tag":665,"props":1380,"children":1381},{"style":830},[1382],{"type":607,"value":1058},{"type":602,"tag":665,"props":1384,"children":1385},{"style":678},[1386],{"type":607,"value":1063},{"type":602,"tag":665,"props":1388,"children":1389},{"style":684},[1390],{"type":607,"value":1391},"status",{"type":602,"tag":665,"props":1393,"children":1394},{"style":678},[1395],{"type":607,"value":1078},{"type":602,"tag":665,"props":1397,"children":1398},{"style":684},[1399],{"type":607,"value":1083},{"type":602,"tag":665,"props":1401,"children":1402},{"style":700},[1403],{"type":607,"value":1404}," 'Report generation failed'",{"type":602,"tag":665,"props":1406,"children":1407},{"style":678},[1408],{"type":607,"value":1093},{"type":607,"value":705},{"type":602,"tag":665,"props":1411,"children":1412},{"class":667,"style":668},[1413],{"type":602,"tag":665,"props":1414,"children":1415},{"style":678},[1416],{"type":607,"value":1102},{"type":607,"value":705},{"type":602,"tag":665,"props":1419,"children":1420},{"class":667,"style":668},[1421],{"type":602,"tag":665,"props":1422,"children":1423},{"style":678},[1424],{"type":607,"value":895},{"type":602,"tag":603,"props":1426,"children":1427},{},[1428],{"type":607,"value":1429},"Validate at the HTTP boundary and again through Convex argument validators. The Convex function still enforces product authorization.",{"type":602,"tag":610,"props":1431,"children":1433},{"id":1432},"return-safe-errors",[1434],{"type":607,"value":1435},"Return safe errors",{"type":602,"tag":603,"props":1437,"children":1438},{},[1439,1441,1446],{"type":607,"value":1440},"Do not serialize raw upstream errors, request objects, or credentials. ",{"type":602,"tag":660,"props":1442,"children":1443},{},[1444],{"type":607,"value":1445},"ConvexCallError",{"type":607,"value":1447}," deliberately\ndoes not retain the raw upstream cause. Map expected domain errors to a public response contract and log\nonly sanitized diagnostics.",{"type":602,"tag":610,"props":1449,"children":1451},{"id":1450},"server-middleware",[1452],{"type":607,"value":1453},"Server middleware",{"type":602,"tag":603,"props":1455,"children":1456},{},[1457],{"type":607,"value":1458},"Middleware can create a caller for request-scoped checks, but avoid turning every page request into an extra Convex call. Prefer route metadata and page queries when they already express the requirement.",{"type":602,"tag":610,"props":1460,"children":1462},{"id":1461},"direct-call-or-route",[1463],{"type":607,"value":1464},"Direct call or route",{"type":602,"tag":1466,"props":1467,"children":1468},"table",{},[1469,1488],{"type":602,"tag":1470,"props":1471,"children":1472},"thead",{},[1473],{"type":602,"tag":1474,"props":1475,"children":1476},"tr",{},[1477,1483],{"type":602,"tag":1478,"props":1479,"children":1480},"th",{},[1481],{"type":607,"value":1482},"Requirement",{"type":602,"tag":1478,"props":1484,"children":1485},{},[1486],{"type":607,"value":1487},"Use",{"type":602,"tag":1489,"props":1490,"children":1491},"tbody",{},[1492,1509,1525,1538,1550],{"type":602,"tag":1474,"props":1493,"children":1494},{},[1495,1501],{"type":602,"tag":1496,"props":1497,"children":1498},"td",{},[1499],{"type":607,"value":1500},"Live page data",{"type":602,"tag":1496,"props":1502,"children":1503},{},[1504],{"type":602,"tag":660,"props":1505,"children":1506},{},[1507],{"type":607,"value":1508},"useConvexQuery",{"type":602,"tag":1474,"props":1510,"children":1511},{},[1512,1517],{"type":602,"tag":1496,"props":1513,"children":1514},{},[1515],{"type":607,"value":1516},"Interactive write",{"type":602,"tag":1496,"props":1518,"children":1519},{},[1520],{"type":602,"tag":660,"props":1521,"children":1522},{},[1523],{"type":607,"value":1524},"useConvexMutation",{"type":602,"tag":1474,"props":1526,"children":1527},{},[1528,1533],{"type":602,"tag":1496,"props":1529,"children":1530},{},[1531],{"type":607,"value":1532},"Server-held secret",{"type":602,"tag":1496,"props":1534,"children":1535},{},[1536],{"type":607,"value":1537},"Nitro route",{"type":602,"tag":1474,"props":1539,"children":1540},{},[1541,1546],{"type":602,"tag":1496,"props":1542,"children":1543},{},[1544],{"type":607,"value":1545},"External webhook",{"type":602,"tag":1496,"props":1547,"children":1548},{},[1549],{"type":607,"value":1537},{"type":602,"tag":1474,"props":1551,"children":1552},{},[1553,1558],{"type":602,"tag":1496,"props":1554,"children":1555},{},[1556],{"type":607,"value":1557},"Scheduled Convex work",{"type":602,"tag":1496,"props":1559,"children":1560},{},[1561],{"type":607,"value":1562},"Convex scheduler\u002Fcron",{"title":1564,"searchDepth":1565,"depth":1565,"links":1566},"",4,[1567,1569,1570,1571,1572],{"id":612,"depth":1568,"text":615},2,{"id":648,"depth":1568,"text":651},{"id":1432,"depth":1568,"text":1435},{"id":1450,"depth":1568,"text":1453},{"id":1461,"depth":1568,"text":1464},"markdown","docs",{"source":1576,"path":1577,"stem":1578,"dir":1579,"extension":1580},"content","docs\u002F4.build\u002F4.server\u002F2.server-routes.md","docs\u002F4.build\u002F4.server\u002F2.server-routes","server","md",{"requestedPath":353,"resolvedPath":353,"alternates":1582},[],{"requested":1584,"resolved":1585,"usedFallback":6},{},{"locale":8},{"previous":1587,"next":1589},{"title":341,"id":342,"canonicalKey":343,"locale":8,"draft":6,"navigation":1588,"icon":345,"path":346},{"icon":345},{"title":355,"id":356,"canonicalKey":357,"locale":8,"draft":6,"navigation":1590,"icon":359,"path":360},{"icon":359},{"left":1592,"top":1592,"width":1593,"height":1593,"rotate":1592,"vFlip":6,"hFlip":6,"body":1594},0,256,"\u003Cpath fill=\"#3178c6\" d=\"M20 0h216c11.046 0 20 8.954 20 20v216c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20V20C0 8.954 8.954 0 20 0\"\u002F>\u003Cpath fill=\"#fff\" d=\"M150.518 200.475v27.62q6.738 3.453 15.938 5.179T185.849 235q9.934 0 18.874-1.899t15.678-6.257q6.738-4.359 10.669-11.394q3.93-7.033 3.93-17.391q0-7.51-2.246-13.163a30.8 30.8 0 0 0-6.479-10.055q-4.232-4.402-10.149-7.898t-13.347-6.602q-5.442-2.245-9.761-4.359t-7.342-4.316q-3.024-2.2-4.665-4.661t-1.641-5.567q0-2.848 1.468-5.135q1.469-2.288 4.147-3.927t6.565-2.547q3.887-.906 8.638-.906q3.456 0 7.299.518q3.844.517 7.732 1.597a54 54 0 0 1 7.558 2.719a41.7 41.7 0 0 1 6.781 3.797v-25.807q-6.306-2.417-13.778-3.582T198.633 107q-9.847 0-18.658 2.115q-8.811 2.114-15.506 6.602q-6.694 4.49-10.582 11.437Q150 134.102 150 143.769q0 12.342 7.127 21.06t21.638 14.759a292 292 0 0 1 10.625 4.575q4.924 2.244 8.509 4.66t5.658 5.265t2.073 6.474a9.9 9.9 0 0 1-1.296 4.963q-1.295 2.287-3.93 3.97t-6.565 2.632t-9.2.95q-8.983 0-17.794-3.151t-16.327-9.451m-46.036-68.733H140V109H41v22.742h35.345V233h28.137z\"\u002F>",{"left":1592,"top":1592,"width":1596,"height":1596,"rotate":1592,"vFlip":6,"hFlip":6,"body":1597},24,"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\"\u002F>\u003Cpath d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"\u002F>\u003C\u002Fg>",1786627521946]