[{"data":1,"prerenderedAt":2685},["ShallowReactive",2],{"navLinks":3,"sidebar_docs_navigation_\u002Fdocs\u002Fauth-h3client":64,"navigation":217,"navLinks_footer":829,"\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fexecute-request_page":842,"\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fexecute-request_surround":1890,"\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fexecute-request":1893},{"id":4,"extension":5,"links":6,"meta":61,"stem":62,"__hash__":63},"navigationMenu\u002Fnavigation.json","json",[7,52,57],{"nested":8,"label":9,"icon":10,"to":11,"children":12},true,"Docs","i-lucide-book-open","\u002Fdocs\u002Fgetting-started",[13,19,26,32,39,45],{"label":14,"icon":15,"to":11,"description":16,"github":17,"badge":18},"Getting Started","i-lucide-rocket","An introduction to help you understand the core components.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fdocshub","Start Here",{"label":20,"icon":21,"to":22,"description":23,"github":24,"badge":25},"Auth H3 Client","i-lucide-key-round","\u002Fdocs\u002Fauth-h3client","Seamlessly enforce OAuth 2.0 authentication and session management integrated directly as the client of the IAM module.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fauth-h3client","Core",{"label":27,"icon":28,"to":29,"description":30,"github":31,"badge":25},"IAM","i-lucide-shield-check","\u002Fdocs\u002Fiam","Identity and Access Management featuring granular roles, permissions, and security policies.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fauth",{"label":33,"icon":34,"to":35,"description":36,"github":37,"badge":38},"Bot Detection","i-lucide-cpu","\u002Fdocs\u002Fbot-detection","Advanced behavioral analysis and request fingerprinting to stop malicious automated traffic.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fbot-detector","Security",{"label":40,"icon":41,"to":42,"description":43,"github":44,"badge":38},"Shield Base","i-lucide-database-zap","\u002Fdocs\u002Fshield-base","CLI and programmatic toolkit for compiling offline-ready IP intelligence databases from BGP, GeoIP, Tor, FireHOL, and other public threat feeds.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fshield-base-cli",{"label":46,"icon":47,"to":48,"description":49,"github":50,"badge":51},"Utils","i-lucide-wrench","\u002Fdocs\u002Futils","A standard library of highly optimized helpers for formatting, validation, and core logic.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Futils","Library",{"nested":53,"label":54,"icon":55,"to":56},false,"Blog","i-lucide-pen-line","\u002Fblog",{"nested":53,"label":58,"icon":59,"to":60},"Website","lucide:app-window-mac","https:\u002F\u002Friavzon.com",{},"navigation","gkaQ0xRGxSLrLyM3kttLe0oBwkrR1EBjlepF8LSbwF8",[65],{"title":9,"path":66,"stem":67,"children":68,"page":53},"\u002Fdocs","docs",[69],{"title":20,"path":22,"stem":70,"children":71},"docs\u002Fauth-h3client\u002Findex",[72,73,82,119,145,167,170,191,195],{"title":20,"path":22,"stem":70},{"title":14,"path":74,"stem":75,"children":76},"\u002Fdocs\u002Fauth-h3client\u002Fgetting-started","docs\u002Fauth-h3client\u002F00.getting-started\u002Findex",[77,78],{"title":14,"path":74,"stem":75},{"title":79,"path":80,"stem":81},"Nuxt Module","\u002Fdocs\u002Fauth-h3client\u002Fgetting-started\u002Fnuxt","docs\u002Fauth-h3client\u002F00.getting-started\u002F00.nuxt",{"title":83,"path":84,"stem":85,"children":86},"Essentials","\u002Fdocs\u002Fauth-h3client\u002Fessentials","docs\u002Fauth-h3client\u002F01.essentials\u002Findex",[87,88,92,96,100,104,108,111,115],{"title":83,"path":84,"stem":85},{"title":89,"path":90,"stem":91},"Session Management","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fsession","docs\u002Fauth-h3client\u002F01.essentials\u002F00.session",{"title":93,"path":94,"stem":95},"Route Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Froute-protection","docs\u002Fauth-h3client\u002F01.essentials\u002F01.route-protection",{"title":97,"path":98,"stem":99},"CSRF Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcsrf","docs\u002Fauth-h3client\u002F01.essentials\u002F02.csrf",{"title":101,"path":102,"stem":103},"Auth Flows","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fauth-flows","docs\u002Fauth-h3client\u002F01.essentials\u002F03.auth-flows",{"title":105,"path":106,"stem":107},"OAuth and OIDC","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Foauth","docs\u002Fauth-h3client\u002F01.essentials\u002F04.oauth",{"title":33,"path":109,"stem":110},"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fbot-detection","docs\u002Fauth-h3client\u002F01.essentials\u002F05.bot-detection",{"title":112,"path":113,"stem":114},"Cookies","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcookies","docs\u002Fauth-h3client\u002F01.essentials\u002F06.cookies",{"title":116,"path":117,"stem":118},"Logging","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Flogging","docs\u002Fauth-h3client\u002F01.essentials\u002F07.logging",{"title":120,"path":121,"stem":122,"children":123},"MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa","docs\u002Fauth-h3client\u002F02.mfa\u002Findex",[124,125,129,133,137,141],{"title":120,"path":121,"stem":122},{"title":126,"path":127,"stem":128},"Built-in MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fbuilt-in-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F01.built-in-flow",{"title":130,"path":131,"stem":132},"Password Reset","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fpassword-reset","docs\u002Fauth-h3client\u002F02.mfa\u002F02.password-reset",{"title":134,"path":135,"stem":136},"Email Change","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Femail-change","docs\u002Fauth-h3client\u002F02.mfa\u002F03.email-change",{"title":138,"path":139,"stem":140},"Custom MFA Flow","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fcustom-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F04.custom-flow",{"title":142,"path":143,"stem":144},"Client-Side MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fclient-side","docs\u002Fauth-h3client\u002F02.mfa\u002F05.client-side",{"title":146,"path":147,"stem":148,"children":149},"Client-side","\u002Fdocs\u002Fauth-h3client\u002Fclient","docs\u002Fauth-h3client\u002F03.client\u002Findex",[150,151,155,159,163],{"title":146,"path":147,"stem":148},{"title":152,"path":153,"stem":154},"useAuthData","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-auth-data","docs\u002Fauth-h3client\u002F03.client\u002F00.use-auth-data",{"title":156,"path":157,"stem":158},"useMagicLink","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-magic-link","docs\u002Fauth-h3client\u002F03.client\u002F01.use-magic-link",{"title":160,"path":161,"stem":162},"executeRequest","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fexecute-request","docs\u002Fauth-h3client\u002F03.client\u002F02.execute-request",{"title":164,"path":165,"stem":166},"getCsrfToken","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fget-csrf-token","docs\u002Fauth-h3client\u002F03.client\u002F03.get-csrf-token",{"title":38,"path":168,"stem":169},"\u002Fdocs\u002Fauth-h3client\u002Fsecurity","docs\u002Fauth-h3client\u002F04.security",{"title":171,"path":172,"stem":173,"children":174,"page":53},"Guides","\u002Fdocs\u002Fauth-h3client\u002Fguides","docs\u002Fauth-h3client\u002F05.guides",[175,179,183,187],{"title":176,"path":177,"stem":178},"H3 and Nitro Setup","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fh3-nitro","docs\u002Fauth-h3client\u002F05.guides\u002F00.h3-nitro",{"title":180,"path":181,"stem":182},"HMAC Inter-service Auth","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fhmac","docs\u002Fauth-h3client\u002F05.guides\u002Fhmac",{"title":184,"path":185,"stem":186},"Image Upload","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fimage-upload","docs\u002Fauth-h3client\u002F05.guides\u002Fimage-upload",{"title":188,"path":189,"stem":190},"mTLS Configuration","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fmtls","docs\u002Fauth-h3client\u002F05.guides\u002Fmtls",{"title":192,"path":193,"stem":194},"Configuration","\u002Fdocs\u002Fauth-h3client\u002Fconfiguration","docs\u002Fauth-h3client\u002F06.configuration",{"title":196,"path":197,"stem":198,"children":199},"API Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi","docs\u002Fauth-h3client\u002F07.api\u002Findex",[200,201,205,209,213],{"title":196,"path":197,"stem":198},{"title":202,"path":203,"stem":204},"Routes Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcontrollers","docs\u002Fauth-h3client\u002F07.api\u002F00.controllers",{"title":206,"path":207,"stem":208},"Middleware Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fmiddleware","docs\u002Fauth-h3client\u002F07.api\u002F01.middleware",{"title":210,"path":211,"stem":212},"Client-side Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcomposables","docs\u002Fauth-h3client\u002F07.api\u002F02.composables",{"title":214,"path":215,"stem":216},"Utilities","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Futilities","docs\u002Fauth-h3client\u002F07.api\u002F03.utilities",[218],{"title":9,"path":66,"stem":67,"children":219,"page":53},[220,268,386,391,569,636],{"title":20,"path":22,"stem":70,"children":221},[222,223,227,238,246,253,254,260,261],{"title":20,"path":22,"stem":70},{"title":14,"path":74,"stem":75,"children":224},[225,226],{"title":14,"path":74,"stem":75},{"title":79,"path":80,"stem":81},{"title":83,"path":84,"stem":85,"children":228},[229,230,231,232,233,234,235,236,237],{"title":83,"path":84,"stem":85},{"title":89,"path":90,"stem":91},{"title":93,"path":94,"stem":95},{"title":97,"path":98,"stem":99},{"title":101,"path":102,"stem":103},{"title":105,"path":106,"stem":107},{"title":33,"path":109,"stem":110},{"title":112,"path":113,"stem":114},{"title":116,"path":117,"stem":118},{"title":120,"path":121,"stem":122,"children":239},[240,241,242,243,244,245],{"title":120,"path":121,"stem":122},{"title":126,"path":127,"stem":128},{"title":130,"path":131,"stem":132},{"title":134,"path":135,"stem":136},{"title":138,"path":139,"stem":140},{"title":142,"path":143,"stem":144},{"title":146,"path":147,"stem":148,"children":247},[248,249,250,251,252],{"title":146,"path":147,"stem":148},{"title":152,"path":153,"stem":154},{"title":156,"path":157,"stem":158},{"title":160,"path":161,"stem":162},{"title":164,"path":165,"stem":166},{"title":38,"path":168,"stem":169},{"title":171,"path":172,"stem":173,"children":255,"page":53},[256,257,258,259],{"title":176,"path":177,"stem":178},{"title":180,"path":181,"stem":182},{"title":184,"path":185,"stem":186},{"title":188,"path":189,"stem":190},{"title":192,"path":193,"stem":194},{"title":196,"path":197,"stem":198,"children":262},[263,264,265,266,267],{"title":196,"path":197,"stem":198},{"title":202,"path":203,"stem":204},{"title":206,"path":207,"stem":208},{"title":210,"path":211,"stem":212},{"title":214,"path":215,"stem":216},{"title":269,"path":35,"stem":270,"children":271},"Bot Detector","docs\u002Fbot-detection\u002Findex",[272,273,276,280,284,303,377,380,383],{"title":269,"path":35,"stem":270},{"title":14,"path":274,"stem":275},"\u002Fdocs\u002Fbot-detection\u002Fgetting-started","docs\u002Fbot-detection\u002F00.getting-started",{"title":277,"path":278,"stem":279},"CLI","\u002Fdocs\u002Fbot-detection\u002Fcli","docs\u002Fbot-detection\u002F01.cli",{"title":281,"path":282,"stem":283},"Data Sources","\u002Fdocs\u002Fbot-detection\u002Fdata-sources","docs\u002Fbot-detection\u002F02.data-sources",{"title":171,"path":285,"stem":286,"children":287,"page":53},"\u002Fdocs\u002Fbot-detection\u002Fguides","docs\u002Fbot-detection\u002F03.guides",[288,292,296,299],{"title":289,"path":290,"stem":291},"Custom Checkers","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fcustom","docs\u002Fbot-detection\u002F03.guides\u002FCUSTOM",{"title":293,"path":294,"stem":295},"Scheduling Database Generation","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fgenerate","docs\u002Fbot-detection\u002F03.guides\u002FGENERATE",{"title":116,"path":297,"stem":298},"\u002Fdocs\u002Fbot-detection\u002Fguides\u002Flogging","docs\u002Fbot-detection\u002F03.guides\u002FLOGGING",{"title":300,"path":301,"stem":302},"Score Modes and Reputation Healing","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fscore","docs\u002Fbot-detection\u002F03.guides\u002FSCORE",{"title":304,"path":305,"stem":306,"children":307},"Checkers","\u002Fdocs\u002Fbot-detection\u002Fcheckers","docs\u002Fbot-detection\u002F04.checkers\u002Findex",[308,309,313,317,321,325,329,333,337,341,345,349,353,357,361,365,369,373],{"title":304,"path":305,"stem":306},{"title":310,"path":311,"stem":312},"IP Validation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fip-validation","docs\u002Fbot-detection\u002F04.checkers\u002F01.ip-validation",{"title":314,"path":315,"stem":316},"Good \u002F Bad Bot Verification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgood-bots","docs\u002Fbot-detection\u002F04.checkers\u002F02.good-bots",{"title":318,"path":319,"stem":320},"Browser & Device Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbrowser-device","docs\u002Fbot-detection\u002F04.checkers\u002F03.browser-device",{"title":322,"path":323,"stem":324},"Locale Map","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Flocale-map","docs\u002Fbot-detection\u002F04.checkers\u002F04.locale-map",{"title":326,"path":327,"stem":328},"Known Threats","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-threats","docs\u002Fbot-detection\u002F04.checkers\u002F05.known-threats",{"title":330,"path":331,"stem":332},"ASN Classification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fasn-classification","docs\u002Fbot-detection\u002F04.checkers\u002F06.asn-classification",{"title":334,"path":335,"stem":336},"Tor Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftor-analysis","docs\u002Fbot-detection\u002F04.checkers\u002F07.tor-analysis",{"title":338,"path":339,"stem":340},"Timezone Consistency","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftimezone-consistency","docs\u002Fbot-detection\u002F04.checkers\u002F08.timezone-consistency",{"title":342,"path":343,"stem":344},"Honeypot","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fhoneypot","docs\u002Fbot-detection\u002F04.checkers\u002F09.honeypot",{"title":346,"path":347,"stem":348},"Known Bad IPs","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ips","docs\u002Fbot-detection\u002F04.checkers\u002F10.known-bad-ips",{"title":350,"path":351,"stem":352},"Behavior Rate","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbehavior-rate","docs\u002Fbot-detection\u002F04.checkers\u002F11.behavior-rate",{"title":354,"path":355,"stem":356},"Proxy \u002F ISP \u002F Cookie","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fproxy-isp-cookies","docs\u002Fbot-detection\u002F04.checkers\u002F12.proxy-isp-cookies",{"title":358,"path":359,"stem":360},"Session Coherence","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fsession-coherence","docs\u002Fbot-detection\u002F04.checkers\u002F13.session-coherence",{"title":362,"path":363,"stem":364},"Velocity Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fvelocity-fingerprint","docs\u002Fbot-detection\u002F04.checkers\u002F14.velocity-fingerprint",{"title":366,"path":367,"stem":368},"UA & Header Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fua-header","docs\u002Fbot-detection\u002F04.checkers\u002F15.ua-header",{"title":370,"path":371,"stem":372},"Geolocation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgeolocation","docs\u002Fbot-detection\u002F04.checkers\u002F16.geolocation",{"title":374,"path":375,"stem":376},"Known Bad User-Agents","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ua","docs\u002Fbot-detection\u002F04.checkers\u002F17.known-bad-ua",{"title":38,"path":378,"stem":379},"\u002Fdocs\u002Fbot-detection\u002Fsecurity","docs\u002Fbot-detection\u002F04.security",{"title":196,"path":381,"stem":382},"\u002Fdocs\u002Fbot-detection\u002Fapi","docs\u002Fbot-detection\u002F05.api",{"title":192,"path":384,"stem":385},"\u002Fdocs\u002Fbot-detection\u002Fconfiguration","docs\u002Fbot-detection\u002F06.configuration",{"title":387,"path":11,"stem":388,"children":389},"Introduction","docs\u002Fgetting-started\u002Findex",[390],{"title":387,"path":11,"stem":388},{"title":27,"path":29,"stem":392,"children":393},"docs\u002Fiam\u002Findex",[394,395,398,533,536,552,555],{"title":27,"path":29,"stem":392},{"title":14,"path":396,"stem":397},"\u002Fdocs\u002Fiam\u002Fgetting-started","docs\u002Fiam\u002F00.getting-started",{"title":83,"path":399,"stem":400,"children":401},"\u002Fdocs\u002Fiam\u002Fessentials","docs\u002Fiam\u002F01.essentials\u002Findex",[402,403,407,411,415,419,423,427,431,435,439,443,446,450,454,458,462,465,469,473,476,480,483],{"title":83,"path":399,"stem":400},{"title":404,"path":405,"stem":406},"Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Ftokens","docs\u002Fiam\u002F01.essentials\u002F00.tokens",{"title":408,"path":409,"stem":410},"Access Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Faccess-tokens","docs\u002Fiam\u002F01.essentials\u002F01.access-tokens",{"title":412,"path":413,"stem":414},"Refresh Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Frefresh-tokens","docs\u002Fiam\u002F01.essentials\u002F02.refresh-tokens",{"title":416,"path":417,"stem":418},"Anomaly Detection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fanomalies","docs\u002Fiam\u002F01.essentials\u002F03.anomalies",{"title":420,"path":421,"stem":422},"Signup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fsignup","docs\u002Fiam\u002F01.essentials\u002F04.signup",{"title":424,"path":425,"stem":426},"Login","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogin","docs\u002Fiam\u002F01.essentials\u002F05.login",{"title":428,"path":429,"stem":430},"Logout","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogout","docs\u002Fiam\u002F01.essentials\u002F06.logout",{"title":432,"path":433,"stem":434},"OAuth","\u002Fdocs\u002Fiam\u002Fessentials\u002Foauth","docs\u002Fiam\u002F01.essentials\u002F07.oauth",{"title":436,"path":437,"stem":438},"Magic Links","\u002Fdocs\u002Fiam\u002Fessentials\u002Fmagic-links","docs\u002Fiam\u002F01.essentials\u002F08.magic-links",{"title":440,"path":441,"stem":442},"Emails","\u002Fdocs\u002Fiam\u002Fessentials\u002Femails","docs\u002Fiam\u002F01.essentials\u002F09.emails",{"title":120,"path":444,"stem":445},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fmfa","docs\u002Fiam\u002F01.essentials\u002F10.mfa",{"title":447,"path":448,"stem":449},"Fingerprinting","\u002Fdocs\u002Fiam\u002Fessentials\u002Ffingerprinting","docs\u002Fiam\u002F01.essentials\u002F11.fingerprinting",{"title":451,"path":452,"stem":453},"Backend for Frontend","\u002Fdocs\u002Fiam\u002Fessentials\u002Fbff","docs\u002Fiam\u002F01.essentials\u002F12.bff",{"title":455,"path":456,"stem":457},"HMAC Authentication","\u002Fdocs\u002Fiam\u002Fessentials\u002Fhmac","docs\u002Fiam\u002F01.essentials\u002F13.hmac",{"title":459,"path":460,"stem":461},"XSS Protection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fxss","docs\u002Fiam\u002F01.essentials\u002F14.xss",{"title":116,"path":463,"stem":464},"\u002Fdocs\u002Fiam\u002Fessentials\u002Flogging","docs\u002Fiam\u002F01.essentials\u002F15.logging",{"title":466,"path":467,"stem":468},"Rate Limiting","\u002Fdocs\u002Fiam\u002Fessentials\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F16.rate-limiting",{"title":470,"path":471,"stem":472},"Database","\u002Fdocs\u002Fiam\u002Fessentials\u002Fdatabase","docs\u002Fiam\u002F01.essentials\u002F17.database",{"title":112,"path":474,"stem":475},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fcookies","docs\u002Fiam\u002F01.essentials\u002F18.cookies",{"title":477,"path":478,"stem":479},"Service Startup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fservice","docs\u002Fiam\u002F01.essentials\u002F19.service",{"title":130,"path":481,"stem":482},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fpassword-reset","docs\u002Fiam\u002F01.essentials\u002F20.password-reset",{"title":484,"path":485,"stem":486,"children":487},"API Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi","docs\u002Fiam\u002F01.essentials\u002F21.api\u002Findex",[488,489,493,497,527,530],{"title":484,"path":485,"stem":486},{"title":490,"path":491,"stem":492},"Creating Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fcreation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F00.creation",{"title":494,"path":495,"stem":496},"Verifying Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fverification","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F01.verification",{"title":498,"path":499,"stem":500,"children":501},"Manage Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002Findex",[502,503,507,511,515,519,523],{"title":498,"path":499,"stem":500},{"title":504,"path":505,"stem":506},"Privileges","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fprivilege","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F00.privilege",{"title":508,"path":509,"stem":510},"Revocation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frevocation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F01.revocation",{"title":512,"path":513,"stem":514},"Rotation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frotation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F02.rotation",{"title":516,"path":517,"stem":518},"IP Restriction","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fip-updates","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F03.ip-updates",{"title":520,"path":521,"stem":522},"Metadata","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fmetadata","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F04.metadata",{"title":524,"path":525,"stem":526},"Token Listing","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Flist","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F05.list",{"title":466,"path":528,"stem":529},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F03.rate-limiting",{"title":38,"path":531,"stem":532},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fsecurity","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F04.security",{"title":38,"path":534,"stem":535},"\u002Fdocs\u002Fiam\u002Fsecurity","docs\u002Fiam\u002F02.security",{"title":171,"path":537,"stem":538,"children":539,"page":53},"\u002Fdocs\u002Fiam\u002Fguides","docs\u002Fiam\u002F03.guides",[540,544,548],{"title":541,"path":542,"stem":543},"Deployment","\u002Fdocs\u002Fiam\u002Fguides\u002Fdeployment","docs\u002Fiam\u002F03.guides\u002Fdeployment",{"title":545,"path":546,"stem":547},"Operation Scripts","\u002Fdocs\u002Fiam\u002Fguides\u002Foperation-scripts","docs\u002Fiam\u002F03.guides\u002Foperation-scripts",{"title":549,"path":550,"stem":551},"Role-Based Access Control","\u002Fdocs\u002Fiam\u002Fguides\u002Frbac","docs\u002Fiam\u002F03.guides\u002Frbac",{"title":192,"path":553,"stem":554},"\u002Fdocs\u002Fiam\u002Fconfiguration","docs\u002Fiam\u002F04.configuration",{"title":556,"path":557,"stem":558,"children":559,"page":53},"Api","\u002Fdocs\u002Fiam\u002Fapi","docs\u002Fiam\u002F05.API",[560,563,566],{"title":196,"path":561,"stem":562},"\u002Fdocs\u002Fiam\u002Fapi\u002Fapi","docs\u002Fiam\u002F05.API\u002F00.api",{"title":206,"path":564,"stem":565},"\u002Fdocs\u002Fiam\u002Fapi\u002Fmiddlewares","docs\u002Fiam\u002F05.API\u002F02.middlewares",{"title":202,"path":567,"stem":568},"\u002Fdocs\u002Fiam\u002Fapi\u002Froutes","docs\u002Fiam\u002F05.API\u002F03.routes",{"title":40,"path":42,"stem":570,"children":571},"docs\u002Fshield-base\u002Findex",[572,573,576,580,621,625,629,633],{"title":40,"path":42,"stem":570},{"title":14,"path":574,"stem":575},"\u002Fdocs\u002Fshield-base\u002Fgetting-started","docs\u002Fshield-base\u002F00.getting-started",{"title":577,"path":578,"stem":579},"CLI Reference","\u002Fdocs\u002Fshield-base\u002Fcli","docs\u002Fshield-base\u002F01.cli",{"title":281,"path":581,"stem":582,"children":583},"\u002Fdocs\u002Fshield-base\u002Fdata-sources","docs\u002Fshield-base\u002F02.data-sources\u002Findex",[584,585,589,593,597,601,605,609,613,617],{"title":281,"path":581,"stem":582},{"title":586,"path":587,"stem":588},"BGP \u002F ASN","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fbgp","docs\u002Fshield-base\u002F02.data-sources\u002Fbgp",{"title":590,"path":591,"stem":592},"City Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcity","docs\u002Fshield-base\u002F02.data-sources\u002Fcity",{"title":594,"path":595,"stem":596},"Country Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcountry","docs\u002Fshield-base\u002F02.data-sources\u002Fcountry",{"title":598,"path":599,"stem":600},"Verified Crawlers","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcrawlers","docs\u002Fshield-base\u002F02.data-sources\u002Fcrawlers",{"title":602,"path":603,"stem":604},"Disposable Emails","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Femail","docs\u002Fshield-base\u002F02.data-sources\u002Femail",{"title":606,"path":607,"stem":608},"FireHOL Threat Intelligence","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ffirehol","docs\u002Fshield-base\u002F02.data-sources\u002Ffirehol",{"title":610,"path":611,"stem":612},"Proxy Detection","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fproxy","docs\u002Fshield-base\u002F02.data-sources\u002Fproxy",{"title":614,"path":615,"stem":616},"Tor Nodes","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ftor","docs\u002Fshield-base\u002F02.data-sources\u002Ftor",{"title":618,"path":619,"stem":620},"Suspicious User-Agents","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fuseragent","docs\u002Fshield-base\u002F02.data-sources\u002Fuseragent",{"title":622,"path":623,"stem":624},"Programmatic Usage","\u002Fdocs\u002Fshield-base\u002Fusage","docs\u002Fshield-base\u002F03.usage",{"title":626,"path":627,"stem":628},"Custom Data Sources","\u002Fdocs\u002Fshield-base\u002Fcustom-data-sources","docs\u002Fshield-base\u002F04.custom-data-sources",{"title":630,"path":631,"stem":632},"TypeScript Types","\u002Fdocs\u002Fshield-base\u002Ftypes","docs\u002Fshield-base\u002F05.types",{"title":196,"path":634,"stem":635},"\u002Fdocs\u002Fshield-base\u002Fapi","docs\u002Fshield-base\u002F06.api",{"title":214,"path":48,"stem":637,"children":638},"docs\u002Futils\u002Findex",[639,640,657,690,787],{"title":214,"path":48,"stem":637},{"title":641,"path":642,"stem":643,"children":644,"page":53},"Eslint","\u002Fdocs\u002Futils\u002Feslint","docs\u002Futils\u002Feslint",[645,649,653],{"title":646,"path":647,"stem":648},"React Config","\u002Fdocs\u002Futils\u002Feslint\u002Freact","docs\u002Futils\u002Feslint\u002Freact",{"title":650,"path":651,"stem":652},"TypeScript Config","\u002Fdocs\u002Futils\u002Feslint\u002Ftypescript","docs\u002Futils\u002Feslint\u002Ftypescript",{"title":654,"path":655,"stem":656},"Vue Config","\u002Fdocs\u002Futils\u002Feslint\u002Fvue","docs\u002Futils\u002Feslint\u002Fvue",{"title":658,"path":659,"stem":660,"children":661,"page":53},"Server","\u002Fdocs\u002Futils\u002Fserver","docs\u002Futils\u002Fserver",[662,666,670,674,678,682,686],{"title":663,"path":664,"stem":665},"Encryption","\u002Fdocs\u002Futils\u002Fserver\u002Fencryption","docs\u002Futils\u002Fserver\u002Fencryption",{"title":667,"path":668,"stem":669},"Path Resolver","\u002Fdocs\u002Futils\u002Fserver\u002Fpathresolver","docs\u002Futils\u002Fserver\u002FpathResolver",{"title":671,"path":672,"stem":673},"File Replacements","\u002Fdocs\u002Futils\u002Fserver\u002Freplace","docs\u002Futils\u002Fserver\u002Freplace",{"title":675,"path":676,"stem":677},"run","\u002Fdocs\u002Futils\u002Fserver\u002Frun","docs\u002Futils\u002Fserver\u002Frun",{"title":679,"path":680,"stem":681},"scheduleTask","\u002Fdocs\u002Futils\u002Fserver\u002Fscheduletask","docs\u002Futils\u002Fserver\u002FscheduleTask",{"title":683,"path":684,"stem":685},"spawnRun","\u002Fdocs\u002Futils\u002Fserver\u002Fspawnrun","docs\u002Futils\u002Fserver\u002FspawnRun",{"title":687,"path":688,"stem":689},"uploadCsv","\u002Fdocs\u002Futils\u002Fserver\u002Fuploadcsv","docs\u002Futils\u002Fserver\u002FuploadCsv",{"title":691,"path":692,"stem":693,"children":694,"page":53},"Shared","\u002Fdocs\u002Futils\u002Fshared","docs\u002Futils\u002Fshared",[695,699,703,707,711,715,719,723,727,731,735,739,743,747,751,755,759,763,767,771,775,779,783],{"title":696,"path":697,"stem":698},"BatchQueue","\u002Fdocs\u002Futils\u002Fshared\u002Fbatchqueue","docs\u002Futils\u002Fshared\u002FbatchQueue",{"title":700,"path":701,"stem":702},"capitalize","\u002Fdocs\u002Futils\u002Fshared\u002Fcapitalize","docs\u002Futils\u002Fshared\u002Fcapitalize",{"title":704,"path":705,"stem":706},"chunkProcess","\u002Fdocs\u002Futils\u002Fshared\u002Fchunkprocess","docs\u002Futils\u002Fshared\u002FchunkProcess",{"title":708,"path":709,"stem":710},"cleanObject","\u002Fdocs\u002Futils\u002Fshared\u002Fcleanobject","docs\u002Futils\u002Fshared\u002FcleanObject",{"title":712,"path":713,"stem":714},"createConfigManager","\u002Fdocs\u002Futils\u002Fshared\u002Fconfigurationdefiner","docs\u002Futils\u002Fshared\u002FconfigurationDefiner",{"title":716,"path":717,"stem":718},"debounce","\u002Fdocs\u002Futils\u002Fshared\u002Fdebounce","docs\u002Futils\u002Fshared\u002Fdebounce",{"title":720,"path":721,"stem":722},"ensureArray","\u002Fdocs\u002Futils\u002Fshared\u002Fensurearray","docs\u002Futils\u002Fshared\u002FensureArray",{"title":724,"path":725,"stem":726},"fetchWithRetry","\u002Fdocs\u002Futils\u002Fshared\u002Ffetchwithretry","docs\u002Futils\u002Fshared\u002FfetchWithRetry",{"title":728,"path":729,"stem":730},"filterEmptyValues","\u002Fdocs\u002Futils\u002Fshared\u002Ffilteremptyvalues","docs\u002Futils\u002Fshared\u002FfilterEmptyValues",{"title":732,"path":733,"stem":734},"findStringsInObject","\u002Fdocs\u002Futils\u002Fshared\u002Ffindobjectvalues","docs\u002Futils\u002Fshared\u002FfindObjectValues",{"title":736,"path":737,"stem":738},"fisherYatesShuffle","\u002Fdocs\u002Futils\u002Fshared\u002Ffisheryatesshuffle","docs\u002Futils\u002Fshared\u002FfisherYatesShuffle",{"title":740,"path":741,"stem":742},"getRandomImage","\u002Fdocs\u002Futils\u002Fshared\u002Fgetrandomimage","docs\u002Futils\u002Fshared\u002FgetRandomImage",{"title":744,"path":745,"stem":746},"isObjectHasValues","\u002Fdocs\u002Futils\u002Fshared\u002Fisobjecthasvalues","docs\u002Futils\u002Fshared\u002FisObjectHasValues",{"title":748,"path":749,"stem":750},"isAsyncOrPromise","\u002Fdocs\u002Futils\u002Fshared\u002Fispromise","docs\u002Futils\u002Fshared\u002FisPromise",{"title":752,"path":753,"stem":754},"MiniCache","\u002Fdocs\u002Futils\u002Fshared\u002Fminicache","docs\u002Futils\u002Fshared\u002FminiCache",{"title":756,"path":757,"stem":758},"parseCookies","\u002Fdocs\u002Futils\u002Fshared\u002Fparserawcookies","docs\u002Futils\u002Fshared\u002FparseRawCookies",{"title":760,"path":761,"stem":762},"safeAction","\u002Fdocs\u002Futils\u002Fshared\u002Fpromiselocker","docs\u002Futils\u002Fshared\u002FpromiseLocker",{"title":764,"path":765,"stem":766},"Random","\u002Fdocs\u002Futils\u002Fshared\u002Frandom","docs\u002Futils\u002Fshared\u002Frandom",{"title":768,"path":769,"stem":770},"range","\u002Fdocs\u002Futils\u002Fshared\u002Frange","docs\u002Futils\u002Fshared\u002Frange",{"title":772,"path":773,"stem":774},"rateLimiters","\u002Fdocs\u002Futils\u002Fshared\u002Fratelimiters","docs\u002Futils\u002Fshared\u002FrateLimiters",{"title":776,"path":777,"stem":778},"safeObjectMerge","\u002Fdocs\u002Futils\u002Fshared\u002Fsafemerge","docs\u002Futils\u002Fshared\u002FsafeMerge",{"title":780,"path":781,"stem":782},"textTruncation","\u002Fdocs\u002Futils\u002Fshared\u002Ftexttruncation","docs\u002Futils\u002Fshared\u002FtextTruncation",{"title":784,"path":785,"stem":786},"validateZodSchema","\u002Fdocs\u002Futils\u002Fshared\u002Fvalidatezodschema","docs\u002Futils\u002Fshared\u002FvalidateZodSchema",{"title":788,"path":789,"stem":790,"children":791},"Utility Types","\u002Fdocs\u002Futils\u002Ftypes","docs\u002Futils\u002Ftypes\u002Findex",[792,793,797,801,805,809,813,817,821,825],{"title":788,"path":789,"stem":790},{"title":794,"path":795,"stem":796},"Brand","\u002Fdocs\u002Futils\u002Ftypes\u002Fbrand","docs\u002Futils\u002Ftypes\u002FBrand",{"title":798,"path":799,"stem":800},"DeepPartial","\u002Fdocs\u002Futils\u002Ftypes\u002Fdeeppartial","docs\u002Futils\u002Ftypes\u002FDeepPartial",{"title":802,"path":803,"stem":804},"Merge","\u002Fdocs\u002Futils\u002Ftypes\u002Fmerge","docs\u002Futils\u002Ftypes\u002FMerge",{"title":806,"path":807,"stem":808},"NonNullable","\u002Fdocs\u002Futils\u002Ftypes\u002Fnonnullable","docs\u002Futils\u002Ftypes\u002FNonNullable",{"title":810,"path":811,"stem":812},"Prettify","\u002Fdocs\u002Futils\u002Ftypes\u002Fprettify","docs\u002Futils\u002Ftypes\u002FPrettify",{"title":814,"path":815,"stem":816},"PromiseType","\u002Fdocs\u002Futils\u002Ftypes\u002Fpromisetype","docs\u002Futils\u002Ftypes\u002FPromiseType",{"title":818,"path":819,"stem":820},"RequireKeys","\u002Fdocs\u002Futils\u002Ftypes\u002Frequirekeys","docs\u002Futils\u002Ftypes\u002FRequireKeys",{"title":822,"path":823,"stem":824},"StandardResponse","\u002Fdocs\u002Futils\u002Ftypes\u002Fstandardresponse","docs\u002Futils\u002Ftypes\u002FStandardResponse",{"title":826,"path":827,"stem":828},"ValueOf","\u002Fdocs\u002Futils\u002Ftypes\u002Fvalueof","docs\u002Futils\u002Ftypes\u002FValueOf",{"id":4,"extension":5,"links":830,"meta":841,"stem":62,"__hash__":63},[831,839,840],{"nested":8,"label":9,"icon":10,"to":11,"children":832},[833,834,835,836,837,838],{"label":14,"icon":15,"to":11,"description":16,"github":17,"badge":18},{"label":20,"icon":21,"to":22,"description":23,"github":24,"badge":25},{"label":27,"icon":28,"to":29,"description":30,"github":31,"badge":25},{"label":33,"icon":34,"to":35,"description":36,"github":37,"badge":38},{"label":40,"icon":41,"to":42,"description":43,"github":44,"badge":38},{"label":46,"icon":47,"to":48,"description":49,"github":50,"badge":51},{"nested":53,"label":54,"icon":55,"to":56},{"nested":53,"label":58,"icon":59,"to":60},{},{"id":843,"title":160,"body":844,"description":1882,"extension":1883,"icon":1884,"meta":1885,"module":1886,"navigation":8,"path":161,"rawbody":1887,"seo":1888,"stem":162,"__hash__":1889},"docs\u002Fdocs\u002Fauth-h3client\u002F03.client\u002F02.execute-request.md",{"type":845,"value":846,"toc":1874},"minimark",[847,864,885,896,1061,1064,1069,1246,1361,1437,1439,1443,1534,1554,1563,1565,1569,1589,1665,1667,1671,1674,1788,1806,1808,1812,1826,1828,1832,1845,1861,1870],[848,849,850,853,854,863],"p",{},[851,852,160],"code",{}," is the recommended way to make authenticated requests from Vue components, pages, and server routes. It wraps ",[855,856,860],"a",{"href":857,"rel":858},"https:\u002F\u002Fgithub.com\u002Funjs\u002Fofetch",[859],"nofollow",[851,861,862],{},"ofetch"," with three things already wired:",[865,866,867,875,878],"ul",{},[868,869,870,871,874],"li",{},"On the client, the CSRF header is injected automatically from the ",[851,872,873],{},"__Host-csrf"," cookie.",[868,876,877],{},"During Vue SSR, incoming request headers are proxied to the upstream call so cookies flow through.",[868,879,880,881,884],{},"Response ",[851,882,883],{},"Set-Cookie"," headers are captured during SSR and re-attached to the outgoing response, which makes token rotation transparent.",[848,886,887,888,891,892,895],{},"Every response is normalized to a ",[851,889,890],{},"Results\u003CT>"," envelope so call sites can branch on a single ",[851,893,894],{},"ok"," field rather than unwinding fetch errors.",[897,898,903],"pre",{"className":899,"code":900,"language":901,"meta":902,"style":902},"language-ts shiki shiki-themes light-plus light-plus dracula","import { executeRequest } from 'auth-h3client\u002Fclient'\n\nconst result = await executeRequest\u003C{ name: string }>('\u002Fapi\u002Fprofile', 'GET')\n\nif (result.ok) {\n  console.log(result.data.name)\n}\n","ts","",[851,904,905,938,944,1003,1008,1028,1055],{"__ignoreMap":902},[906,907,910,914,918,921,924,927,931,935],"span",{"class":908,"line":909},"line",1,[906,911,913],{"class":912},"sZ328","import",[906,915,917],{"class":916},"sDd4n"," { ",[906,919,160],{"class":920},"sjsA6",[906,922,923],{"class":916}," } ",[906,925,926],{"class":912},"from",[906,928,930],{"class":929},"sFkSl"," '",[906,932,934],{"class":933},"sFB1V","auth-h3client\u002Fclient",[906,936,937],{"class":929},"'\n",[906,939,941],{"class":908,"line":940},2,[906,942,943],{"emptyLinePlaceholder":8},"\n",[906,945,947,951,955,959,962,966,969,972,975,979,982,985,988,990,993,995,998,1000],{"class":908,"line":946},3,[906,948,950],{"class":949},"sl46w","const",[906,952,954],{"class":953},"s3JHE"," result",[906,956,958],{"class":957},"saOXh"," =",[906,960,961],{"class":912}," await",[906,963,965],{"class":964},"sHOzp"," executeRequest",[906,967,968],{"class":916},"\u003C{ ",[906,970,971],{"class":920},"name",[906,973,974],{"class":957},":",[906,976,978],{"class":977},"sFs1U"," string",[906,980,981],{"class":916}," }>(",[906,983,984],{"class":929},"'",[906,986,987],{"class":933},"\u002Fapi\u002Fprofile",[906,989,984],{"class":929},[906,991,992],{"class":916},", ",[906,994,984],{"class":929},[906,996,997],{"class":933},"GET",[906,999,984],{"class":929},[906,1001,1002],{"class":916},")\n",[906,1004,1006],{"class":908,"line":1005},4,[906,1007,943],{"emptyLinePlaceholder":8},[906,1009,1011,1014,1017,1020,1023,1025],{"class":908,"line":1010},5,[906,1012,1013],{"class":912},"if",[906,1015,1016],{"class":916}," (",[906,1018,1019],{"class":920},"result",[906,1021,1022],{"class":916},".",[906,1024,894],{"class":920},[906,1026,1027],{"class":916},") {\n",[906,1029,1031,1034,1036,1039,1042,1044,1046,1049,1051,1053],{"class":908,"line":1030},6,[906,1032,1033],{"class":920},"  console",[906,1035,1022],{"class":916},[906,1037,1038],{"class":964},"log",[906,1040,1041],{"class":916},"(",[906,1043,1019],{"class":920},[906,1045,1022],{"class":916},[906,1047,1048],{"class":920},"data",[906,1050,1022],{"class":916},[906,1052,971],{"class":920},[906,1054,1002],{"class":916},[906,1056,1058],{"class":908,"line":1057},7,[906,1059,1060],{"class":916},"}\n",[1062,1063],"hr",{},[1065,1066,1068],"h2",{"id":1067},"signature","Signature",[897,1070,1072],{"className":899,"code":1071,"language":901,"meta":902,"style":902},"function executeRequest\u003CT>(\n  url: string,\n  method: 'GET' | 'POST' | 'DELETE' | 'PUT' | 'PATCH',\n  body?: object,\n  customHeaders?: Record\u003Cstring, string>,\n  customOptions?: FetchOptions\u003C'json'>,\n  context?: ApiContext,\n): Promise\u003CResults\u003CT>>\n",[851,1073,1074,1091,1104,1156,1169,1191,1211,1223],{"__ignoreMap":902},[906,1075,1076,1079,1081,1084,1088],{"class":908,"line":909},[906,1077,1078],{"class":949},"function",[906,1080,965],{"class":964},[906,1082,1083],{"class":916},"\u003C",[906,1085,1087],{"class":1086},"sW-rI","T",[906,1089,1090],{"class":916},">(\n",[906,1092,1093,1097,1099,1101],{"class":908,"line":940},[906,1094,1096],{"class":1095},"sygFZ","  url",[906,1098,974],{"class":957},[906,1100,978],{"class":977},[906,1102,1103],{"class":916},",\n",[906,1105,1106,1109,1111,1113,1115,1117,1120,1122,1125,1127,1129,1131,1134,1136,1138,1140,1143,1145,1147,1149,1152,1154],{"class":908,"line":946},[906,1107,1108],{"class":1095},"  method",[906,1110,974],{"class":957},[906,1112,930],{"class":929},[906,1114,997],{"class":933},[906,1116,984],{"class":929},[906,1118,1119],{"class":957}," |",[906,1121,930],{"class":929},[906,1123,1124],{"class":933},"POST",[906,1126,984],{"class":929},[906,1128,1119],{"class":957},[906,1130,930],{"class":929},[906,1132,1133],{"class":933},"DELETE",[906,1135,984],{"class":929},[906,1137,1119],{"class":957},[906,1139,930],{"class":929},[906,1141,1142],{"class":933},"PUT",[906,1144,984],{"class":929},[906,1146,1119],{"class":957},[906,1148,930],{"class":929},[906,1150,1151],{"class":933},"PATCH",[906,1153,984],{"class":929},[906,1155,1103],{"class":916},[906,1157,1158,1161,1164,1167],{"class":908,"line":1005},[906,1159,1160],{"class":1095},"  body",[906,1162,1163],{"class":957},"?:",[906,1165,1166],{"class":977}," object",[906,1168,1103],{"class":916},[906,1170,1171,1174,1176,1179,1181,1184,1186,1188],{"class":908,"line":1010},[906,1172,1173],{"class":1095},"  customHeaders",[906,1175,1163],{"class":957},[906,1177,1178],{"class":977}," Record",[906,1180,1083],{"class":916},[906,1182,1183],{"class":977},"string",[906,1185,992],{"class":916},[906,1187,1183],{"class":977},[906,1189,1190],{"class":916},">,\n",[906,1192,1193,1196,1198,1201,1203,1205,1207,1209],{"class":908,"line":1030},[906,1194,1195],{"class":1095},"  customOptions",[906,1197,1163],{"class":957},[906,1199,1200],{"class":977}," FetchOptions",[906,1202,1083],{"class":916},[906,1204,984],{"class":929},[906,1206,5],{"class":933},[906,1208,984],{"class":929},[906,1210,1190],{"class":916},[906,1212,1213,1216,1218,1221],{"class":908,"line":1057},[906,1214,1215],{"class":1095},"  context",[906,1217,1163],{"class":957},[906,1219,1220],{"class":977}," ApiContext",[906,1222,1103],{"class":916},[906,1224,1226,1229,1231,1234,1236,1239,1241,1243],{"class":908,"line":1225},8,[906,1227,1228],{"class":916},")",[906,1230,974],{"class":957},[906,1232,1233],{"class":977}," Promise",[906,1235,1083],{"class":916},[906,1237,1238],{"class":1086},"Results",[906,1240,1083],{"class":916},[906,1242,1087],{"class":1086},[906,1244,1245],{"class":916},">>\n",[1247,1248,1249,1265],"table",{},[1250,1251,1252],"thead",{},[1253,1254,1255,1259,1262],"tr",{},[1256,1257,1258],"th",{},"Parameter",[1256,1260,1261],{},"Type",[1256,1263,1264],{},"Description",[1266,1267,1268,1283,1298,1316,1331,1346],"tbody",{},[1253,1269,1270,1276,1280],{},[1271,1272,1273],"td",{},[851,1274,1275],{},"url",[1271,1277,1278],{},[851,1279,1183],{},[1271,1281,1282],{},"Endpoint URL to fetch",[1253,1284,1285,1290,1295],{},[1271,1286,1287],{},[851,1288,1289],{},"method",[1271,1291,1292],{},[851,1293,1294],{},"'GET' | 'POST' | 'DELETE' | 'PUT' | 'PATCH'",[1271,1296,1297],{},"HTTP method",[1253,1299,1300,1305,1310],{},[1271,1301,1302],{},[851,1303,1304],{},"body",[1271,1306,1307],{},[851,1308,1309],{},"object",[1271,1311,1312,1313,1315],{},"For ",[851,1314,997],{},", sent as query parameters. For other methods, sent as the JSON body",[1253,1317,1318,1323,1328],{},[1271,1319,1320],{},[851,1321,1322],{},"customHeaders",[1271,1324,1325],{},[851,1326,1327],{},"Record\u003Cstring, string>",[1271,1329,1330],{},"Extra headers merged onto the request",[1253,1332,1333,1338,1343],{},[1271,1334,1335],{},[851,1336,1337],{},"customOptions",[1271,1339,1340],{},[851,1341,1342],{},"FetchOptions\u003C'json'>",[1271,1344,1345],{},"Additional ofetch options (timeout, signal, retry, etc.)",[1253,1347,1348,1353,1358],{},[1271,1349,1350],{},[851,1351,1352],{},"context",[1271,1354,1355],{},[851,1356,1357],{},"ApiContext",[1271,1359,1360],{},"Server-side context (see below)",[897,1362,1364],{"className":899,"code":1363,"language":901,"meta":902,"style":902},"interface ApiContext {\n  fetcher?: H3Event$Fetch | $Fetch\u003Cunknown, NitroFetchRequest>\n  event?: H3Event\n  headers?: Record\u003Cstring, string>\n}\n",[851,1365,1366,1376,1404,1414,1433],{"__ignoreMap":902},[906,1367,1368,1371,1373],{"class":908,"line":909},[906,1369,1370],{"class":949},"interface",[906,1372,1220],{"class":977},[906,1374,1375],{"class":916}," {\n",[906,1377,1378,1381,1383,1386,1388,1391,1393,1396,1398,1401],{"class":908,"line":940},[906,1379,1380],{"class":920},"  fetcher",[906,1382,1163],{"class":957},[906,1384,1385],{"class":977}," H3Event$Fetch",[906,1387,1119],{"class":957},[906,1389,1390],{"class":977}," $Fetch",[906,1392,1083],{"class":916},[906,1394,1395],{"class":977},"unknown",[906,1397,992],{"class":916},[906,1399,1400],{"class":1086},"NitroFetchRequest",[906,1402,1403],{"class":916},">\n",[906,1405,1406,1409,1411],{"class":908,"line":946},[906,1407,1408],{"class":920},"  event",[906,1410,1163],{"class":957},[906,1412,1413],{"class":977}," H3Event\n",[906,1415,1416,1419,1421,1423,1425,1427,1429,1431],{"class":908,"line":1005},[906,1417,1418],{"class":920},"  headers",[906,1420,1163],{"class":957},[906,1422,1178],{"class":977},[906,1424,1083],{"class":916},[906,1426,1183],{"class":977},[906,1428,992],{"class":916},[906,1430,1183],{"class":977},[906,1432,1403],{"class":916},[906,1434,1435],{"class":908,"line":1010},[906,1436,1060],{"class":916},[1062,1438],{},[1065,1440,1442],{"id":1441},"return-type","Return type",[897,1444,1446],{"className":899,"code":1445,"language":901,"meta":902,"style":902},"type Results\u003CT> =\n  | { ok: true; data: T; date: string }\n  | { ok: false; reason: string; date: string }\n",[851,1447,1448,1466,1502],{"__ignoreMap":902},[906,1449,1450,1453,1456,1458,1460,1463],{"class":908,"line":909},[906,1451,1452],{"class":949},"type",[906,1454,1455],{"class":977}," Results",[906,1457,1083],{"class":916},[906,1459,1087],{"class":1086},[906,1461,1462],{"class":916},"> ",[906,1464,1465],{"class":957},"=\n",[906,1467,1468,1471,1473,1475,1477,1480,1483,1485,1487,1490,1492,1495,1497,1499],{"class":908,"line":940},[906,1469,1470],{"class":957},"  |",[906,1472,917],{"class":916},[906,1474,894],{"class":920},[906,1476,974],{"class":957},[906,1478,1479],{"class":977}," true",[906,1481,1482],{"class":916},"; ",[906,1484,1048],{"class":920},[906,1486,974],{"class":957},[906,1488,1489],{"class":977}," T",[906,1491,1482],{"class":916},[906,1493,1494],{"class":920},"date",[906,1496,974],{"class":957},[906,1498,978],{"class":977},[906,1500,1501],{"class":916}," }\n",[906,1503,1504,1506,1508,1510,1512,1515,1517,1520,1522,1524,1526,1528,1530,1532],{"class":908,"line":946},[906,1505,1470],{"class":957},[906,1507,917],{"class":916},[906,1509,894],{"class":920},[906,1511,974],{"class":957},[906,1513,1514],{"class":977}," false",[906,1516,1482],{"class":916},[906,1518,1519],{"class":920},"reason",[906,1521,974],{"class":957},[906,1523,978],{"class":977},[906,1525,1482],{"class":916},[906,1527,1494],{"class":920},[906,1529,974],{"class":957},[906,1531,978],{"class":977},[906,1533,1501],{"class":916},[865,1535,1536,1545],{},[868,1537,1538,1541,1542,1544],{},[851,1539,1540],{},"ok: true"," means the upstream call returned a successful JSON payload. ",[851,1543,1048],{}," is the typed body.",[868,1546,1547,1550,1551,1553],{},[851,1548,1549],{},"ok: false"," means the upstream call failed, returned a non-2xx status, or produced an empty body. ",[851,1552,1519],{}," is a short message suitable for logging or displaying to the user.",[848,1555,1556,1558,1559,1562],{},[851,1557,160],{}," never throws. All errors are caught and returned as an ",[851,1560,1561],{},"{ ok: false }"," envelope so call sites stay linear.",[1062,1564],{},[1065,1566,1568],{"id":1567},"client-side-behavior","Client-side behavior",[865,1570,1571,1582],{},[868,1572,1573,1574,1577,1578,1581],{},"Reads the CSRF token via ",[851,1575,1576],{},"getCsrfToken()"," and adds ",[851,1579,1580],{},"X-CSRF-Token"," to the headers.",[868,1583,1584,1585,1588],{},"Uses the global ",[851,1586,1587],{},"$fetch"," as the default fetcher.",[897,1590,1592],{"className":899,"code":1591,"language":901,"meta":902,"style":902},"const result = await executeRequest\u003C{ ok: boolean }>(\n  '\u002Fapi\u002Faccount\u002Fsettings',\n  'POST',\n  { theme: 'dark' },\n)\n",[851,1593,1594,1618,1630,1640,1661],{"__ignoreMap":902},[906,1595,1596,1598,1600,1602,1604,1606,1608,1610,1612,1615],{"class":908,"line":909},[906,1597,950],{"class":949},[906,1599,954],{"class":953},[906,1601,958],{"class":957},[906,1603,961],{"class":912},[906,1605,965],{"class":964},[906,1607,968],{"class":916},[906,1609,894],{"class":920},[906,1611,974],{"class":957},[906,1613,1614],{"class":977}," boolean",[906,1616,1617],{"class":916}," }>(\n",[906,1619,1620,1623,1626,1628],{"class":908,"line":940},[906,1621,1622],{"class":929},"  '",[906,1624,1625],{"class":933},"\u002Fapi\u002Faccount\u002Fsettings",[906,1627,984],{"class":929},[906,1629,1103],{"class":916},[906,1631,1632,1634,1636,1638],{"class":908,"line":946},[906,1633,1622],{"class":929},[906,1635,1124],{"class":933},[906,1637,984],{"class":929},[906,1639,1103],{"class":916},[906,1641,1642,1645,1648,1651,1653,1656,1658],{"class":908,"line":1005},[906,1643,1644],{"class":916},"  { ",[906,1646,1647],{"class":920},"theme",[906,1649,974],{"class":1650},"s34zl",[906,1652,930],{"class":929},[906,1654,1655],{"class":933},"dark",[906,1657,984],{"class":929},[906,1659,1660],{"class":916}," },\n",[906,1662,1663],{"class":908,"line":1010},[906,1664,1002],{"class":916},[1062,1666],{},[1065,1668,1670],{"id":1669},"server-side-behavior-ssr","Server-side behavior (SSR)",[848,1672,1673],{},"During Vue SSR, the composable needs to proxy the incoming request headers so cookies are forwarded to the gateway route. Pass the SSR context explicitly:",[897,1675,1678],{"className":899,"code":1676,"filename":1677,"language":901,"meta":902,"style":902},"const result = await executeRequest\u003CData>(\n  '\u002Fapi\u002Fdownstream',\n  'GET',\n  {},\n  {},\n  {},\n  {\n    headers: useRequestHeaders(),\n    event: useRequestEvent(),\n    fetcher: useRequestFetch(),\n  },\n)\n","server handler or Nuxt composable",[851,1679,1680,1699,1710,1720,1725,1729,1733,1738,1751,1764,1777,1783],{"__ignoreMap":902},[906,1681,1682,1684,1686,1688,1690,1692,1694,1697],{"class":908,"line":909},[906,1683,950],{"class":949},[906,1685,954],{"class":953},[906,1687,958],{"class":957},[906,1689,961],{"class":912},[906,1691,965],{"class":964},[906,1693,1083],{"class":916},[906,1695,1696],{"class":1086},"Data",[906,1698,1090],{"class":916},[906,1700,1701,1703,1706,1708],{"class":908,"line":940},[906,1702,1622],{"class":929},[906,1704,1705],{"class":933},"\u002Fapi\u002Fdownstream",[906,1707,984],{"class":929},[906,1709,1103],{"class":916},[906,1711,1712,1714,1716,1718],{"class":908,"line":946},[906,1713,1622],{"class":929},[906,1715,997],{"class":933},[906,1717,984],{"class":929},[906,1719,1103],{"class":916},[906,1721,1722],{"class":908,"line":1005},[906,1723,1724],{"class":916},"  {},\n",[906,1726,1727],{"class":908,"line":1010},[906,1728,1724],{"class":916},[906,1730,1731],{"class":908,"line":1030},[906,1732,1724],{"class":916},[906,1734,1735],{"class":908,"line":1057},[906,1736,1737],{"class":916},"  {\n",[906,1739,1740,1743,1745,1748],{"class":908,"line":1225},[906,1741,1742],{"class":920},"    headers",[906,1744,974],{"class":1650},[906,1746,1747],{"class":964}," useRequestHeaders",[906,1749,1750],{"class":916},"(),\n",[906,1752,1754,1757,1759,1762],{"class":908,"line":1753},9,[906,1755,1756],{"class":920},"    event",[906,1758,974],{"class":1650},[906,1760,1761],{"class":964}," useRequestEvent",[906,1763,1750],{"class":916},[906,1765,1767,1770,1772,1775],{"class":908,"line":1766},10,[906,1768,1769],{"class":920},"    fetcher",[906,1771,974],{"class":1650},[906,1773,1774],{"class":964}," useRequestFetch",[906,1776,1750],{"class":916},[906,1778,1780],{"class":908,"line":1779},11,[906,1781,1782],{"class":916},"  },\n",[906,1784,1786],{"class":908,"line":1785},12,[906,1787,1002],{"class":916},[848,1789,1790,1791,1794,1795,1798,1799,1801,1802,1805],{},"When ",[851,1792,1793],{},"context.headers"," is provided, they are merged into the outgoing request. When ",[851,1796,1797],{},"context.event"," is provided, any ",[851,1800,883],{}," headers on the upstream response are appended to the outgoing response via ",[851,1803,1804],{},"appendResponseHeader",", which is how token rotation surfaces to the browser during SSR.",[1062,1807],{},[1065,1809,1811],{"id":1810},"query-vs-body","Query vs body",[848,1813,1312,1814,1816,1817,1819,1820,1822,1823,1022],{},[851,1815,997],{}," requests, the ",[851,1818,1304],{}," argument is sent as a query object. For all other methods, it is sent as the JSON body. There is no way to send both a query and a body from the same call: if you need query parameters on a ",[851,1821,1124],{},", append them to the URL directly or pass them via ",[851,1824,1825],{},"customOptions.query",[1062,1827],{},[1065,1829,1831],{"id":1830},"timeout-and-error-handling","Timeout and error handling",[848,1833,1834,1835,1838,1839,1841,1842,1844],{},"Each call has a default timeout of 15 seconds. The underlying fetch is configured with ",[851,1836,1837],{},"ignoreResponseError: true",", so non-2xx responses resolve instead of throwing. ",[851,1840,160],{}," inspects the status and returns an ",[851,1843,1561],{}," envelope for:",[865,1846,1847,1850,1853,1856],{},[868,1848,1849],{},"Non-2xx status codes",[868,1851,1852],{},"Missing response body",[868,1854,1855],{},"Fetch-level errors (network, abort, timeout)",[868,1857,1858,1859],{},"Responses whose body already contains ",[851,1860,1561],{},[848,1862,1863,1864,1866,1867,1869],{},"See ",[855,1865,97],{"href":98}," for the CSRF header contract and the double-submit pattern ",[851,1868,160],{}," implements.",[1871,1872,1873],"style",{},"html pre.shiki code .sZ328, html code.shiki .sZ328{--shiki-light:#AF00DB;--shiki-default:#AF00DB;--shiki-dark:#FF79C6}html pre.shiki code .sDd4n, html code.shiki .sDd4n{--shiki-light:#000000;--shiki-default:#000000;--shiki-dark:#F8F8F2}html pre.shiki code .sjsA6, html code.shiki .sjsA6{--shiki-light:#001080;--shiki-default:#001080;--shiki-dark:#F8F8F2}html pre.shiki code .sFkSl, html code.shiki .sFkSl{--shiki-light:#A31515;--shiki-default:#A31515;--shiki-dark:#E9F284}html pre.shiki code .sFB1V, html code.shiki .sFB1V{--shiki-light:#A31515;--shiki-default:#A31515;--shiki-dark:#F1FA8C}html pre.shiki code .sl46w, html code.shiki .sl46w{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#FF79C6}html pre.shiki code .s3JHE, html code.shiki .s3JHE{--shiki-light:#0070C1;--shiki-default:#0070C1;--shiki-dark:#F8F8F2}html pre.shiki code .saOXh, html code.shiki .saOXh{--shiki-light:#000000;--shiki-default:#000000;--shiki-dark:#FF79C6}html pre.shiki code .sHOzp, html code.shiki .sHOzp{--shiki-light:#795E26;--shiki-default:#795E26;--shiki-dark:#50FA7B}html pre.shiki code .sFs1U, html code.shiki .sFs1U{--shiki-light:#267F99;--shiki-light-font-style:inherit;--shiki-default:#267F99;--shiki-default-font-style:inherit;--shiki-dark:#8BE9FD;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sW-rI, html code.shiki .sW-rI{--shiki-light:#267F99;--shiki-light-font-style:inherit;--shiki-default:#267F99;--shiki-default-font-style:inherit;--shiki-dark:#FFB86C;--shiki-dark-font-style:italic}html pre.shiki code .sygFZ, html code.shiki .sygFZ{--shiki-light:#001080;--shiki-light-font-style:inherit;--shiki-default:#001080;--shiki-default-font-style:inherit;--shiki-dark:#FFB86C;--shiki-dark-font-style:italic}html pre.shiki code .s34zl, html code.shiki .s34zl{--shiki-light:#001080;--shiki-default:#001080;--shiki-dark:#FF79C6}",{"title":902,"searchDepth":940,"depth":940,"links":1875},[1876,1877,1878,1879,1880,1881],{"id":1067,"depth":940,"text":1068},{"id":1441,"depth":940,"text":1442},{"id":1567,"depth":940,"text":1568},{"id":1669,"depth":940,"text":1670},{"id":1810,"depth":940,"text":1811},{"id":1830,"depth":940,"text":1831},"Universal fetch wrapper that auto-injects the CSRF header on the client, proxies request headers during SSR, captures Set-Cookie responses for transparent token rotation, and returns a normalized Results envelope.","md","i-lucide-send",{},null,"---\ntitle: executeRequest\ndescription: Universal fetch wrapper that auto-injects the CSRF header on the client, proxies request headers during SSR, captures Set-Cookie responses for transparent token rotation, and returns a normalized Results envelope.\nicon: i-lucide-send\n---\n\n`executeRequest` is the recommended way to make authenticated requests from Vue components, pages, and server routes. It wraps [`ofetch`](https:\u002F\u002Fgithub.com\u002Funjs\u002Fofetch) with three things already wired:\n\n- On the client, the CSRF header is injected automatically from the `__Host-csrf` cookie.\n- During Vue SSR, incoming request headers are proxied to the upstream call so cookies flow through.\n- Response `Set-Cookie` headers are captured during SSR and re-attached to the outgoing response, which makes token rotation transparent.\n\nEvery response is normalized to a `Results\u003CT>` envelope so call sites can branch on a single `ok` field rather than unwinding fetch errors.\n\n```ts\nimport { executeRequest } from 'auth-h3client\u002Fclient'\n\nconst result = await executeRequest\u003C{ name: string }>('\u002Fapi\u002Fprofile', 'GET')\n\nif (result.ok) {\n  console.log(result.data.name)\n}\n```\n\n---\n\n## Signature\n\n```ts\nfunction executeRequest\u003CT>(\n  url: string,\n  method: 'GET' | 'POST' | 'DELETE' | 'PUT' | 'PATCH',\n  body?: object,\n  customHeaders?: Record\u003Cstring, string>,\n  customOptions?: FetchOptions\u003C'json'>,\n  context?: ApiContext,\n): Promise\u003CResults\u003CT>>\n```\n\n| Parameter | Type | Description |\n|---|---|---|\n| `url` | `string` | Endpoint URL to fetch |\n| `method` | `'GET' \\| 'POST' \\| 'DELETE' \\| 'PUT' \\| 'PATCH'` | HTTP method |\n| `body` | `object` | For `GET`, sent as query parameters. For other methods, sent as the JSON body |\n| `customHeaders` | `Record\u003Cstring, string>` | Extra headers merged onto the request |\n| `customOptions` | `FetchOptions\u003C'json'>` | Additional ofetch options (timeout, signal, retry, etc.) |\n| `context` | `ApiContext` | Server-side context (see below) |\n\n```ts\ninterface ApiContext {\n  fetcher?: H3Event$Fetch | $Fetch\u003Cunknown, NitroFetchRequest>\n  event?: H3Event\n  headers?: Record\u003Cstring, string>\n}\n```\n\n---\n\n## Return type\n\n```ts\ntype Results\u003CT> =\n  | { ok: true; data: T; date: string }\n  | { ok: false; reason: string; date: string }\n```\n\n- `ok: true` means the upstream call returned a successful JSON payload. `data` is the typed body.\n- `ok: false` means the upstream call failed, returned a non-2xx status, or produced an empty body. `reason` is a short message suitable for logging or displaying to the user.\n\n`executeRequest` never throws. All errors are caught and returned as an `{ ok: false }` envelope so call sites stay linear.\n\n---\n\n## Client-side behavior\n\n- Reads the CSRF token via `getCsrfToken()` and adds `X-CSRF-Token` to the headers.\n- Uses the global `$fetch` as the default fetcher.\n\n```ts\nconst result = await executeRequest\u003C{ ok: boolean }>(\n  '\u002Fapi\u002Faccount\u002Fsettings',\n  'POST',\n  { theme: 'dark' },\n)\n```\n\n---\n\n## Server-side behavior (SSR)\n\nDuring Vue SSR, the composable needs to proxy the incoming request headers so cookies are forwarded to the gateway route. Pass the SSR context explicitly:\n\n```ts [server handler or Nuxt composable]\nconst result = await executeRequest\u003CData>(\n  '\u002Fapi\u002Fdownstream',\n  'GET',\n  {},\n  {},\n  {},\n  {\n    headers: useRequestHeaders(),\n    event: useRequestEvent(),\n    fetcher: useRequestFetch(),\n  },\n)\n```\n\nWhen `context.headers` is provided, they are merged into the outgoing request. When `context.event` is provided, any `Set-Cookie` headers on the upstream response are appended to the outgoing response via `appendResponseHeader`, which is how token rotation surfaces to the browser during SSR.\n\n---\n\n## Query vs body\n\nFor `GET` requests, the `body` argument is sent as a query object. For all other methods, it is sent as the JSON body. There is no way to send both a query and a body from the same call: if you need query parameters on a `POST`, append them to the URL directly or pass them via `customOptions.query`.\n\n---\n\n## Timeout and error handling\n\nEach call has a default timeout of 15 seconds. The underlying fetch is configured with `ignoreResponseError: true`, so non-2xx responses resolve instead of throwing. `executeRequest` inspects the status and returns an `{ ok: false }` envelope for:\n\n- Non-2xx status codes\n- Missing response body\n- Fetch-level errors (network, abort, timeout)\n- Responses whose body already contains `{ ok: false }`\n\nSee [CSRF Protection](\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcsrf) for the CSRF header contract and the double-submit pattern `executeRequest` implements.",{"title":160,"description":1882},"98rB6AfWMALCyqwvRRvncfkmQJbMa-Ssms6SN5MtmkU",[1891,1892],{"title":156,"path":157,"stem":158,"children":-1},{"title":164,"path":165,"stem":166,"children":-1},{"id":843,"title":160,"body":1894,"description":1882,"extension":1883,"icon":1884,"meta":2683,"module":1886,"navigation":8,"path":161,"rawbody":1887,"seo":2684,"stem":162,"__hash__":1889},{"type":845,"value":1895,"toc":2675},[1896,1905,1917,1923,2031,2033,2035,2181,2269,2333,2335,2337,2415,2429,2435,2437,2439,2451,2517,2519,2521,2523,2619,2629,2631,2633,2643,2645,2647,2655,2667,2673],[848,1897,1898,853,1900,863],{},[851,1899,160],{},[855,1901,1903],{"href":857,"rel":1902},[859],[851,1904,862],{},[865,1906,1907,1911,1913],{},[868,1908,870,1909,874],{},[851,1910,873],{},[868,1912,877],{},[868,1914,880,1915,884],{},[851,1916,883],{},[848,1918,887,1919,891,1921,895],{},[851,1920,890],{},[851,1922,894],{},[897,1924,1925],{"className":899,"code":900,"language":901,"meta":902,"style":902},[851,1926,1927,1945,1949,1987,1991,2005,2027],{"__ignoreMap":902},[906,1928,1929,1931,1933,1935,1937,1939,1941,1943],{"class":908,"line":909},[906,1930,913],{"class":912},[906,1932,917],{"class":916},[906,1934,160],{"class":920},[906,1936,923],{"class":916},[906,1938,926],{"class":912},[906,1940,930],{"class":929},[906,1942,934],{"class":933},[906,1944,937],{"class":929},[906,1946,1947],{"class":908,"line":940},[906,1948,943],{"emptyLinePlaceholder":8},[906,1950,1951,1953,1955,1957,1959,1961,1963,1965,1967,1969,1971,1973,1975,1977,1979,1981,1983,1985],{"class":908,"line":946},[906,1952,950],{"class":949},[906,1954,954],{"class":953},[906,1956,958],{"class":957},[906,1958,961],{"class":912},[906,1960,965],{"class":964},[906,1962,968],{"class":916},[906,1964,971],{"class":920},[906,1966,974],{"class":957},[906,1968,978],{"class":977},[906,1970,981],{"class":916},[906,1972,984],{"class":929},[906,1974,987],{"class":933},[906,1976,984],{"class":929},[906,1978,992],{"class":916},[906,1980,984],{"class":929},[906,1982,997],{"class":933},[906,1984,984],{"class":929},[906,1986,1002],{"class":916},[906,1988,1989],{"class":908,"line":1005},[906,1990,943],{"emptyLinePlaceholder":8},[906,1992,1993,1995,1997,1999,2001,2003],{"class":908,"line":1010},[906,1994,1013],{"class":912},[906,1996,1016],{"class":916},[906,1998,1019],{"class":920},[906,2000,1022],{"class":916},[906,2002,894],{"class":920},[906,2004,1027],{"class":916},[906,2006,2007,2009,2011,2013,2015,2017,2019,2021,2023,2025],{"class":908,"line":1030},[906,2008,1033],{"class":920},[906,2010,1022],{"class":916},[906,2012,1038],{"class":964},[906,2014,1041],{"class":916},[906,2016,1019],{"class":920},[906,2018,1022],{"class":916},[906,2020,1048],{"class":920},[906,2022,1022],{"class":916},[906,2024,971],{"class":920},[906,2026,1002],{"class":916},[906,2028,2029],{"class":908,"line":1057},[906,2030,1060],{"class":916},[1062,2032],{},[1065,2034,1068],{"id":1067},[897,2036,2037],{"className":899,"code":1071,"language":901,"meta":902,"style":902},[851,2038,2039,2051,2061,2107,2117,2135,2153,2163],{"__ignoreMap":902},[906,2040,2041,2043,2045,2047,2049],{"class":908,"line":909},[906,2042,1078],{"class":949},[906,2044,965],{"class":964},[906,2046,1083],{"class":916},[906,2048,1087],{"class":1086},[906,2050,1090],{"class":916},[906,2052,2053,2055,2057,2059],{"class":908,"line":940},[906,2054,1096],{"class":1095},[906,2056,974],{"class":957},[906,2058,978],{"class":977},[906,2060,1103],{"class":916},[906,2062,2063,2065,2067,2069,2071,2073,2075,2077,2079,2081,2083,2085,2087,2089,2091,2093,2095,2097,2099,2101,2103,2105],{"class":908,"line":946},[906,2064,1108],{"class":1095},[906,2066,974],{"class":957},[906,2068,930],{"class":929},[906,2070,997],{"class":933},[906,2072,984],{"class":929},[906,2074,1119],{"class":957},[906,2076,930],{"class":929},[906,2078,1124],{"class":933},[906,2080,984],{"class":929},[906,2082,1119],{"class":957},[906,2084,930],{"class":929},[906,2086,1133],{"class":933},[906,2088,984],{"class":929},[906,2090,1119],{"class":957},[906,2092,930],{"class":929},[906,2094,1142],{"class":933},[906,2096,984],{"class":929},[906,2098,1119],{"class":957},[906,2100,930],{"class":929},[906,2102,1151],{"class":933},[906,2104,984],{"class":929},[906,2106,1103],{"class":916},[906,2108,2109,2111,2113,2115],{"class":908,"line":1005},[906,2110,1160],{"class":1095},[906,2112,1163],{"class":957},[906,2114,1166],{"class":977},[906,2116,1103],{"class":916},[906,2118,2119,2121,2123,2125,2127,2129,2131,2133],{"class":908,"line":1010},[906,2120,1173],{"class":1095},[906,2122,1163],{"class":957},[906,2124,1178],{"class":977},[906,2126,1083],{"class":916},[906,2128,1183],{"class":977},[906,2130,992],{"class":916},[906,2132,1183],{"class":977},[906,2134,1190],{"class":916},[906,2136,2137,2139,2141,2143,2145,2147,2149,2151],{"class":908,"line":1030},[906,2138,1195],{"class":1095},[906,2140,1163],{"class":957},[906,2142,1200],{"class":977},[906,2144,1083],{"class":916},[906,2146,984],{"class":929},[906,2148,5],{"class":933},[906,2150,984],{"class":929},[906,2152,1190],{"class":916},[906,2154,2155,2157,2159,2161],{"class":908,"line":1057},[906,2156,1215],{"class":1095},[906,2158,1163],{"class":957},[906,2160,1220],{"class":977},[906,2162,1103],{"class":916},[906,2164,2165,2167,2169,2171,2173,2175,2177,2179],{"class":908,"line":1225},[906,2166,1228],{"class":916},[906,2168,974],{"class":957},[906,2170,1233],{"class":977},[906,2172,1083],{"class":916},[906,2174,1238],{"class":1086},[906,2176,1083],{"class":916},[906,2178,1087],{"class":1086},[906,2180,1245],{"class":916},[1247,2182,2183,2193],{},[1250,2184,2185],{},[1253,2186,2187,2189,2191],{},[1256,2188,1258],{},[1256,2190,1261],{},[1256,2192,1264],{},[1266,2194,2195,2207,2219,2233,2245,2257],{},[1253,2196,2197,2201,2205],{},[1271,2198,2199],{},[851,2200,1275],{},[1271,2202,2203],{},[851,2204,1183],{},[1271,2206,1282],{},[1253,2208,2209,2213,2217],{},[1271,2210,2211],{},[851,2212,1289],{},[1271,2214,2215],{},[851,2216,1294],{},[1271,2218,1297],{},[1253,2220,2221,2225,2229],{},[1271,2222,2223],{},[851,2224,1304],{},[1271,2226,2227],{},[851,2228,1309],{},[1271,2230,1312,2231,1315],{},[851,2232,997],{},[1253,2234,2235,2239,2243],{},[1271,2236,2237],{},[851,2238,1322],{},[1271,2240,2241],{},[851,2242,1327],{},[1271,2244,1330],{},[1253,2246,2247,2251,2255],{},[1271,2248,2249],{},[851,2250,1337],{},[1271,2252,2253],{},[851,2254,1342],{},[1271,2256,1345],{},[1253,2258,2259,2263,2267],{},[1271,2260,2261],{},[851,2262,1352],{},[1271,2264,2265],{},[851,2266,1357],{},[1271,2268,1360],{},[897,2270,2271],{"className":899,"code":1363,"language":901,"meta":902,"style":902},[851,2272,2273,2281,2303,2311,2329],{"__ignoreMap":902},[906,2274,2275,2277,2279],{"class":908,"line":909},[906,2276,1370],{"class":949},[906,2278,1220],{"class":977},[906,2280,1375],{"class":916},[906,2282,2283,2285,2287,2289,2291,2293,2295,2297,2299,2301],{"class":908,"line":940},[906,2284,1380],{"class":920},[906,2286,1163],{"class":957},[906,2288,1385],{"class":977},[906,2290,1119],{"class":957},[906,2292,1390],{"class":977},[906,2294,1083],{"class":916},[906,2296,1395],{"class":977},[906,2298,992],{"class":916},[906,2300,1400],{"class":1086},[906,2302,1403],{"class":916},[906,2304,2305,2307,2309],{"class":908,"line":946},[906,2306,1408],{"class":920},[906,2308,1163],{"class":957},[906,2310,1413],{"class":977},[906,2312,2313,2315,2317,2319,2321,2323,2325,2327],{"class":908,"line":1005},[906,2314,1418],{"class":920},[906,2316,1163],{"class":957},[906,2318,1178],{"class":977},[906,2320,1083],{"class":916},[906,2322,1183],{"class":977},[906,2324,992],{"class":916},[906,2326,1183],{"class":977},[906,2328,1403],{"class":916},[906,2330,2331],{"class":908,"line":1010},[906,2332,1060],{"class":916},[1062,2334],{},[1065,2336,1442],{"id":1441},[897,2338,2339],{"className":899,"code":1445,"language":901,"meta":902,"style":902},[851,2340,2341,2355,2385],{"__ignoreMap":902},[906,2342,2343,2345,2347,2349,2351,2353],{"class":908,"line":909},[906,2344,1452],{"class":949},[906,2346,1455],{"class":977},[906,2348,1083],{"class":916},[906,2350,1087],{"class":1086},[906,2352,1462],{"class":916},[906,2354,1465],{"class":957},[906,2356,2357,2359,2361,2363,2365,2367,2369,2371,2373,2375,2377,2379,2381,2383],{"class":908,"line":940},[906,2358,1470],{"class":957},[906,2360,917],{"class":916},[906,2362,894],{"class":920},[906,2364,974],{"class":957},[906,2366,1479],{"class":977},[906,2368,1482],{"class":916},[906,2370,1048],{"class":920},[906,2372,974],{"class":957},[906,2374,1489],{"class":977},[906,2376,1482],{"class":916},[906,2378,1494],{"class":920},[906,2380,974],{"class":957},[906,2382,978],{"class":977},[906,2384,1501],{"class":916},[906,2386,2387,2389,2391,2393,2395,2397,2399,2401,2403,2405,2407,2409,2411,2413],{"class":908,"line":946},[906,2388,1470],{"class":957},[906,2390,917],{"class":916},[906,2392,894],{"class":920},[906,2394,974],{"class":957},[906,2396,1514],{"class":977},[906,2398,1482],{"class":916},[906,2400,1519],{"class":920},[906,2402,974],{"class":957},[906,2404,978],{"class":977},[906,2406,1482],{"class":916},[906,2408,1494],{"class":920},[906,2410,974],{"class":957},[906,2412,978],{"class":977},[906,2414,1501],{"class":916},[865,2416,2417,2423],{},[868,2418,2419,1541,2421,1544],{},[851,2420,1540],{},[851,2422,1048],{},[868,2424,2425,1550,2427,1553],{},[851,2426,1549],{},[851,2428,1519],{},[848,2430,2431,1558,2433,1562],{},[851,2432,160],{},[851,2434,1561],{},[1062,2436],{},[1065,2438,1568],{"id":1567},[865,2440,2441,2447],{},[868,2442,1573,2443,1577,2445,1581],{},[851,2444,1576],{},[851,2446,1580],{},[868,2448,1584,2449,1588],{},[851,2450,1587],{},[897,2452,2453],{"className":899,"code":1591,"language":901,"meta":902,"style":902},[851,2454,2455,2477,2487,2497,2513],{"__ignoreMap":902},[906,2456,2457,2459,2461,2463,2465,2467,2469,2471,2473,2475],{"class":908,"line":909},[906,2458,950],{"class":949},[906,2460,954],{"class":953},[906,2462,958],{"class":957},[906,2464,961],{"class":912},[906,2466,965],{"class":964},[906,2468,968],{"class":916},[906,2470,894],{"class":920},[906,2472,974],{"class":957},[906,2474,1614],{"class":977},[906,2476,1617],{"class":916},[906,2478,2479,2481,2483,2485],{"class":908,"line":940},[906,2480,1622],{"class":929},[906,2482,1625],{"class":933},[906,2484,984],{"class":929},[906,2486,1103],{"class":916},[906,2488,2489,2491,2493,2495],{"class":908,"line":946},[906,2490,1622],{"class":929},[906,2492,1124],{"class":933},[906,2494,984],{"class":929},[906,2496,1103],{"class":916},[906,2498,2499,2501,2503,2505,2507,2509,2511],{"class":908,"line":1005},[906,2500,1644],{"class":916},[906,2502,1647],{"class":920},[906,2504,974],{"class":1650},[906,2506,930],{"class":929},[906,2508,1655],{"class":933},[906,2510,984],{"class":929},[906,2512,1660],{"class":916},[906,2514,2515],{"class":908,"line":1010},[906,2516,1002],{"class":916},[1062,2518],{},[1065,2520,1670],{"id":1669},[848,2522,1673],{},[897,2524,2525],{"className":899,"code":1676,"filename":1677,"language":901,"meta":902,"style":902},[851,2526,2527,2545,2555,2565,2569,2573,2577,2581,2591,2601,2611,2615],{"__ignoreMap":902},[906,2528,2529,2531,2533,2535,2537,2539,2541,2543],{"class":908,"line":909},[906,2530,950],{"class":949},[906,2532,954],{"class":953},[906,2534,958],{"class":957},[906,2536,961],{"class":912},[906,2538,965],{"class":964},[906,2540,1083],{"class":916},[906,2542,1696],{"class":1086},[906,2544,1090],{"class":916},[906,2546,2547,2549,2551,2553],{"class":908,"line":940},[906,2548,1622],{"class":929},[906,2550,1705],{"class":933},[906,2552,984],{"class":929},[906,2554,1103],{"class":916},[906,2556,2557,2559,2561,2563],{"class":908,"line":946},[906,2558,1622],{"class":929},[906,2560,997],{"class":933},[906,2562,984],{"class":929},[906,2564,1103],{"class":916},[906,2566,2567],{"class":908,"line":1005},[906,2568,1724],{"class":916},[906,2570,2571],{"class":908,"line":1010},[906,2572,1724],{"class":916},[906,2574,2575],{"class":908,"line":1030},[906,2576,1724],{"class":916},[906,2578,2579],{"class":908,"line":1057},[906,2580,1737],{"class":916},[906,2582,2583,2585,2587,2589],{"class":908,"line":1225},[906,2584,1742],{"class":920},[906,2586,974],{"class":1650},[906,2588,1747],{"class":964},[906,2590,1750],{"class":916},[906,2592,2593,2595,2597,2599],{"class":908,"line":1753},[906,2594,1756],{"class":920},[906,2596,974],{"class":1650},[906,2598,1761],{"class":964},[906,2600,1750],{"class":916},[906,2602,2603,2605,2607,2609],{"class":908,"line":1766},[906,2604,1769],{"class":920},[906,2606,974],{"class":1650},[906,2608,1774],{"class":964},[906,2610,1750],{"class":916},[906,2612,2613],{"class":908,"line":1779},[906,2614,1782],{"class":916},[906,2616,2617],{"class":908,"line":1785},[906,2618,1002],{"class":916},[848,2620,1790,2621,1794,2623,1798,2625,1801,2627,1805],{},[851,2622,1793],{},[851,2624,1797],{},[851,2626,883],{},[851,2628,1804],{},[1062,2630],{},[1065,2632,1811],{"id":1810},[848,2634,1312,2635,1816,2637,1819,2639,1822,2641,1022],{},[851,2636,997],{},[851,2638,1304],{},[851,2640,1124],{},[851,2642,1825],{},[1062,2644],{},[1065,2646,1831],{"id":1830},[848,2648,1834,2649,1838,2651,1841,2653,1844],{},[851,2650,1837],{},[851,2652,160],{},[851,2654,1561],{},[865,2656,2657,2659,2661,2663],{},[868,2658,1849],{},[868,2660,1852],{},[868,2662,1855],{},[868,2664,1858,2665],{},[851,2666,1561],{},[848,2668,1863,2669,1866,2671,1869],{},[855,2670,97],{"href":98},[851,2672,160],{},[1871,2674,1873],{},{"title":902,"searchDepth":940,"depth":940,"links":2676},[2677,2678,2679,2680,2681,2682],{"id":1067,"depth":940,"text":1068},{"id":1441,"depth":940,"text":1442},{"id":1567,"depth":940,"text":1568},{"id":1669,"depth":940,"text":1670},{"id":1810,"depth":940,"text":1811},{"id":1830,"depth":940,"text":1831},{},{"title":160,"description":1882},1780436292680]