[{"data":1,"prerenderedAt":1887},["ShallowReactive",2],{"docs-navigation:en":3,"content-page:docs:mi3ObwrqKaKEd5Z_XRSHNqCMFh_aAO57SHixEcT8rsc":651,"content-page-surround:docs:mi3ObwrqKaKEd5Z_XRSHNqCMFh_aAO57SHixEcT8rsc":1875,"i-logos:typescript-icon":1880,"i-lucide:clipboard":1884},[4,41,110,418,485,550,601,646],{"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],{"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},"Who it is for","content:docs:1.overview:2.who-it-is-for.md","1\u002F2",{"icon":25},"i-lucide-users","\u002Fdocs\u002Foverview\u002Fwho-it-is-for",{"title":28,"id":29,"canonicalKey":30,"locale":8,"draft":6,"navigation":31,"icon":32,"path":33},"Limitations and trade-offs","content:docs:1.overview:3.limitations.md","1\u002F3",{"icon":32},"i-lucide-triangle-alert","\u002Fdocs\u002Foverview\u002Flimitations",{"title":35,"id":36,"canonicalKey":37,"locale":8,"draft":6,"navigation":38,"icon":39,"path":40},"Compare Nuxt integrations","content:docs:1.overview:4.comparison.md","1\u002F4",{"icon":39},"i-lucide-scale","\u002Fdocs\u002Foverview\u002Fcomparison",{"title":42,"page":6,"canonicalKey":43,"locale":8,"id":44,"draft":6,"icon":45,"children":46},"Get started","2","content:docs:2.get-started:.navigation.yml","i-lucide-rocket",[47,54,61,68,75,82,89,96,103],{"title":48,"id":49,"canonicalKey":50,"locale":8,"draft":6,"navigation":51,"icon":52,"path":53},"Choose your path","content:docs:2.get-started:1.choose-your-path.md","2\u002F1",{"icon":52},"i-lucide-signpost","\u002Fdocs\u002Fget-started\u002Fchoose-your-path",{"title":55,"id":56,"canonicalKey":57,"locale":8,"draft":6,"navigation":58,"icon":59,"path":60},"Installation","content:docs:2.get-started:2.installation.md","2\u002F2",{"icon":59},"i-lucide-download","\u002Fdocs\u002Fget-started\u002Finstallation",{"title":62,"id":63,"canonicalKey":64,"locale":8,"draft":6,"navigation":65,"icon":66,"path":67},"First real-time page","content:docs:2.get-started:3.first-realtime-page.md","2\u002F3",{"icon":66},"i-lucide-radio","\u002Fdocs\u002Fget-started\u002Ffirst-realtime-page",{"title":69,"id":70,"canonicalKey":71,"locale":8,"draft":6,"navigation":72,"icon":73,"path":74},"Add a mutation","content:docs:2.get-started:4.add-a-mutation.md","2\u002F4",{"icon":73},"i-lucide-square-pen","\u002Fdocs\u002Fget-started\u002Fadd-a-mutation",{"title":76,"id":77,"canonicalKey":78,"locale":8,"draft":6,"navigation":79,"icon":80,"path":81},"Add authentication","content:docs:2.get-started:5.add-authentication.md","2\u002F5",{"icon":80},"i-lucide-log-in","\u002Fdocs\u002Fget-started\u002Fadd-authentication",{"title":83,"id":84,"canonicalKey":85,"locale":8,"draft":6,"navigation":86,"icon":87,"path":88},"Protect data","content:docs:2.get-started:6.protect-data.md","2\u002F6",{"icon":87},"i-lucide-shield-check","\u002Fdocs\u002Fget-started\u002Fprotect-data",{"title":90,"id":91,"canonicalKey":92,"locale":8,"draft":6,"navigation":93,"icon":94,"path":95},"Project structure","content:docs:2.get-started:7.project-structure.md","2\u002F7",{"icon":94},"i-lucide-folder-tree","\u002Fdocs\u002Fget-started\u002Fproject-structure",{"title":97,"id":98,"canonicalKey":99,"locale":8,"draft":6,"navigation":100,"icon":101,"path":102},"Next steps","content:docs:2.get-started:8.next-steps.md","2\u002F8",{"icon":101},"i-lucide-arrow-right","\u002Fdocs\u002Fget-started\u002Fnext-steps",{"title":104,"id":105,"canonicalKey":106,"locale":8,"draft":6,"navigation":107,"icon":108,"path":109},"Plain Vue and Vite","content:docs:2.get-started:9.plain-vue.md","2\u002F9",{"icon":108},"i-lucide-panels-top-left","\u002Fdocs\u002Fget-started\u002Fplain-vue",{"title":111,"page":6,"canonicalKey":112,"locale":8,"id":113,"draft":6,"icon":114,"sidebar":11,"children":115},"Build","3","content:docs:3.build:.navigation.yml","i-lucide-blocks",[116,154,199,292,324,349,388],{"title":117,"page":6,"canonicalKey":118,"locale":8,"children":119},"Queries","3\u002F1",[120,126,133,140,147],{"title":117,"id":121,"canonicalKey":122,"locale":8,"draft":6,"navigation":123,"icon":124,"path":125},"content:docs:3.build:1.queries:1.queries.md","3\u002F1\u002F1",{"icon":124},"i-lucide-database","\u002Fdocs\u002Fbuild\u002Fqueries\u002Fqueries",{"title":127,"id":128,"canonicalKey":129,"locale":8,"draft":6,"navigation":130,"icon":131,"path":132},"Reactive arguments","content:docs:3.build:1.queries:2.reactive-arguments.md","3\u002F1\u002F2",{"icon":131},"i-lucide-sliders-horizontal","\u002Fdocs\u002Fbuild\u002Fqueries\u002Freactive-arguments",{"title":134,"id":135,"canonicalKey":136,"locale":8,"draft":6,"navigation":137,"icon":138,"path":139},"Loading and stale data","content:docs:3.build:1.queries:3.loading-and-stale-data.md","3\u002F1\u002F3",{"icon":138},"i-lucide-loader-circle","\u002Fdocs\u002Fbuild\u002Fqueries\u002Floading-and-stale-data",{"title":141,"id":142,"canonicalKey":143,"locale":8,"draft":6,"navigation":144,"icon":145,"path":146},"Query execution options","content:docs:3.build:1.queries:4.ssr-options.md","3\u002F1\u002F4",{"icon":145},"i-lucide-server-cog","\u002Fdocs\u002Fbuild\u002Fqueries\u002Fssr-options",{"title":148,"id":149,"canonicalKey":150,"locale":8,"draft":6,"navigation":151,"icon":152,"path":153},"Pagination","content:docs:3.build:1.queries:6.pagination.md","3\u002F1\u002F6",{"icon":152},"i-lucide-list-plus","\u002Fdocs\u002Fbuild\u002Fqueries\u002Fpagination",{"title":155,"page":6,"canonicalKey":156,"locale":8,"children":157},"Write Data","3\u002F2",[158,164,171,178,185,192],{"title":159,"id":160,"canonicalKey":161,"locale":8,"draft":6,"navigation":162,"icon":73,"path":163},"Mutations","content:docs:3.build:2.write-data:1.mutations.md","3\u002F2\u002F1",{"icon":73},"\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Fmutations",{"title":165,"id":166,"canonicalKey":167,"locale":8,"draft":6,"navigation":168,"icon":169,"path":170},"Actions","content:docs:3.build:2.write-data:2.actions.md","3\u002F2\u002F2",{"icon":169},"i-lucide-zap","\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Factions",{"title":172,"id":173,"canonicalKey":174,"locale":8,"draft":6,"navigation":175,"icon":176,"path":177},"Optimistic updates","content:docs:3.build:2.write-data:3.optimistic-updates.md","3\u002F2\u002F3",{"icon":176},"i-lucide-gauge","\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Foptimistic-updates",{"title":179,"id":180,"canonicalKey":181,"locale":8,"draft":6,"navigation":182,"icon":183,"path":184},"Concurrent operations","content:docs:3.build:2.write-data:4.concurrent-operations.md","3\u002F2\u002F4",{"icon":183},"i-lucide-git-fork","\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Fconcurrent-operations",{"title":186,"id":187,"canonicalKey":188,"locale":8,"draft":6,"navigation":189,"icon":190,"path":191},"Form submissions","content:docs:3.build:2.write-data:5.forms.md","3\u002F2\u002F5",{"icon":190},"i-lucide-list-checks","\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Fforms",{"title":193,"id":194,"canonicalKey":195,"locale":8,"draft":6,"navigation":196,"icon":197,"path":198},"Multi-step operations","content:docs:3.build:2.write-data:6.multi-step-operations.md","3\u002F2\u002F6",{"icon":197},"i-lucide-list-ordered","\u002Fdocs\u002Fbuild\u002Fwrite-data\u002Fmulti-step-operations",{"title":200,"page":6,"canonicalKey":201,"locale":8,"children":202},"Authentication","3\u002F3",[203,209,216,223,229,236,243,250,257,264,271,278,285],{"title":200,"id":204,"canonicalKey":205,"locale":8,"draft":6,"navigation":206,"icon":207,"path":208},"content:docs:3.build:3.authentication:1.overview.md","3\u002F3\u002F1",{"icon":207},"i-lucide-shield","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Foverview",{"title":210,"id":211,"canonicalKey":212,"locale":8,"draft":6,"navigation":213,"icon":214,"path":215},"Better Auth setup","content:docs:3.build:3.authentication:2.better-auth-setup.md","3\u002F3\u002F2",{"icon":214},"i-lucide-settings-2","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fbetter-auth-setup",{"title":217,"id":218,"canonicalKey":219,"locale":8,"draft":6,"navigation":220,"icon":221,"path":222},"Auth state and user data","content:docs:3.build:3.authentication:3.auth-state-and-user.md","3\u002F3\u002F3",{"icon":221},"i-lucide-user-round","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fauth-state-and-user",{"title":224,"id":225,"canonicalKey":226,"locale":8,"draft":6,"navigation":227,"icon":80,"path":228},"Sign in and sign out","content:docs:3.build:3.authentication:4.sign-in-and-sign-out.md","3\u002F3\u002F4",{"icon":80},"\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fsign-in-and-sign-out",{"title":230,"id":231,"canonicalKey":232,"locale":8,"draft":6,"navigation":233,"icon":234,"path":235},"Route protection","content:docs:3.build:3.authentication:5.route-protection.md","3\u002F3\u002F5",{"icon":234},"i-lucide-route","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Froute-protection",{"title":237,"id":238,"canonicalKey":239,"locale":8,"draft":6,"navigation":240,"icon":241,"path":242},"Backend authorization","content:docs:3.build:3.authentication:6.backend-authorization.md","3\u002F3\u002F6",{"icon":241},"i-lucide-lock-keyhole","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fbackend-authorization",{"title":244,"id":245,"canonicalKey":246,"locale":8,"draft":6,"navigation":247,"icon":248,"path":249},"Better Auth plugins","content:docs:3.build:3.authentication:7.better-auth-plugins.md","3\u002F3\u002F7",{"icon":248},"i-lucide-plug","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fbetter-auth-plugins",{"title":251,"id":252,"canonicalKey":253,"locale":8,"draft":6,"navigation":254,"icon":255,"path":256},"Custom user fields","content:docs:3.build:3.authentication:8.custom-user-fields.md","3\u002F3\u002F8",{"icon":255},"i-lucide-user-cog","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fcustom-user-fields",{"title":258,"id":259,"canonicalKey":260,"locale":8,"draft":6,"navigation":261,"icon":262,"path":263},"User synchronization","content:docs:3.build:3.authentication:9.user-synchronization.md","3\u002F3\u002F9",{"icon":262},"i-lucide-refresh-ccw","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fuser-synchronization",{"title":265,"id":266,"canonicalKey":267,"locale":8,"draft":6,"navigation":268,"icon":269,"path":270},"Delegated OAuth and MCP","content:docs:3.build:3.authentication:10.delegated-oauth-and-mcp.md","3\u002F3\u002F10",{"icon":269},"i-lucide-bot","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fdelegated-oauth-and-mcp",{"title":272,"id":273,"canonicalKey":274,"locale":8,"draft":6,"navigation":275,"icon":276,"path":277},"Transactional auth email","content:docs:3.build:3.authentication:11.transactional-email.md","3\u002F3\u002F11",{"icon":276},"i-lucide-mail","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Ftransactional-email",{"title":279,"id":280,"canonicalKey":281,"locale":8,"draft":6,"navigation":282,"icon":283,"path":284},"Social sign-in","content:docs:3.build:3.authentication:12.social-sign-in.md","3\u002F3\u002F12",{"icon":283},"i-lucide-github","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fsocial-sign-in",{"title":286,"id":287,"canonicalKey":288,"locale":8,"draft":6,"navigation":289,"icon":290,"path":291},"Better Auth plugin support","content:docs:3.build:3.authentication:13.better-auth-plugin-support.md","3\u002F3\u002F13",{"icon":290},"i-lucide-puzzle","\u002Fdocs\u002Fbuild\u002Fauthentication\u002Fbetter-auth-plugin-support",{"title":293,"page":6,"canonicalKey":294,"locale":8,"children":295},"Server","3\u002F4",[296,303,310,317],{"title":297,"id":298,"canonicalKey":299,"locale":8,"draft":6,"navigation":300,"icon":301,"path":302},"serverConvex","content:docs:3.build:4.server:1.server-convex.md","3\u002F4\u002F1",{"icon":301},"i-lucide-server","\u002Fdocs\u002Fbuild\u002Fserver\u002Fserver-convex",{"title":304,"id":305,"canonicalKey":306,"locale":8,"draft":6,"navigation":307,"icon":308,"path":309},"Server routes","content:docs:3.build:4.server:2.server-routes.md","3\u002F4\u002F2",{"icon":308},"i-lucide-waypoints","\u002Fdocs\u002Fbuild\u002Fserver\u002Fserver-routes",{"title":311,"id":312,"canonicalKey":313,"locale":8,"draft":6,"navigation":314,"icon":315,"path":316},"Webhooks and jobs","content:docs:3.build:4.server:3.webhooks-and-jobs.md","3\u002F4\u002F3",{"icon":315},"i-lucide-webhook","\u002Fdocs\u002Fbuild\u002Fserver\u002Fwebhooks-and-jobs",{"title":318,"id":319,"canonicalKey":320,"locale":8,"draft":6,"navigation":321,"icon":322,"path":323},"Credentials and server security","content:docs:3.build:4.server:4.credentials-and-security.md","3\u002F4\u002F4",{"icon":322},"i-lucide-key-round","\u002Fdocs\u002Fbuild\u002Fserver\u002Fcredentials-and-security",{"title":325,"page":6,"canonicalKey":326,"locale":8,"children":327},"Files","3\u002F5",[328,335,342],{"title":329,"id":330,"canonicalKey":331,"locale":8,"draft":6,"navigation":332,"icon":333,"path":334},"Upload files","content:docs:3.build:5.files:1.upload-files.md","3\u002F5\u002F1",{"icon":333},"i-lucide-upload","\u002Fdocs\u002Fbuild\u002Ffiles\u002Fupload-files",{"title":336,"id":337,"canonicalKey":338,"locale":8,"draft":6,"navigation":339,"icon":340,"path":341},"Storage URLs","content:docs:3.build:5.files:3.storage-urls.md","3\u002F5\u002F3",{"icon":340},"i-lucide-link","\u002Fdocs\u002Fbuild\u002Ffiles\u002Fstorage-urls",{"title":343,"id":344,"canonicalKey":345,"locale":8,"draft":6,"navigation":346,"icon":347,"path":348},"File validation and deletion","content:docs:3.build:5.files:4.validation-and-deletion.md","3\u002F5\u002F4",{"icon":347},"i-lucide-file-x","\u002Fdocs\u002Fbuild\u002Ffiles\u002Fvalidation-and-deletion",{"title":350,"page":6,"canonicalKey":351,"locale":8,"children":352},"Application Behavior","3\u002F6",[353,360,367,374,381],{"title":354,"id":355,"canonicalKey":356,"locale":8,"draft":6,"navigation":357,"icon":358,"path":359},"Connection state","content:docs:3.build:6.application-behavior:1.connection-state.md","3\u002F6\u002F1",{"icon":358},"i-lucide-wifi","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Fconnection-state",{"title":361,"id":362,"canonicalKey":363,"locale":8,"draft":6,"navigation":364,"icon":365,"path":366},"Error handling","content:docs:3.build:6.application-behavior:2.error-handling.md","3\u002F6\u002F2",{"icon":365},"i-lucide-circle-alert","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Ferror-handling",{"title":368,"id":369,"canonicalKey":370,"locale":8,"draft":6,"navigation":371,"icon":372,"path":373},"Logging","content:docs:3.build:6.application-behavior:3.logging.md","3\u002F6\u002F3",{"icon":372},"i-lucide-scroll-text","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Flogging",{"title":375,"id":376,"canonicalKey":377,"locale":8,"draft":6,"navigation":378,"icon":379,"path":380},"DevTools","content:docs:3.build:6.application-behavior:4.devtools.md","3\u002F6\u002F4",{"icon":379},"i-lucide-wrench","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Fdevtools",{"title":382,"id":383,"canonicalKey":384,"locale":8,"draft":6,"navigation":385,"icon":386,"path":387},"Performance","content:docs:3.build:6.application-behavior:5.performance.md","3\u002F6\u002F5",{"icon":386},"i-lucide-chart-no-axes-combined","\u002Fdocs\u002Fbuild\u002Fapplication-behavior\u002Fperformance",{"title":389,"page":6,"canonicalKey":390,"locale":8,"id":391,"draft":6,"icon":269,"children":392},"Agents and MCP","3\u002F7","content:docs:3.build:7.agents:.navigation.yml",[393,400,406,412],{"title":394,"id":395,"canonicalKey":396,"locale":8,"draft":6,"navigation":397,"icon":398,"path":399},"MCP on Convex","content:docs:3.build:7.agents:1.mcp.md","3\u002F7\u002F1",{"icon":398},"i-lucide-plug-zap","\u002Fdocs\u002Fbuild\u002Fagents\u002Fmcp",{"title":401,"id":402,"canonicalKey":403,"locale":8,"draft":6,"navigation":404,"icon":248,"path":405},"Add MCP to your application","content:docs:3.build:7.agents:2.mcp-application.md","3\u002F7\u002F2",{"icon":248},"\u002Fdocs\u002Fbuild\u002Fagents\u002Fmcp-application",{"title":407,"id":408,"canonicalKey":409,"locale":8,"draft":6,"navigation":410,"icon":340,"path":411},"Connect ChatGPT and Claude","content:docs:3.build:7.agents:3.connect-chatgpt-and-claude.md","3\u002F7\u002F3",{"icon":340},"\u002Fdocs\u002Fbuild\u002Fagents\u002Fconnect-chatgpt-and-claude",{"title":413,"id":414,"canonicalKey":415,"locale":8,"draft":6,"navigation":416,"icon":108,"path":417},"MCP Apps","content:docs:3.build:7.agents:4.mcp-apps.md","3\u002F7\u002F4",{"icon":108},"\u002Fdocs\u002Fbuild\u002Fagents\u002Fmcp-apps",{"title":419,"page":6,"canonicalKey":420,"locale":8,"id":421,"draft":6,"icon":422,"children":423},"Recipes","4","content:docs:4.recipes:.navigation.yml","i-lucide-cooking-pot",[424,431,438,445,452,459,466,472,478],{"title":425,"id":426,"canonicalKey":427,"locale":8,"draft":6,"navigation":428,"icon":429,"path":430},"Protected dashboard","content:docs:4.recipes:1.protected-dashboard.md","4\u002F1",{"icon":429},"i-lucide-layout-dashboard","\u002Fdocs\u002Frecipes\u002Fprotected-dashboard",{"title":432,"id":433,"canonicalKey":434,"locale":8,"draft":6,"navigation":435,"icon":436,"path":437},"Real-time feed","content:docs:4.recipes:2.realtime-feed.md","4\u002F2",{"icon":436},"i-lucide-messages-square","\u002Fdocs\u002Frecipes\u002Frealtime-feed",{"title":439,"id":440,"canonicalKey":441,"locale":8,"draft":6,"navigation":442,"icon":443,"path":444},"Optimistic todo list","content:docs:4.recipes:3.optimistic-todo-list.md","4\u002F3",{"icon":443},"i-lucide-list-todo","\u002Fdocs\u002Frecipes\u002Foptimistic-todo-list",{"title":446,"id":447,"canonicalKey":448,"locale":8,"draft":6,"navigation":449,"icon":450,"path":451},"Infinite scroll","content:docs:4.recipes:4.infinite-scroll.md","4\u002F4",{"icon":450},"i-lucide-mouse","\u002Fdocs\u002Frecipes\u002Finfinite-scroll",{"title":453,"id":454,"canonicalKey":455,"locale":8,"draft":6,"navigation":456,"icon":457,"path":458},"File upload form","content:docs:4.recipes:5.file-upload-form.md","4\u002F5",{"icon":457},"i-lucide-file-up","\u002Fdocs\u002Frecipes\u002Ffile-upload-form",{"title":460,"id":461,"canonicalKey":462,"locale":8,"draft":6,"navigation":463,"icon":464,"path":465},"Organization permissions","content:docs:4.recipes:6.organization-permissions.md","4\u002F6",{"icon":464},"i-lucide-building-2","\u002Fdocs\u002Frecipes\u002Forganization-permissions",{"title":467,"id":468,"canonicalKey":469,"locale":8,"draft":6,"navigation":470,"icon":301,"path":471},"Authenticated server route","content:docs:4.recipes:7.authenticated-server-route.md","4\u002F7",{"icon":301},"\u002Fdocs\u002Frecipes\u002Fauthenticated-server-route",{"title":473,"id":474,"canonicalKey":475,"locale":8,"draft":6,"navigation":476,"icon":108,"path":477},"Public and private data","content:docs:4.recipes:8.public-and-private-data.md","4\u002F8",{"icon":108},"\u002Fdocs\u002Frecipes\u002Fpublic-and-private-data",{"title":479,"id":480,"canonicalKey":481,"locale":8,"draft":6,"navigation":482,"icon":483,"path":484},"Test signed-in screens","content:docs:4.recipes:9.component-testing.md","4\u002F9",{"icon":483},"i-lucide-flask-conical","\u002Fdocs\u002Frecipes\u002Fcomponent-testing",{"title":486,"page":6,"canonicalKey":487,"locale":8,"id":488,"draft":6,"icon":489,"children":490},"Concepts","5","content:docs:5.concepts:.navigation.yml","i-lucide-brain",[491,497,503,510,516,523,529,536,543],{"title":492,"id":493,"canonicalKey":494,"locale":8,"draft":6,"navigation":495,"icon":489,"path":496},"Mental model","content:docs:5.concepts:1.mental-model.md","5\u002F1",{"icon":489},"\u002Fdocs\u002Fconcepts\u002Fmental-model",{"title":498,"id":499,"canonicalKey":500,"locale":8,"draft":6,"navigation":501,"icon":234,"path":502},"Request lifecycle","content:docs:5.concepts:2.request-lifecycle.md","5\u002F2",{"icon":234},"\u002Fdocs\u002Fconcepts\u002Frequest-lifecycle",{"title":504,"id":505,"canonicalKey":506,"locale":8,"draft":6,"navigation":507,"icon":508,"path":509},"SSR, hydration, and real-time","content:docs:5.concepts:3.ssr-hydration-realtime.md","5\u002F3",{"icon":508},"i-lucide-refresh-cw","\u002Fdocs\u002Fconcepts\u002Fssr-hydration-realtime",{"title":511,"id":512,"canonicalKey":513,"locale":8,"draft":6,"navigation":514,"icon":124,"path":515},"Query ownership and caching","content:docs:5.concepts:4.query-ownership-and-caching.md","5\u002F4",{"icon":124},"\u002Fdocs\u002Fconcepts\u002Fquery-ownership-and-caching",{"title":517,"id":518,"canonicalKey":519,"locale":8,"draft":6,"navigation":520,"icon":521,"path":522},"Authentication and identity","content:docs:5.concepts:5.authentication-and-identity.md","5\u002F5",{"icon":521},"i-lucide-fingerprint","\u002Fdocs\u002Fconcepts\u002Fauthentication-and-identity",{"title":524,"id":525,"canonicalKey":526,"locale":8,"draft":6,"navigation":527,"icon":108,"path":528},"Server and client boundaries","content:docs:5.concepts:6.server-and-client-boundaries.md","5\u002F6",{"icon":108},"\u002Fdocs\u002Fconcepts\u002Fserver-and-client-boundaries",{"title":530,"id":531,"canonicalKey":532,"locale":8,"draft":6,"navigation":533,"icon":534,"path":535},"Errors and failures","content:docs:5.concepts:7.errors-and-failures.md","5\u002F7",{"icon":534},"i-lucide-circle-x","\u002Fdocs\u002Fconcepts\u002Ferrors-and-failures",{"title":537,"id":538,"canonicalKey":539,"locale":8,"draft":6,"navigation":540,"icon":541,"path":542},"Design decisions","content:docs:5.concepts:8.design-decisions.md","5\u002F8",{"icon":541},"i-lucide-git-branch","\u002Fdocs\u002Fconcepts\u002Fdesign-decisions",{"title":544,"id":545,"canonicalKey":546,"locale":8,"draft":6,"navigation":547,"icon":548,"path":549},"Glossary","content:docs:5.concepts:9.glossary.md","5\u002F9",{"icon":548},"i-lucide-book-a","\u002Fdocs\u002Fconcepts\u002Fglossary",{"title":551,"page":6,"canonicalKey":552,"locale":8,"id":553,"draft":6,"icon":214,"children":554},"Operations","6","content:docs:6.operations:.navigation.yml",[555,561,568,575,581,588,594],{"title":556,"id":557,"canonicalKey":558,"locale":8,"draft":6,"navigation":559,"icon":45,"path":560},"Deployment","content:docs:6.operations:1.deployment.md","6\u002F1",{"icon":45},"\u002Fdocs\u002Foperations\u002Fdeployment",{"title":562,"id":563,"canonicalKey":564,"locale":8,"draft":6,"navigation":565,"icon":566,"path":567},"Environment variables","content:docs:6.operations:2.environment-variables.md","6\u002F2",{"icon":566},"i-lucide-variable","\u002Fdocs\u002Foperations\u002Fenvironment-variables",{"title":569,"id":570,"canonicalKey":571,"locale":8,"draft":6,"navigation":572,"icon":573,"path":574},"Deploy to Vercel","content:docs:6.operations:3.deploy-to-vercel.md","6\u002F3",{"icon":573},"i-lucide-triangle","\u002Fdocs\u002Foperations\u002Fdeploy-to-vercel",{"title":576,"id":577,"canonicalKey":578,"locale":8,"draft":6,"navigation":579,"icon":379,"path":580},"Troubleshooting","content:docs:6.operations:4.troubleshooting.md","6\u002F4",{"icon":379},"\u002Fdocs\u002Foperations\u002Ftroubleshooting",{"title":582,"id":583,"canonicalKey":584,"locale":8,"draft":6,"navigation":585,"icon":586,"path":587},"Release compatibility","content:docs:6.operations:5.release-compatibility.md","6\u002F5",{"icon":586},"i-lucide-badge-check","\u002Fdocs\u002Foperations\u002Frelease-compatibility",{"title":589,"id":590,"canonicalKey":591,"locale":8,"draft":6,"navigation":592,"icon":87,"path":593},"Security model","content:docs:6.operations:6.security-model.md","6\u002F6",{"icon":87},"\u002Fdocs\u002Foperations\u002Fsecurity-model",{"title":595,"id":596,"canonicalKey":597,"locale":8,"draft":6,"navigation":598,"icon":599,"path":600},"Upgrade to 1.0","content:docs:6.operations:7.upgrade-to-1-0.md","6\u002F7",{"icon":599},"i-lucide-arrow-up-circle","\u002Fdocs\u002Foperations\u002Fupgrade-to-1-0",{"title":602,"page":6,"canonicalKey":603,"locale":8,"id":604,"draft":6,"icon":605,"children":606},"Reference","7","content:docs:7.reference:.navigation.yml","i-lucide-braces",[607,613,619,625,632,639],{"title":608,"id":609,"canonicalKey":610,"locale":8,"draft":6,"navigation":611,"icon":605,"path":612},"Composables","content:docs:7.reference:1.composables.md","7\u002F1",{"icon":605},"\u002Fdocs\u002Freference\u002Fcomposables",{"title":614,"id":615,"canonicalKey":616,"locale":8,"draft":6,"navigation":617,"icon":301,"path":618},"Server API","content:docs:7.reference:3.server-api.md","7\u002F3",{"icon":301},"\u002Fdocs\u002Freference\u002Fserver-api",{"title":620,"id":621,"canonicalKey":622,"locale":8,"draft":6,"navigation":623,"icon":534,"path":624},"Error types","content:docs:7.reference:4.error-types.md","7\u002F4",{"icon":534},"\u002Fdocs\u002Freference\u002Ferror-types",{"title":626,"id":627,"canonicalKey":628,"locale":8,"draft":6,"navigation":629,"icon":630,"path":631},"Module configuration","content:docs:7.reference:5.module-configuration.md","7\u002F5",{"icon":630},"i-lucide-settings","\u002Fdocs\u002Freference\u002Fmodule-configuration",{"title":633,"id":634,"canonicalKey":635,"locale":8,"draft":6,"navigation":636,"icon":637,"path":638},"Package exports","content:docs:7.reference:6.package-exports.md","7\u002F6",{"icon":637},"i-lucide-package-open","\u002Fdocs\u002Freference\u002Fpackage-exports",{"title":640,"id":641,"canonicalKey":642,"locale":8,"draft":6,"navigation":643,"icon":644,"path":645},"API surface","content:docs:7.reference:7.api-surface.md","7\u002F7",{"icon":644},"i-lucide-list","\u002Fdocs\u002Freference\u002Fapi-surface",{"title":647,"id":648,"canonicalKey":649,"locale":8,"draft":6,"path":650},"Better Convex documentation","content:docs:index.md","\u002F","\u002Fdocs",{"title":530,"description":652,"navigation":653,"body":654,"type":1862,"id":531,"canonicalKey":532,"draft":6,"partial":6,"locale":8,"collection":1863,"navigationFile":6,"file":1864,"route":1870,"resolution":1872},"Understand the shared Convex error categories and who owns recovery.",{"icon":534},{"type":655,"children":656,"toc":1850},"root",[657,673,680,797,809,828,834,845,1016,1040,1046,1057,1097,1126,1132,1154,1495,1512,1518,1529,1604,1669,1693,1705,1711,1727,1778,1787,1793,1831],{"type":658,"tag":659,"props":660,"children":661},"element","p",{},[662,665,671],{"type":663,"value":664},"text","Better Convex Nuxt exposes one public call error across client composables and server helpers: ",{"type":658,"tag":666,"props":667,"children":668},"code",{},[669],{"type":663,"value":670},"ConvexCallError",{"type":663,"value":672},".",{"type":658,"tag":674,"props":675,"children":677},"h2",{"id":676},"error-kinds",[678],{"type":663,"value":679},"Error kinds",{"type":658,"tag":681,"props":682,"children":683},"table",{},[684,708],{"type":658,"tag":685,"props":686,"children":687},"thead",{},[688],{"type":658,"tag":689,"props":690,"children":691},"tr",{},[692,698,703],{"type":658,"tag":693,"props":694,"children":695},"th",{},[696],{"type":663,"value":697},"Kind",{"type":658,"tag":693,"props":699,"children":700},{},[701],{"type":663,"value":702},"Meaning",{"type":658,"tag":693,"props":704,"children":705},{},[706],{"type":663,"value":707},"Typical owner of recovery",{"type":658,"tag":709,"props":710,"children":711},"tbody",{},[712,734,755,776],{"type":658,"tag":689,"props":713,"children":714},{},[715,724,729],{"type":658,"tag":716,"props":717,"children":718},"td",{},[719],{"type":658,"tag":666,"props":720,"children":721},{},[722],{"type":663,"value":723},"authentication",{"type":658,"tag":716,"props":725,"children":726},{},[727],{"type":663,"value":728},"Required identity is missing, token exchange failed with auth status, or identity changed during a call",{"type":658,"tag":716,"props":730,"children":731},{},[732],{"type":663,"value":733},"Auth UI or operation caller",{"type":658,"tag":689,"props":735,"children":736},{},[737,745,750],{"type":658,"tag":716,"props":738,"children":739},{},[740],{"type":658,"tag":666,"props":741,"children":742},{},[743],{"type":663,"value":744},"transport",{"type":658,"tag":716,"props":746,"children":747},{},[748],{"type":663,"value":749},"Network, timeout, abort, malformed response, or library-owned HTTP boundary failure",{"type":658,"tag":716,"props":751,"children":752},{},[753],{"type":663,"value":754},"Retry\u002Foffline UI or operator",{"type":658,"tag":689,"props":756,"children":757},{},[758,766,771],{"type":658,"tag":716,"props":759,"children":760},{},[761],{"type":658,"tag":666,"props":762,"children":763},{},[764],{"type":663,"value":765},"server",{"type":658,"tag":716,"props":767,"children":768},{},[769],{"type":663,"value":770},"A structured Convex application\u002Ffunction error",{"type":658,"tag":716,"props":772,"children":773},{},[774],{"type":663,"value":775},"Application workflow",{"type":658,"tag":689,"props":777,"children":778},{},[779,787,792],{"type":658,"tag":716,"props":780,"children":781},{},[782],{"type":658,"tag":666,"props":783,"children":784},{},[785],{"type":663,"value":786},"unknown",{"type":658,"tag":716,"props":788,"children":789},{},[790],{"type":663,"value":791},"No stable mechanical classification is available",{"type":658,"tag":716,"props":793,"children":794},{},[795],{"type":663,"value":796},"Fallback handling and diagnostics",{"type":658,"tag":659,"props":798,"children":799},{},[800,802,807],{"type":663,"value":801},"There is no generic ",{"type":658,"tag":666,"props":803,"children":804},{},[805],{"type":663,"value":806},"validation",{"type":663,"value":808}," kind. The module does not infer categories from message text.",{"type":658,"tag":659,"props":810,"children":811},{},[812,814,819,821,826],{"type":663,"value":813},"Every error also carries ",{"type":658,"tag":666,"props":815,"children":816},{},[817],{"type":663,"value":818},"functionName",{"type":663,"value":820},", the Convex function path such as ",{"type":658,"tag":666,"props":822,"children":823},{},[824],{"type":663,"value":825},"projects:update",{"type":663,"value":827},", when the failing call knows it.",{"type":658,"tag":674,"props":829,"children":831},{"id":830},"stable-codes",[832],{"type":663,"value":833},"Stable codes",{"type":658,"tag":659,"props":835,"children":836},{},[837,839,843],{"type":663,"value":838},"Failures that Better Convex raises itself carry a stable ",{"type":658,"tag":666,"props":840,"children":841},{},[842],{"type":663,"value":666},{"type":663,"value":844},":",{"type":658,"tag":681,"props":846,"children":847},{},[848,863],{"type":658,"tag":685,"props":849,"children":850},{},[851],{"type":658,"tag":689,"props":852,"children":853},{},[854,859],{"type":658,"tag":693,"props":855,"children":856},{},[857],{"type":663,"value":858},"Code",{"type":658,"tag":693,"props":860,"children":861},{},[862],{"type":663,"value":702},{"type":658,"tag":709,"props":864,"children":865},{},[866,882,910,931,952,968,984,1000],{"type":658,"tag":689,"props":867,"children":868},{},[869,877],{"type":658,"tag":716,"props":870,"children":871},{},[872],{"type":658,"tag":666,"props":873,"children":874},{},[875],{"type":663,"value":876},"IDENTITY_CHANGED",{"type":658,"tag":716,"props":878,"children":879},{},[880],{"type":663,"value":881},"The signed-in identity changed before or while the call was sent",{"type":658,"tag":689,"props":883,"children":884},{},[885,893],{"type":658,"tag":716,"props":886,"children":887},{},[888],{"type":658,"tag":666,"props":889,"children":890},{},[891],{"type":663,"value":892},"CANCELLED",{"type":658,"tag":716,"props":894,"children":895},{},[896,901,903,908],{"type":658,"tag":666,"props":897,"children":898},{},[899],{"type":663,"value":900},"cancel()",{"type":663,"value":902},", ",{"type":658,"tag":666,"props":904,"children":905},{},[906],{"type":663,"value":907},"reset()",{"type":663,"value":909},", or a disposed scope stopped the work",{"type":658,"tag":689,"props":911,"children":912},{},[913,921],{"type":658,"tag":716,"props":914,"children":915},{},[916],{"type":658,"tag":666,"props":917,"children":918},{},[919],{"type":663,"value":920},"FILE_TOO_LARGE",{"type":658,"tag":716,"props":922,"children":923},{},[924,926],{"type":663,"value":925},"An upload is larger than ",{"type":658,"tag":666,"props":927,"children":928},{},[929],{"type":663,"value":930},"maxSize",{"type":658,"tag":689,"props":932,"children":933},{},[934,942],{"type":658,"tag":716,"props":935,"children":936},{},[937],{"type":658,"tag":666,"props":938,"children":939},{},[940],{"type":663,"value":941},"FILE_TYPE_NOT_ALLOWED",{"type":658,"tag":716,"props":943,"children":944},{},[945,947],{"type":663,"value":946},"An upload does not match ",{"type":658,"tag":666,"props":948,"children":949},{},[950],{"type":663,"value":951},"allowedTypes",{"type":658,"tag":689,"props":953,"children":954},{},[955,963],{"type":658,"tag":716,"props":956,"children":957},{},[958],{"type":658,"tag":666,"props":959,"children":960},{},[961],{"type":663,"value":962},"UPLOAD_IN_PROGRESS",{"type":658,"tag":716,"props":964,"children":965},{},[966],{"type":663,"value":967},"A second upload started while the first one is pending",{"type":658,"tag":689,"props":969,"children":970},{},[971,979],{"type":658,"tag":716,"props":972,"children":973},{},[974],{"type":658,"tag":666,"props":975,"children":976},{},[977],{"type":663,"value":978},"SUBMIT_IN_PROGRESS",{"type":658,"tag":716,"props":980,"children":981},{},[982],{"type":663,"value":983},"A second form submission started while the first one is pending",{"type":658,"tag":689,"props":985,"children":986},{},[987,995],{"type":658,"tag":716,"props":988,"children":989},{},[990],{"type":658,"tag":666,"props":991,"children":992},{},[993],{"type":663,"value":994},"UNAUTHENTICATED",{"type":658,"tag":716,"props":996,"children":997},{},[998],{"type":663,"value":999},"A server operation requires a signed-in identity",{"type":658,"tag":689,"props":1001,"children":1002},{},[1003,1011],{"type":658,"tag":716,"props":1004,"children":1005},{},[1006],{"type":658,"tag":666,"props":1007,"children":1008},{},[1009],{"type":663,"value":1010},"CLIENT_UNAVAILABLE",{"type":658,"tag":716,"props":1012,"children":1013},{},[1014],{"type":663,"value":1015},"No browser Convex client exists, for example during server rendering",{"type":658,"tag":659,"props":1017,"children":1018},{},[1019,1021,1025,1027,1032,1034,1039],{"type":663,"value":1020},"Application errors keep the ",{"type":658,"tag":666,"props":1022,"children":1023},{},[1024],{"type":663,"value":666},{"type":663,"value":1026}," that your Convex function puts in ",{"type":658,"tag":666,"props":1028,"children":1029},{},[1030],{"type":663,"value":1031},"ConvexError",{"type":663,"value":1033}," data. Check both kinds of code with ",{"type":658,"tag":666,"props":1035,"children":1036},{},[1037],{"type":663,"value":1038},"isConvexCallError(error, code)",{"type":663,"value":672},{"type":658,"tag":674,"props":1041,"children":1043},{"id":1042},"was-the-request-sent",[1044],{"type":663,"value":1045},"Was the request sent?",{"type":658,"tag":659,"props":1047,"children":1048},{},[1049,1051,1056],{"type":663,"value":1050},"A browser write can fail before it is sent, or after it was sent but before its result arrived. The library records which one in ",{"type":658,"tag":666,"props":1052,"children":1053},{},[1054],{"type":663,"value":1055},"outcome",{"type":663,"value":844},{"type":658,"tag":1058,"props":1059,"children":1060},"ul",{},[1061,1072,1082],{"type":658,"tag":1062,"props":1063,"children":1064},"li",{},[1065,1070],{"type":658,"tag":666,"props":1066,"children":1067},{},[1068],{"type":663,"value":1069},"'not-sent'",{"type":663,"value":1071},": the request never reached Convex. Nothing was written.",{"type":658,"tag":1062,"props":1073,"children":1074},{},[1075,1080],{"type":658,"tag":666,"props":1076,"children":1077},{},[1078],{"type":663,"value":1079},"'unknown'",{"type":663,"value":1081},": the request was sent, and no result arrived. The write may have happened.",{"type":658,"tag":1062,"props":1083,"children":1084},{},[1085,1090,1092,1096],{"type":658,"tag":666,"props":1086,"children":1087},{},[1088],{"type":663,"value":1089},"undefined",{"type":663,"value":1091},": the failure is not about sending, for example Convex rejected the call with a ",{"type":658,"tag":666,"props":1093,"children":1094},{},[1095],{"type":663,"value":1031},{"type":663,"value":672},{"type":658,"tag":659,"props":1098,"children":1099},{},[1100,1104,1106,1110,1112,1117,1119,1125],{"type":658,"tag":666,"props":1101,"children":1102},{},[1103],{"type":663,"value":1055},{"type":663,"value":1105}," comes from what the library did with the request. It is never guessed from the ",{"type":658,"tag":666,"props":1107,"children":1108},{},[1109],{"type":663,"value":666},{"type":663,"value":1111},". Uploads also carry ",{"type":658,"tag":666,"props":1113,"children":1114},{},[1115],{"type":663,"value":1116},"phase",{"type":663,"value":1118},", the upload step that failed. See ",{"type":658,"tag":1120,"props":1121,"children":1123},"a",{"href":1122},"\u002Fdocs\u002Freference\u002Ferror-types#outcome",[1124],{"type":663,"value":620},{"type":663,"value":672},{"type":658,"tag":674,"props":1127,"children":1129},{"id":1128},"one-rejected-promise-contract",[1130],{"type":663,"value":1131},"One rejected-Promise contract",{"type":658,"tag":659,"props":1133,"children":1134},{},[1135,1140,1142,1147,1149,1153],{"type":658,"tag":666,"props":1136,"children":1137},{},[1138],{"type":663,"value":1139},"mutate",{"type":663,"value":1141}," and ",{"type":658,"tag":666,"props":1143,"children":1144},{},[1145],{"type":663,"value":1146},"run",{"type":663,"value":1148}," reject with ",{"type":658,"tag":666,"props":1150,"children":1151},{},[1152],{"type":663,"value":670},{"type":663,"value":844},{"type":658,"tag":1155,"props":1156,"children":1159},"pre",{"language":1157,"class":1158},"ts","shiki shiki-themes light-plus dark-plus dark:dark-plus",[1160],{"type":658,"tag":666,"props":1161,"children":1163},{"class":1162},"language-ts",[1164,1213,1215,1218,1219,1291,1292,1295,1296,1309,1310,1347,1348,1376,1377,1415,1416,1429,1430,1438,1439,1447,1448,1486,1487],{"type":658,"tag":1165,"props":1166,"children":1169},"span",{"class":1167,"style":1168},"line","display: inline",[1170,1176,1182,1188,1192,1197,1202,1207],{"type":658,"tag":1165,"props":1171,"children":1173},{"style":1172},"color:#AF00DB;--shiki-dark:#C586C0",[1174],{"type":663,"value":1175},"import",{"type":658,"tag":1165,"props":1177,"children":1179},{"style":1178},"color:#000000;--shiki-dark:#D4D4D4",[1180],{"type":663,"value":1181}," { ",{"type":658,"tag":1165,"props":1183,"children":1185},{"style":1184},"color:#001080;--shiki-dark:#9CDCFE",[1186],{"type":663,"value":1187},"isConvexCallError",{"type":658,"tag":1165,"props":1189,"children":1190},{"style":1178},[1191],{"type":663,"value":902},{"type":658,"tag":1165,"props":1193,"children":1194},{"style":1184},[1195],{"type":663,"value":1196},"normalizeConvexError",{"type":658,"tag":1165,"props":1198,"children":1199},{"style":1178},[1200],{"type":663,"value":1201}," } ",{"type":658,"tag":1165,"props":1203,"children":1204},{"style":1172},[1205],{"type":663,"value":1206},"from",{"type":658,"tag":1165,"props":1208,"children":1210},{"style":1209},"color:#A31515;--shiki-dark:#CE9178",[1211],{"type":663,"value":1212}," '@lupinum\u002Fbetter-convex-nuxt\u002Ferrors'",{"type":663,"value":1214},"\n",{"type":658,"tag":1165,"props":1216,"children":1217},{"class":1167,"style":1168},[],{"type":663,"value":1214},{"type":658,"tag":1165,"props":1220,"children":1221},{"class":1167,"style":1168},[1222,1228,1232,1236,1241,1247,1252,1258,1263,1268,1272,1277,1281,1286],{"type":658,"tag":1165,"props":1223,"children":1225},{"style":1224},"color:#0000FF;--shiki-dark:#569CD6",[1226],{"type":663,"value":1227},"const",{"type":658,"tag":1165,"props":1229,"children":1230},{"style":1178},[1231],{"type":663,"value":1181},{"type":658,"tag":1165,"props":1233,"children":1234},{"style":1184},[1235],{"type":663,"value":1139},{"type":658,"tag":1165,"props":1237,"children":1238},{"style":1178},[1239],{"type":663,"value":1240},": ",{"type":658,"tag":1165,"props":1242,"children":1244},{"style":1243},"color:#0070C1;--shiki-dark:#4FC1FF",[1245],{"type":663,"value":1246},"saveProject",{"type":658,"tag":1165,"props":1248,"children":1249},{"style":1178},[1250],{"type":663,"value":1251}," } = ",{"type":658,"tag":1165,"props":1253,"children":1255},{"style":1254},"color:#795E26;--shiki-dark:#DCDCAA",[1256],{"type":663,"value":1257},"useConvexMutation",{"type":658,"tag":1165,"props":1259,"children":1260},{"style":1178},[1261],{"type":663,"value":1262},"(",{"type":658,"tag":1165,"props":1264,"children":1265},{"style":1184},[1266],{"type":663,"value":1267},"api",{"type":658,"tag":1165,"props":1269,"children":1270},{"style":1178},[1271],{"type":663,"value":672},{"type":658,"tag":1165,"props":1273,"children":1274},{"style":1184},[1275],{"type":663,"value":1276},"projects",{"type":658,"tag":1165,"props":1278,"children":1279},{"style":1178},[1280],{"type":663,"value":672},{"type":658,"tag":1165,"props":1282,"children":1283},{"style":1184},[1284],{"type":663,"value":1285},"update",{"type":658,"tag":1165,"props":1287,"children":1288},{"style":1178},[1289],{"type":663,"value":1290},")",{"type":663,"value":1214},{"type":658,"tag":1165,"props":1293,"children":1294},{"class":1167,"style":1168},[],{"type":663,"value":1214},{"type":658,"tag":1165,"props":1297,"children":1298},{"class":1167,"style":1168},[1299,1304],{"type":658,"tag":1165,"props":1300,"children":1301},{"style":1172},[1302],{"type":663,"value":1303},"try",{"type":658,"tag":1165,"props":1305,"children":1306},{"style":1178},[1307],{"type":663,"value":1308}," {",{"type":663,"value":1214},{"type":658,"tag":1165,"props":1311,"children":1312},{"class":1167,"style":1168},[1313,1318,1323,1328,1333,1337,1342],{"type":658,"tag":1165,"props":1314,"children":1315},{"style":1172},[1316],{"type":663,"value":1317},"  await",{"type":658,"tag":1165,"props":1319,"children":1320},{"style":1254},[1321],{"type":663,"value":1322}," saveProject",{"type":658,"tag":1165,"props":1324,"children":1325},{"style":1178},[1326],{"type":663,"value":1327},"({ ",{"type":658,"tag":1165,"props":1329,"children":1330},{"style":1184},[1331],{"type":663,"value":1332},"projectId",{"type":658,"tag":1165,"props":1334,"children":1335},{"style":1178},[1336],{"type":663,"value":902},{"type":658,"tag":1165,"props":1338,"children":1339},{"style":1184},[1340],{"type":663,"value":1341},"name",{"type":658,"tag":1165,"props":1343,"children":1344},{"style":1178},[1345],{"type":663,"value":1346}," })",{"type":663,"value":1214},{"type":658,"tag":1165,"props":1349,"children":1350},{"class":1167,"style":1168},[1351,1356,1361,1366,1371],{"type":658,"tag":1165,"props":1352,"children":1353},{"style":1178},[1354],{"type":663,"value":1355},"} ",{"type":658,"tag":1165,"props":1357,"children":1358},{"style":1172},[1359],{"type":663,"value":1360},"catch",{"type":658,"tag":1165,"props":1362,"children":1363},{"style":1178},[1364],{"type":663,"value":1365}," (",{"type":658,"tag":1165,"props":1367,"children":1368},{"style":1184},[1369],{"type":663,"value":1370},"error",{"type":658,"tag":1165,"props":1372,"children":1373},{"style":1178},[1374],{"type":663,"value":1375},") {",{"type":663,"value":1214},{"type":658,"tag":1165,"props":1378,"children":1379},{"class":1167,"style":1168},[1380,1385,1389,1393,1397,1401,1405,1410],{"type":658,"tag":1165,"props":1381,"children":1382},{"style":1172},[1383],{"type":663,"value":1384},"  if",{"type":658,"tag":1165,"props":1386,"children":1387},{"style":1178},[1388],{"type":663,"value":1365},{"type":658,"tag":1165,"props":1390,"children":1391},{"style":1254},[1392],{"type":663,"value":1187},{"type":658,"tag":1165,"props":1394,"children":1395},{"style":1178},[1396],{"type":663,"value":1262},{"type":658,"tag":1165,"props":1398,"children":1399},{"style":1184},[1400],{"type":663,"value":1370},{"type":658,"tag":1165,"props":1402,"children":1403},{"style":1178},[1404],{"type":663,"value":902},{"type":658,"tag":1165,"props":1406,"children":1407},{"style":1209},[1408],{"type":663,"value":1409},"'PROJECT_ARCHIVED'",{"type":658,"tag":1165,"props":1411,"children":1412},{"style":1178},[1413],{"type":663,"value":1414},")) {",{"type":663,"value":1214},{"type":658,"tag":1165,"props":1417,"children":1418},{"class":1167,"style":1168},[1419,1424],{"type":658,"tag":1165,"props":1420,"children":1421},{"style":1254},[1422],{"type":663,"value":1423},"    showArchivedNotice",{"type":658,"tag":1165,"props":1425,"children":1426},{"style":1178},[1427],{"type":663,"value":1428},"()",{"type":663,"value":1214},{"type":658,"tag":1165,"props":1431,"children":1432},{"class":1167,"style":1168},[1433],{"type":658,"tag":1165,"props":1434,"children":1435},{"style":1172},[1436],{"type":663,"value":1437},"    return",{"type":663,"value":1214},{"type":658,"tag":1165,"props":1440,"children":1441},{"class":1167,"style":1168},[1442],{"type":658,"tag":1165,"props":1443,"children":1444},{"style":1178},[1445],{"type":663,"value":1446},"  }",{"type":663,"value":1214},{"type":658,"tag":1165,"props":1449,"children":1450},{"class":1167,"style":1168},[1451,1456,1460,1464,1468,1472,1477,1482],{"type":658,"tag":1165,"props":1452,"children":1453},{"style":1254},[1454],{"type":663,"value":1455},"  reportFailure",{"type":658,"tag":1165,"props":1457,"children":1458},{"style":1178},[1459],{"type":663,"value":1262},{"type":658,"tag":1165,"props":1461,"children":1462},{"style":1254},[1463],{"type":663,"value":1196},{"type":658,"tag":1165,"props":1465,"children":1466},{"style":1178},[1467],{"type":663,"value":1262},{"type":658,"tag":1165,"props":1469,"children":1470},{"style":1184},[1471],{"type":663,"value":1370},{"type":658,"tag":1165,"props":1473,"children":1474},{"style":1178},[1475],{"type":663,"value":1476},").",{"type":658,"tag":1165,"props":1478,"children":1479},{"style":1184},[1480],{"type":663,"value":1481},"kind",{"type":658,"tag":1165,"props":1483,"children":1484},{"style":1178},[1485],{"type":663,"value":1290},{"type":663,"value":1214},{"type":658,"tag":1165,"props":1488,"children":1489},{"class":1167,"style":1168},[1490],{"type":658,"tag":1165,"props":1491,"children":1492},{"style":1178},[1493],{"type":663,"value":1494},"}",{"type":658,"tag":659,"props":1496,"children":1497},{},[1498,1503,1505,1510],{"type":658,"tag":666,"props":1499,"children":1500},{},[1501],{"type":663,"value":1502},"useConvexForm",{"type":663,"value":1504}," resolves expected validation and mutation failures as ",{"type":658,"tag":666,"props":1506,"children":1507},{},[1508],{"type":663,"value":1509},"{ ok: false, error }",{"type":663,"value":1511}," instead. Callers decide how to project a caught error into local UI state.",{"type":658,"tag":674,"props":1513,"children":1515},{"id":1514},"domain-meaning-belongs-to-the-application",[1516],{"type":663,"value":1517},"Domain meaning belongs to the application",{"type":658,"tag":659,"props":1519,"children":1520},{},[1521,1523,1527],{"type":663,"value":1522},"A Convex function can throw structured ",{"type":658,"tag":666,"props":1524,"children":1525},{},[1526],{"type":663,"value":1031},{"type":663,"value":1528}," data such as:",{"type":658,"tag":1155,"props":1530,"children":1531},{"language":1157,"class":1158},[1532],{"type":658,"tag":666,"props":1533,"children":1534},{"class":1162},[1535,1558,1559,1577,1578,1595,1596],{"type":658,"tag":1165,"props":1536,"children":1537},{"class":1167,"style":1168},[1538,1543,1548,1553],{"type":658,"tag":1165,"props":1539,"children":1540},{"style":1172},[1541],{"type":663,"value":1542},"throw",{"type":658,"tag":1165,"props":1544,"children":1545},{"style":1224},[1546],{"type":663,"value":1547}," new",{"type":658,"tag":1165,"props":1549,"children":1550},{"style":1254},[1551],{"type":663,"value":1552}," ConvexError",{"type":658,"tag":1165,"props":1554,"children":1555},{"style":1178},[1556],{"type":663,"value":1557},"({",{"type":663,"value":1214},{"type":658,"tag":1165,"props":1560,"children":1561},{"class":1167,"style":1168},[1562,1567,1572],{"type":658,"tag":1165,"props":1563,"children":1564},{"style":1184},[1565],{"type":663,"value":1566},"  code:",{"type":658,"tag":1165,"props":1568,"children":1569},{"style":1209},[1570],{"type":663,"value":1571}," 'PROJECT_ARCHIVED'",{"type":658,"tag":1165,"props":1573,"children":1574},{"style":1178},[1575],{"type":663,"value":1576},",",{"type":663,"value":1214},{"type":658,"tag":1165,"props":1579,"children":1580},{"class":1167,"style":1168},[1581,1586,1591],{"type":658,"tag":1165,"props":1582,"children":1583},{"style":1184},[1584],{"type":663,"value":1585},"  message:",{"type":658,"tag":1165,"props":1587,"children":1588},{"style":1209},[1589],{"type":663,"value":1590}," 'Archived projects cannot be edited'",{"type":658,"tag":1165,"props":1592,"children":1593},{"style":1178},[1594],{"type":663,"value":1576},{"type":663,"value":1214},{"type":658,"tag":1165,"props":1597,"children":1598},{"class":1167,"style":1168},[1599],{"type":658,"tag":1165,"props":1600,"children":1601},{"style":1178},[1602],{"type":663,"value":1603},"})",{"type":658,"tag":659,"props":1605,"children":1606},{},[1607,1609,1613,1615,1620,1622,1627,1629,1633,1635,1640,1642,1646,1648,1653,1655,1660,1662,1667],{"type":663,"value":1608},"The module classifies this as ",{"type":658,"tag":666,"props":1610,"children":1611},{},[1612],{"type":663,"value":765},{"type":663,"value":1614},", keeps ",{"type":658,"tag":666,"props":1616,"children":1617},{},[1618],{"type":663,"value":1619},"data",{"type":663,"value":1621}," unchanged, and copies ",{"type":658,"tag":666,"props":1623,"children":1624},{},[1625],{"type":663,"value":1626},"data.code",{"type":663,"value":1628}," to ",{"type":658,"tag":666,"props":1630,"children":1631},{},[1632],{"type":663,"value":666},{"type":663,"value":1634},". The ",{"type":658,"tag":666,"props":1636,"children":1637},{},[1638],{"type":663,"value":1639},"message",{"type":663,"value":1641}," is the text you wrote: a string ",{"type":658,"tag":666,"props":1643,"children":1644},{},[1645],{"type":663,"value":1619},{"type":663,"value":1647},", else ",{"type":658,"tag":666,"props":1649,"children":1650},{},[1651],{"type":663,"value":1652},"data.message",{"type":663,"value":1654},", else the generic ",{"type":658,"tag":666,"props":1656,"children":1657},{},[1658],{"type":663,"value":1659},"Convex application error",{"type":663,"value":1661},". Your application decides that ",{"type":658,"tag":666,"props":1663,"children":1664},{},[1665],{"type":663,"value":1666},"PROJECT_ARCHIVED",{"type":663,"value":1668}," disables editing or redirects elsewhere.",{"type":658,"tag":659,"props":1670,"children":1671},{},[1672,1674,1678,1680,1685,1687,1691],{"type":663,"value":1673},"Write ",{"type":658,"tag":666,"props":1675,"children":1676},{},[1677],{"type":663,"value":1652},{"type":663,"value":1679}," for the person who reads it, because components usually show ",{"type":658,"tag":666,"props":1681,"children":1682},{},[1683],{"type":663,"value":1684},"error.message",{"type":663,"value":1686},". Do not put secrets or internal details in it. Use ",{"type":658,"tag":666,"props":1688,"children":1689},{},[1690],{"type":663,"value":666},{"type":663,"value":1692}," for decisions. Do not parse the message to discover business meaning.",{"type":658,"tag":659,"props":1694,"children":1695},{},[1696,1698,1703],{"type":663,"value":1697},"Convex's own wire message is never used, because it can contain function stack frames. Unclassified strings, objects, and errors use ",{"type":658,"tag":666,"props":1699,"children":1700},{},[1701],{"type":663,"value":1702},"Unknown Convex error",{"type":663,"value":1704},". This rule is identical in browser, SSR, and server calls.",{"type":658,"tag":674,"props":1706,"children":1708},{"id":1707},"serialized-errors",[1709],{"type":663,"value":1710},"Serialized errors",{"type":658,"tag":659,"props":1712,"children":1713},{},[1714,1716,1720,1722,1726],{"type":663,"value":1715},"SSR errors cross the Nuxt payload as a public serialized shape. The client revives that shape as ",{"type":658,"tag":666,"props":1717,"children":1718},{},[1719],{"type":663,"value":670},{"type":663,"value":1721},", including ",{"type":658,"tag":666,"props":1723,"children":1724},{},[1725],{"type":663,"value":818},{"type":663,"value":672},{"type":658,"tag":659,"props":1728,"children":1729},{},[1730,1732,1736,1738,1743,1745,1750,1752,1757,1759,1764,1766,1771,1773,1777],{"type":663,"value":1731},"A Nitro route can return the same shape, without ",{"type":658,"tag":666,"props":1733,"children":1734},{},[1735],{"type":663,"value":818},{"type":663,"value":1737},", with ",{"type":658,"tag":666,"props":1739,"children":1740},{},[1741],{"type":663,"value":1742},"toConvexH3Error(error)",{"type":663,"value":1744},". In the browser, ",{"type":658,"tag":666,"props":1746,"children":1747},{},[1748],{"type":663,"value":1749},"normalizeConvexError()",{"type":663,"value":1751}," revives it from the ",{"type":658,"tag":666,"props":1753,"children":1754},{},[1755],{"type":663,"value":1756},"FetchError",{"type":663,"value":1758}," of ",{"type":658,"tag":666,"props":1760,"children":1761},{},[1762],{"type":663,"value":1763},"$fetch",{"type":663,"value":1765}," or ",{"type":658,"tag":666,"props":1767,"children":1768},{},[1769],{"type":663,"value":1770},"useFetch",{"type":663,"value":1772},". Revival accepts only the exact public shape; any other object stays ",{"type":658,"tag":666,"props":1774,"children":1775},{},[1776],{"type":663,"value":786},{"type":663,"value":672},{"type":658,"tag":659,"props":1779,"children":1780},{},[1781,1785],{"type":658,"tag":666,"props":1782,"children":1783},{},[1784],{"type":663,"value":670},{"type":663,"value":1786}," does not retain a raw upstream cause. JSON, structured clone,\nSSR HTML, normal inspection, and direct property access therefore cannot recover\nan upstream response body, credential, stack, or request object from the public\nerror. Use the public fields for product behavior. For server logs, add your\nown operation name and request ID.",{"type":658,"tag":674,"props":1788,"children":1790},{"id":1789},"retry-is-contextual",[1791],{"type":663,"value":1792},"Retry is contextual",{"type":658,"tag":1058,"props":1794,"children":1795},{},[1796,1801,1806,1811],{"type":658,"tag":1062,"props":1797,"children":1798},{},[1799],{"type":663,"value":1800},"Retry a transient transport failure when the operation is safe to repeat.",{"type":658,"tag":1062,"props":1802,"children":1803},{},[1804],{"type":663,"value":1805},"Do not retry authentication failures until auth state changes.",{"type":658,"tag":1062,"props":1807,"children":1808},{},[1809],{"type":663,"value":1810},"Let the product workflow decide whether a server error is retryable.",{"type":658,"tag":1062,"props":1812,"children":1813},{},[1814,1816,1821,1823,1829],{"type":663,"value":1815},"Do not retry a write with ",{"type":658,"tag":666,"props":1817,"children":1818},{},[1819],{"type":663,"value":1820},"outcome: 'unknown'",{"type":663,"value":1822}," blindly; it may have reached the server. Make the write ",{"type":658,"tag":1120,"props":1824,"children":1826},{"href":1825},"\u002Fdocs\u002Freference\u002Ferror-types#idempotent-writes",[1827],{"type":663,"value":1828},"idempotent",{"type":663,"value":1830}," first.",{"type":658,"tag":659,"props":1832,"children":1833},{},[1834,1836,1841,1843,1848],{"type":663,"value":1835},"See ",{"type":658,"tag":1120,"props":1837,"children":1838},{"href":366},[1839],{"type":663,"value":1840},"error handling",{"type":663,"value":1842}," for UI patterns and ",{"type":658,"tag":1120,"props":1844,"children":1845},{"href":323},[1846],{"type":663,"value":1847},"credentials and security",{"type":663,"value":1849}," for server-boundary controls.",{"title":1851,"searchDepth":1852,"depth":1852,"links":1853},"",4,[1854,1856,1857,1858,1859,1860,1861],{"id":676,"depth":1855,"text":679},2,{"id":830,"depth":1855,"text":833},{"id":1042,"depth":1855,"text":1045},{"id":1128,"depth":1855,"text":1131},{"id":1514,"depth":1855,"text":1517},{"id":1707,"depth":1855,"text":1710},{"id":1789,"depth":1855,"text":1792},"markdown","docs",{"source":1865,"path":1866,"stem":1867,"dir":1868,"extension":1869},"content","docs\u002F5.concepts\u002F7.errors-and-failures.md","docs\u002F5.concepts\u002F7.errors-and-failures","concepts","md",{"requestedPath":535,"resolvedPath":535,"alternates":1871},[],{"requested":1873,"resolved":1874,"usedFallback":6},{},{"locale":8},{"previous":1876,"next":1878},{"title":524,"id":525,"canonicalKey":526,"locale":8,"draft":6,"navigation":1877,"icon":108,"path":528},{"icon":108},{"title":537,"id":538,"canonicalKey":539,"locale":8,"draft":6,"navigation":1879,"icon":541,"path":542},{"icon":541},{"left":1881,"top":1881,"width":1882,"height":1882,"rotate":1881,"vFlip":6,"hFlip":6,"body":1883},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":1881,"top":1881,"width":1885,"height":1885,"rotate":1881,"vFlip":6,"hFlip":6,"body":1886},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>",1790591522462]