[{"data":1,"prerenderedAt":1107},["ShallowReactive",2],{"navLinks":3,"sidebar_docs_navigation_\u002Fdocs\u002Fauth-h3client":64,"navigation":243,"navLinks_footer":855,"\u002Fdocs\u002Fauth-h3client_page":868,"\u002Fdocs\u002Fauth-h3client_surround":1020,"\u002Fdocs\u002Fauth-h3client":1022},{"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,"page":-1,"icon":73},"docs\u002Fauth-h3client\u002Findex",[72,74,84,129,159,184,187,212,217],{"title":20,"path":22,"stem":70,"icon":73},"i-lucide-layers",{"title":14,"path":75,"stem":76,"children":77,"page":-1,"icon":15},"\u002Fdocs\u002Fauth-h3client\u002Fgetting-started","docs\u002Fauth-h3client\u002F00.getting-started\u002Findex",[78,79],{"title":14,"path":75,"stem":76,"icon":15},{"title":80,"path":81,"stem":82,"icon":83},"Nuxt Module","\u002Fdocs\u002Fauth-h3client\u002Fgetting-started\u002Fnuxt","docs\u002Fauth-h3client\u002F00.getting-started\u002F00.nuxt","i-simple-icons-nuxtdotjs",{"title":85,"path":86,"stem":87,"children":88,"page":-1,"icon":10},"Essentials","\u002Fdocs\u002Fauth-h3client\u002Fessentials","docs\u002Fauth-h3client\u002F01.essentials\u002Findex",[89,90,95,100,105,110,115,119,124],{"title":85,"path":86,"stem":87,"icon":10},{"title":91,"path":92,"stem":93,"icon":94},"Session Management","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fsession","docs\u002Fauth-h3client\u002F01.essentials\u002F00.session","i-lucide-user-check",{"title":96,"path":97,"stem":98,"icon":99},"Route Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Froute-protection","docs\u002Fauth-h3client\u002F01.essentials\u002F01.route-protection","i-lucide-lock-keyhole",{"title":101,"path":102,"stem":103,"icon":104},"CSRF Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcsrf","docs\u002Fauth-h3client\u002F01.essentials\u002F02.csrf","i-lucide-shield-x",{"title":106,"path":107,"stem":108,"icon":109},"Auth Flows","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fauth-flows","docs\u002Fauth-h3client\u002F01.essentials\u002F03.auth-flows","i-lucide-log-in",{"title":111,"path":112,"stem":113,"icon":114},"OAuth and OIDC","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Foauth","docs\u002Fauth-h3client\u002F01.essentials\u002F04.oauth","i-lucide-users",{"title":33,"path":116,"stem":117,"icon":118},"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fbot-detection","docs\u002Fauth-h3client\u002F01.essentials\u002F05.bot-detection","i-lucide-scan-eye",{"title":120,"path":121,"stem":122,"icon":123},"Cookies","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcookies","docs\u002Fauth-h3client\u002F01.essentials\u002F06.cookies","i-lucide-cookie",{"title":125,"path":126,"stem":127,"icon":128},"Logging","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Flogging","docs\u002Fauth-h3client\u002F01.essentials\u002F07.logging","i-lucide-terminal",{"title":130,"path":131,"stem":132,"children":133,"page":-1,"icon":28},"MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa","docs\u002Fauth-h3client\u002F02.mfa\u002Findex",[134,135,140,144,149,154],{"title":130,"path":131,"stem":132,"icon":28},{"title":136,"path":137,"stem":138,"icon":139},"Built-in MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fbuilt-in-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F01.built-in-flow","i-lucide-mail-check",{"title":141,"path":142,"stem":143,"icon":21},"Password Reset","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fpassword-reset","docs\u002Fauth-h3client\u002F02.mfa\u002F02.password-reset",{"title":145,"path":146,"stem":147,"icon":148},"Email Change","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Femail-change","docs\u002Fauth-h3client\u002F02.mfa\u002F03.email-change","i-lucide-mail",{"title":150,"path":151,"stem":152,"icon":153},"Custom MFA Flow","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fcustom-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F04.custom-flow","i-lucide-shield-plus",{"title":155,"path":156,"stem":157,"icon":158},"Client-Side MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fclient-side","docs\u002Fauth-h3client\u002F02.mfa\u002F05.client-side","i-lucide-monitor-smartphone",{"title":160,"path":161,"stem":162,"children":163,"page":-1,"icon":165},"Client-side","\u002Fdocs\u002Fauth-h3client\u002Fclient","docs\u002Fauth-h3client\u002F03.client\u002Findex",[164,166,170,175,180],{"title":160,"path":161,"stem":162,"icon":165},"i-lucide-monitor",{"title":167,"path":168,"stem":169,"icon":94},"useAuthData","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-auth-data","docs\u002Fauth-h3client\u002F03.client\u002F00.use-auth-data",{"title":171,"path":172,"stem":173,"icon":174},"useMagicLink","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-magic-link","docs\u002Fauth-h3client\u002F03.client\u002F01.use-magic-link","i-lucide-link",{"title":176,"path":177,"stem":178,"icon":179},"executeRequest","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fexecute-request","docs\u002Fauth-h3client\u002F03.client\u002F02.execute-request","i-lucide-send",{"title":181,"path":182,"stem":183,"icon":104},"getCsrfToken","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fget-csrf-token","docs\u002Fauth-h3client\u002F03.client\u002F03.get-csrf-token",{"title":38,"path":185,"stem":186,"icon":99},"\u002Fdocs\u002Fauth-h3client\u002Fsecurity","docs\u002Fauth-h3client\u002F04.security",{"title":188,"icon":10,"path":189,"stem":190,"children":191,"page":53},"Guides","\u002Fdocs\u002Fauth-h3client\u002Fguides","docs\u002Fauth-h3client\u002F05.guides",[192,197,202,207],{"title":193,"path":194,"stem":195,"icon":196},"H3 and Nitro Setup","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fh3-nitro","docs\u002Fauth-h3client\u002F05.guides\u002F00.h3-nitro","i-lucide-server",{"title":198,"path":199,"stem":200,"icon":201},"HMAC Inter-service Auth","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fhmac","docs\u002Fauth-h3client\u002F05.guides\u002Fhmac","i-lucide-fingerprint",{"title":203,"path":204,"stem":205,"icon":206},"Image Upload","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fimage-upload","docs\u002Fauth-h3client\u002F05.guides\u002Fimage-upload","i-lucide-image",{"title":208,"path":209,"stem":210,"icon":211},"mTLS Configuration","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fmtls","docs\u002Fauth-h3client\u002F05.guides\u002Fmtls","i-lucide-file-badge",{"title":213,"path":214,"stem":215,"icon":216},"Configuration","\u002Fdocs\u002Fauth-h3client\u002Fconfiguration","docs\u002Fauth-h3client\u002F06.configuration","i-lucide-settings",{"title":218,"path":219,"stem":220,"children":221,"page":-1,"icon":223},"API Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi","docs\u002Fauth-h3client\u002F07.api\u002Findex",[222,224,229,234,239],{"title":218,"path":219,"stem":220,"icon":223},"i-lucide-code",{"title":225,"path":226,"stem":227,"icon":228},"Routes Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcontrollers","docs\u002Fauth-h3client\u002F07.api\u002F00.controllers","i-lucide-route",{"title":230,"path":231,"stem":232,"icon":233},"Middleware Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fmiddleware","docs\u002Fauth-h3client\u002F07.api\u002F01.middleware","i-lucide-shield",{"title":235,"path":236,"stem":237,"icon":238},"Client-side Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcomposables","docs\u002Fauth-h3client\u002F07.api\u002F02.composables","i-lucide-component",{"title":240,"path":241,"stem":242,"icon":47},"Utilities","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Futilities","docs\u002Fauth-h3client\u002F07.api\u002F03.utilities",[244],{"title":9,"path":66,"stem":67,"children":245,"page":53},[246,294,412,417,595,662],{"title":20,"path":22,"stem":70,"children":247},[248,249,253,264,272,279,280,286,287],{"title":20,"path":22,"stem":70},{"title":14,"path":75,"stem":76,"children":250},[251,252],{"title":14,"path":75,"stem":76},{"title":80,"path":81,"stem":82},{"title":85,"path":86,"stem":87,"children":254},[255,256,257,258,259,260,261,262,263],{"title":85,"path":86,"stem":87},{"title":91,"path":92,"stem":93},{"title":96,"path":97,"stem":98},{"title":101,"path":102,"stem":103},{"title":106,"path":107,"stem":108},{"title":111,"path":112,"stem":113},{"title":33,"path":116,"stem":117},{"title":120,"path":121,"stem":122},{"title":125,"path":126,"stem":127},{"title":130,"path":131,"stem":132,"children":265},[266,267,268,269,270,271],{"title":130,"path":131,"stem":132},{"title":136,"path":137,"stem":138},{"title":141,"path":142,"stem":143},{"title":145,"path":146,"stem":147},{"title":150,"path":151,"stem":152},{"title":155,"path":156,"stem":157},{"title":160,"path":161,"stem":162,"children":273},[274,275,276,277,278],{"title":160,"path":161,"stem":162},{"title":167,"path":168,"stem":169},{"title":171,"path":172,"stem":173},{"title":176,"path":177,"stem":178},{"title":181,"path":182,"stem":183},{"title":38,"path":185,"stem":186},{"title":188,"path":189,"stem":190,"children":281,"page":53},[282,283,284,285],{"title":193,"path":194,"stem":195},{"title":198,"path":199,"stem":200},{"title":203,"path":204,"stem":205},{"title":208,"path":209,"stem":210},{"title":213,"path":214,"stem":215},{"title":218,"path":219,"stem":220,"children":288},[289,290,291,292,293],{"title":218,"path":219,"stem":220},{"title":225,"path":226,"stem":227},{"title":230,"path":231,"stem":232},{"title":235,"path":236,"stem":237},{"title":240,"path":241,"stem":242},{"title":295,"path":35,"stem":296,"children":297},"Bot Detector","docs\u002Fbot-detection\u002Findex",[298,299,302,306,310,329,403,406,409],{"title":295,"path":35,"stem":296},{"title":14,"path":300,"stem":301},"\u002Fdocs\u002Fbot-detection\u002Fgetting-started","docs\u002Fbot-detection\u002F00.getting-started",{"title":303,"path":304,"stem":305},"CLI","\u002Fdocs\u002Fbot-detection\u002Fcli","docs\u002Fbot-detection\u002F01.cli",{"title":307,"path":308,"stem":309},"Data Sources","\u002Fdocs\u002Fbot-detection\u002Fdata-sources","docs\u002Fbot-detection\u002F02.data-sources",{"title":188,"path":311,"stem":312,"children":313,"page":53},"\u002Fdocs\u002Fbot-detection\u002Fguides","docs\u002Fbot-detection\u002F03.guides",[314,318,322,325],{"title":315,"path":316,"stem":317},"Custom Checkers","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fcustom","docs\u002Fbot-detection\u002F03.guides\u002FCUSTOM",{"title":319,"path":320,"stem":321},"Scheduling Database Generation","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fgenerate","docs\u002Fbot-detection\u002F03.guides\u002FGENERATE",{"title":125,"path":323,"stem":324},"\u002Fdocs\u002Fbot-detection\u002Fguides\u002Flogging","docs\u002Fbot-detection\u002F03.guides\u002FLOGGING",{"title":326,"path":327,"stem":328},"Score Modes and Reputation Healing","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fscore","docs\u002Fbot-detection\u002F03.guides\u002FSCORE",{"title":330,"path":331,"stem":332,"children":333},"Checkers","\u002Fdocs\u002Fbot-detection\u002Fcheckers","docs\u002Fbot-detection\u002F04.checkers\u002Findex",[334,335,339,343,347,351,355,359,363,367,371,375,379,383,387,391,395,399],{"title":330,"path":331,"stem":332},{"title":336,"path":337,"stem":338},"IP Validation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fip-validation","docs\u002Fbot-detection\u002F04.checkers\u002F01.ip-validation",{"title":340,"path":341,"stem":342},"Good \u002F Bad Bot Verification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgood-bots","docs\u002Fbot-detection\u002F04.checkers\u002F02.good-bots",{"title":344,"path":345,"stem":346},"Browser & Device Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbrowser-device","docs\u002Fbot-detection\u002F04.checkers\u002F03.browser-device",{"title":348,"path":349,"stem":350},"Locale Map","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Flocale-map","docs\u002Fbot-detection\u002F04.checkers\u002F04.locale-map",{"title":352,"path":353,"stem":354},"Known Threats","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-threats","docs\u002Fbot-detection\u002F04.checkers\u002F05.known-threats",{"title":356,"path":357,"stem":358},"ASN Classification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fasn-classification","docs\u002Fbot-detection\u002F04.checkers\u002F06.asn-classification",{"title":360,"path":361,"stem":362},"Tor Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftor-analysis","docs\u002Fbot-detection\u002F04.checkers\u002F07.tor-analysis",{"title":364,"path":365,"stem":366},"Timezone Consistency","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftimezone-consistency","docs\u002Fbot-detection\u002F04.checkers\u002F08.timezone-consistency",{"title":368,"path":369,"stem":370},"Honeypot","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fhoneypot","docs\u002Fbot-detection\u002F04.checkers\u002F09.honeypot",{"title":372,"path":373,"stem":374},"Known Bad IPs","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ips","docs\u002Fbot-detection\u002F04.checkers\u002F10.known-bad-ips",{"title":376,"path":377,"stem":378},"Behavior Rate","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbehavior-rate","docs\u002Fbot-detection\u002F04.checkers\u002F11.behavior-rate",{"title":380,"path":381,"stem":382},"Proxy \u002F ISP \u002F Cookie","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fproxy-isp-cookies","docs\u002Fbot-detection\u002F04.checkers\u002F12.proxy-isp-cookies",{"title":384,"path":385,"stem":386},"Session Coherence","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fsession-coherence","docs\u002Fbot-detection\u002F04.checkers\u002F13.session-coherence",{"title":388,"path":389,"stem":390},"Velocity Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fvelocity-fingerprint","docs\u002Fbot-detection\u002F04.checkers\u002F14.velocity-fingerprint",{"title":392,"path":393,"stem":394},"UA & Header Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fua-header","docs\u002Fbot-detection\u002F04.checkers\u002F15.ua-header",{"title":396,"path":397,"stem":398},"Geolocation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgeolocation","docs\u002Fbot-detection\u002F04.checkers\u002F16.geolocation",{"title":400,"path":401,"stem":402},"Known Bad User-Agents","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ua","docs\u002Fbot-detection\u002F04.checkers\u002F17.known-bad-ua",{"title":38,"path":404,"stem":405},"\u002Fdocs\u002Fbot-detection\u002Fsecurity","docs\u002Fbot-detection\u002F04.security",{"title":218,"path":407,"stem":408},"\u002Fdocs\u002Fbot-detection\u002Fapi","docs\u002Fbot-detection\u002F05.api",{"title":213,"path":410,"stem":411},"\u002Fdocs\u002Fbot-detection\u002Fconfiguration","docs\u002Fbot-detection\u002F06.configuration",{"title":413,"path":11,"stem":414,"children":415},"Introduction","docs\u002Fgetting-started\u002Findex",[416],{"title":413,"path":11,"stem":414},{"title":27,"path":29,"stem":418,"children":419},"docs\u002Fiam\u002Findex",[420,421,424,559,562,578,581],{"title":27,"path":29,"stem":418},{"title":14,"path":422,"stem":423},"\u002Fdocs\u002Fiam\u002Fgetting-started","docs\u002Fiam\u002F00.getting-started",{"title":85,"path":425,"stem":426,"children":427},"\u002Fdocs\u002Fiam\u002Fessentials","docs\u002Fiam\u002F01.essentials\u002Findex",[428,429,433,437,441,445,449,453,457,461,465,469,472,476,480,484,488,491,495,499,502,506,509],{"title":85,"path":425,"stem":426},{"title":430,"path":431,"stem":432},"Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Ftokens","docs\u002Fiam\u002F01.essentials\u002F00.tokens",{"title":434,"path":435,"stem":436},"Access Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Faccess-tokens","docs\u002Fiam\u002F01.essentials\u002F01.access-tokens",{"title":438,"path":439,"stem":440},"Refresh Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Frefresh-tokens","docs\u002Fiam\u002F01.essentials\u002F02.refresh-tokens",{"title":442,"path":443,"stem":444},"Anomaly Detection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fanomalies","docs\u002Fiam\u002F01.essentials\u002F03.anomalies",{"title":446,"path":447,"stem":448},"Signup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fsignup","docs\u002Fiam\u002F01.essentials\u002F04.signup",{"title":450,"path":451,"stem":452},"Login","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogin","docs\u002Fiam\u002F01.essentials\u002F05.login",{"title":454,"path":455,"stem":456},"Logout","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogout","docs\u002Fiam\u002F01.essentials\u002F06.logout",{"title":458,"path":459,"stem":460},"OAuth","\u002Fdocs\u002Fiam\u002Fessentials\u002Foauth","docs\u002Fiam\u002F01.essentials\u002F07.oauth",{"title":462,"path":463,"stem":464},"Magic Links","\u002Fdocs\u002Fiam\u002Fessentials\u002Fmagic-links","docs\u002Fiam\u002F01.essentials\u002F08.magic-links",{"title":466,"path":467,"stem":468},"Emails","\u002Fdocs\u002Fiam\u002Fessentials\u002Femails","docs\u002Fiam\u002F01.essentials\u002F09.emails",{"title":130,"path":470,"stem":471},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fmfa","docs\u002Fiam\u002F01.essentials\u002F10.mfa",{"title":473,"path":474,"stem":475},"Fingerprinting","\u002Fdocs\u002Fiam\u002Fessentials\u002Ffingerprinting","docs\u002Fiam\u002F01.essentials\u002F11.fingerprinting",{"title":477,"path":478,"stem":479},"Backend for Frontend","\u002Fdocs\u002Fiam\u002Fessentials\u002Fbff","docs\u002Fiam\u002F01.essentials\u002F12.bff",{"title":481,"path":482,"stem":483},"HMAC Authentication","\u002Fdocs\u002Fiam\u002Fessentials\u002Fhmac","docs\u002Fiam\u002F01.essentials\u002F13.hmac",{"title":485,"path":486,"stem":487},"XSS Protection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fxss","docs\u002Fiam\u002F01.essentials\u002F14.xss",{"title":125,"path":489,"stem":490},"\u002Fdocs\u002Fiam\u002Fessentials\u002Flogging","docs\u002Fiam\u002F01.essentials\u002F15.logging",{"title":492,"path":493,"stem":494},"Rate Limiting","\u002Fdocs\u002Fiam\u002Fessentials\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F16.rate-limiting",{"title":496,"path":497,"stem":498},"Database","\u002Fdocs\u002Fiam\u002Fessentials\u002Fdatabase","docs\u002Fiam\u002F01.essentials\u002F17.database",{"title":120,"path":500,"stem":501},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fcookies","docs\u002Fiam\u002F01.essentials\u002F18.cookies",{"title":503,"path":504,"stem":505},"Service Startup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fservice","docs\u002Fiam\u002F01.essentials\u002F19.service",{"title":141,"path":507,"stem":508},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fpassword-reset","docs\u002Fiam\u002F01.essentials\u002F20.password-reset",{"title":510,"path":511,"stem":512,"children":513},"API Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi","docs\u002Fiam\u002F01.essentials\u002F21.api\u002Findex",[514,515,519,523,553,556],{"title":510,"path":511,"stem":512},{"title":516,"path":517,"stem":518},"Creating Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fcreation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F00.creation",{"title":520,"path":521,"stem":522},"Verifying Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fverification","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F01.verification",{"title":524,"path":525,"stem":526,"children":527},"Management","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002Findex",[528,529,533,537,541,545,549],{"title":524,"path":525,"stem":526},{"title":530,"path":531,"stem":532},"Privilege and Scopes","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fprivilege","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F00.privilege",{"title":534,"path":535,"stem":536},"Revocation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frevocation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F01.revocation",{"title":538,"path":539,"stem":540},"Rotation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frotation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F02.rotation",{"title":542,"path":543,"stem":544},"IP Restriction","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fip-updates","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F03.ip-updates",{"title":546,"path":547,"stem":548},"Metadata","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fmetadata","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F04.metadata",{"title":550,"path":551,"stem":552},"Token Listing","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Flist","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F05.list",{"title":492,"path":554,"stem":555},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F03.rate-limiting",{"title":38,"path":557,"stem":558},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fsecurity","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F04.security",{"title":38,"path":560,"stem":561},"\u002Fdocs\u002Fiam\u002Fsecurity","docs\u002Fiam\u002F02.security",{"title":188,"path":563,"stem":564,"children":565,"page":53},"\u002Fdocs\u002Fiam\u002Fguides","docs\u002Fiam\u002F03.guides",[566,570,574],{"title":567,"path":568,"stem":569},"Deployment","\u002Fdocs\u002Fiam\u002Fguides\u002Fdeployment","docs\u002Fiam\u002F03.guides\u002Fdeployment",{"title":571,"path":572,"stem":573},"Operation Scripts","\u002Fdocs\u002Fiam\u002Fguides\u002Foperation-scripts","docs\u002Fiam\u002F03.guides\u002Foperation-scripts",{"title":575,"path":576,"stem":577},"Role-Based Access Control","\u002Fdocs\u002Fiam\u002Fguides\u002Frbac","docs\u002Fiam\u002F03.guides\u002Frbac",{"title":213,"path":579,"stem":580},"\u002Fdocs\u002Fiam\u002Fconfiguration","docs\u002Fiam\u002F04.configuration",{"title":582,"path":583,"stem":584,"children":585,"page":53},"Api","\u002Fdocs\u002Fiam\u002Fapi","docs\u002Fiam\u002F05.API",[586,589,592],{"title":218,"path":587,"stem":588},"\u002Fdocs\u002Fiam\u002Fapi\u002Fapi","docs\u002Fiam\u002F05.API\u002F00.api",{"title":230,"path":590,"stem":591},"\u002Fdocs\u002Fiam\u002Fapi\u002Fmiddlewares","docs\u002Fiam\u002F05.API\u002F02.middlewares",{"title":225,"path":593,"stem":594},"\u002Fdocs\u002Fiam\u002Fapi\u002Froutes","docs\u002Fiam\u002F05.API\u002F03.routes",{"title":40,"path":42,"stem":596,"children":597},"docs\u002Fshield-base\u002Findex",[598,599,602,606,647,651,655,659],{"title":40,"path":42,"stem":596},{"title":14,"path":600,"stem":601},"\u002Fdocs\u002Fshield-base\u002Fgetting-started","docs\u002Fshield-base\u002F00.getting-started",{"title":603,"path":604,"stem":605},"CLI Reference","\u002Fdocs\u002Fshield-base\u002Fcli","docs\u002Fshield-base\u002F01.cli",{"title":307,"path":607,"stem":608,"children":609},"\u002Fdocs\u002Fshield-base\u002Fdata-sources","docs\u002Fshield-base\u002F02.data-sources\u002Findex",[610,611,615,619,623,627,631,635,639,643],{"title":307,"path":607,"stem":608},{"title":612,"path":613,"stem":614},"BGP \u002F ASN","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fbgp","docs\u002Fshield-base\u002F02.data-sources\u002Fbgp",{"title":616,"path":617,"stem":618},"City Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcity","docs\u002Fshield-base\u002F02.data-sources\u002Fcity",{"title":620,"path":621,"stem":622},"Country Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcountry","docs\u002Fshield-base\u002F02.data-sources\u002Fcountry",{"title":624,"path":625,"stem":626},"Verified Crawlers","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcrawlers","docs\u002Fshield-base\u002F02.data-sources\u002Fcrawlers",{"title":628,"path":629,"stem":630},"Disposable Emails","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Femail","docs\u002Fshield-base\u002F02.data-sources\u002Femail",{"title":632,"path":633,"stem":634},"FireHOL Threat Intelligence","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ffirehol","docs\u002Fshield-base\u002F02.data-sources\u002Ffirehol",{"title":636,"path":637,"stem":638},"Proxy Detection","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fproxy","docs\u002Fshield-base\u002F02.data-sources\u002Fproxy",{"title":640,"path":641,"stem":642},"Tor Nodes","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ftor","docs\u002Fshield-base\u002F02.data-sources\u002Ftor",{"title":644,"path":645,"stem":646},"Suspicious User-Agents","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fuseragent","docs\u002Fshield-base\u002F02.data-sources\u002Fuseragent",{"title":648,"path":649,"stem":650},"Programmatic Usage","\u002Fdocs\u002Fshield-base\u002Fusage","docs\u002Fshield-base\u002F03.usage",{"title":652,"path":653,"stem":654},"Custom Data Sources","\u002Fdocs\u002Fshield-base\u002Fcustom-data-sources","docs\u002Fshield-base\u002F04.custom-data-sources",{"title":656,"path":657,"stem":658},"TypeScript Types","\u002Fdocs\u002Fshield-base\u002Ftypes","docs\u002Fshield-base\u002F05.types",{"title":218,"path":660,"stem":661},"\u002Fdocs\u002Fshield-base\u002Fapi","docs\u002Fshield-base\u002F06.api",{"title":240,"path":48,"stem":663,"children":664},"docs\u002Futils\u002Findex",[665,666,683,716,813],{"title":240,"path":48,"stem":663},{"title":667,"path":668,"stem":669,"children":670,"page":53},"Eslint","\u002Fdocs\u002Futils\u002Feslint","docs\u002Futils\u002Feslint",[671,675,679],{"title":672,"path":673,"stem":674},"React Config","\u002Fdocs\u002Futils\u002Feslint\u002Freact","docs\u002Futils\u002Feslint\u002Freact",{"title":676,"path":677,"stem":678},"TypeScript Config","\u002Fdocs\u002Futils\u002Feslint\u002Ftypescript","docs\u002Futils\u002Feslint\u002Ftypescript",{"title":680,"path":681,"stem":682},"Vue Config","\u002Fdocs\u002Futils\u002Feslint\u002Fvue","docs\u002Futils\u002Feslint\u002Fvue",{"title":684,"path":685,"stem":686,"children":687,"page":53},"Server","\u002Fdocs\u002Futils\u002Fserver","docs\u002Futils\u002Fserver",[688,692,696,700,704,708,712],{"title":689,"path":690,"stem":691},"Encryption","\u002Fdocs\u002Futils\u002Fserver\u002Fencryption","docs\u002Futils\u002Fserver\u002Fencryption",{"title":693,"path":694,"stem":695},"Path Resolver","\u002Fdocs\u002Futils\u002Fserver\u002Fpathresolver","docs\u002Futils\u002Fserver\u002FpathResolver",{"title":697,"path":698,"stem":699},"File Replacements","\u002Fdocs\u002Futils\u002Fserver\u002Freplace","docs\u002Futils\u002Fserver\u002Freplace",{"title":701,"path":702,"stem":703},"run","\u002Fdocs\u002Futils\u002Fserver\u002Frun","docs\u002Futils\u002Fserver\u002Frun",{"title":705,"path":706,"stem":707},"scheduleTask","\u002Fdocs\u002Futils\u002Fserver\u002Fscheduletask","docs\u002Futils\u002Fserver\u002FscheduleTask",{"title":709,"path":710,"stem":711},"spawnRun","\u002Fdocs\u002Futils\u002Fserver\u002Fspawnrun","docs\u002Futils\u002Fserver\u002FspawnRun",{"title":713,"path":714,"stem":715},"uploadCsv","\u002Fdocs\u002Futils\u002Fserver\u002Fuploadcsv","docs\u002Futils\u002Fserver\u002FuploadCsv",{"title":717,"path":718,"stem":719,"children":720,"page":53},"Shared","\u002Fdocs\u002Futils\u002Fshared","docs\u002Futils\u002Fshared",[721,725,729,733,737,741,745,749,753,757,761,765,769,773,777,781,785,789,793,797,801,805,809],{"title":722,"path":723,"stem":724},"BatchQueue","\u002Fdocs\u002Futils\u002Fshared\u002Fbatchqueue","docs\u002Futils\u002Fshared\u002FbatchQueue",{"title":726,"path":727,"stem":728},"capitalize","\u002Fdocs\u002Futils\u002Fshared\u002Fcapitalize","docs\u002Futils\u002Fshared\u002Fcapitalize",{"title":730,"path":731,"stem":732},"chunkProcess","\u002Fdocs\u002Futils\u002Fshared\u002Fchunkprocess","docs\u002Futils\u002Fshared\u002FchunkProcess",{"title":734,"path":735,"stem":736},"cleanObject","\u002Fdocs\u002Futils\u002Fshared\u002Fcleanobject","docs\u002Futils\u002Fshared\u002FcleanObject",{"title":738,"path":739,"stem":740},"createConfigManager","\u002Fdocs\u002Futils\u002Fshared\u002Fconfigurationdefiner","docs\u002Futils\u002Fshared\u002FconfigurationDefiner",{"title":742,"path":743,"stem":744},"debounce","\u002Fdocs\u002Futils\u002Fshared\u002Fdebounce","docs\u002Futils\u002Fshared\u002Fdebounce",{"title":746,"path":747,"stem":748},"ensureArray","\u002Fdocs\u002Futils\u002Fshared\u002Fensurearray","docs\u002Futils\u002Fshared\u002FensureArray",{"title":750,"path":751,"stem":752},"fetchWithRetry","\u002Fdocs\u002Futils\u002Fshared\u002Ffetchwithretry","docs\u002Futils\u002Fshared\u002FfetchWithRetry",{"title":754,"path":755,"stem":756},"filterEmptyValues","\u002Fdocs\u002Futils\u002Fshared\u002Ffilteremptyvalues","docs\u002Futils\u002Fshared\u002FfilterEmptyValues",{"title":758,"path":759,"stem":760},"findStringsInObject","\u002Fdocs\u002Futils\u002Fshared\u002Ffindobjectvalues","docs\u002Futils\u002Fshared\u002FfindObjectValues",{"title":762,"path":763,"stem":764},"fisherYatesShuffle","\u002Fdocs\u002Futils\u002Fshared\u002Ffisheryatesshuffle","docs\u002Futils\u002Fshared\u002FfisherYatesShuffle",{"title":766,"path":767,"stem":768},"getRandomImage","\u002Fdocs\u002Futils\u002Fshared\u002Fgetrandomimage","docs\u002Futils\u002Fshared\u002FgetRandomImage",{"title":770,"path":771,"stem":772},"isObjectHasValues","\u002Fdocs\u002Futils\u002Fshared\u002Fisobjecthasvalues","docs\u002Futils\u002Fshared\u002FisObjectHasValues",{"title":774,"path":775,"stem":776},"isAsyncOrPromise","\u002Fdocs\u002Futils\u002Fshared\u002Fispromise","docs\u002Futils\u002Fshared\u002FisPromise",{"title":778,"path":779,"stem":780},"MiniCache","\u002Fdocs\u002Futils\u002Fshared\u002Fminicache","docs\u002Futils\u002Fshared\u002FminiCache",{"title":782,"path":783,"stem":784},"parseCookies","\u002Fdocs\u002Futils\u002Fshared\u002Fparserawcookies","docs\u002Futils\u002Fshared\u002FparseRawCookies",{"title":786,"path":787,"stem":788},"safeAction","\u002Fdocs\u002Futils\u002Fshared\u002Fpromiselocker","docs\u002Futils\u002Fshared\u002FpromiseLocker",{"title":790,"path":791,"stem":792},"Random","\u002Fdocs\u002Futils\u002Fshared\u002Frandom","docs\u002Futils\u002Fshared\u002Frandom",{"title":794,"path":795,"stem":796},"range","\u002Fdocs\u002Futils\u002Fshared\u002Frange","docs\u002Futils\u002Fshared\u002Frange",{"title":798,"path":799,"stem":800},"rateLimiters","\u002Fdocs\u002Futils\u002Fshared\u002Fratelimiters","docs\u002Futils\u002Fshared\u002FrateLimiters",{"title":802,"path":803,"stem":804},"safeObjectMerge","\u002Fdocs\u002Futils\u002Fshared\u002Fsafemerge","docs\u002Futils\u002Fshared\u002FsafeMerge",{"title":806,"path":807,"stem":808},"textTruncation","\u002Fdocs\u002Futils\u002Fshared\u002Ftexttruncation","docs\u002Futils\u002Fshared\u002FtextTruncation",{"title":810,"path":811,"stem":812},"validateZodSchema","\u002Fdocs\u002Futils\u002Fshared\u002Fvalidatezodschema","docs\u002Futils\u002Fshared\u002FvalidateZodSchema",{"title":814,"path":815,"stem":816,"children":817},"Utility Types","\u002Fdocs\u002Futils\u002Ftypes","docs\u002Futils\u002Ftypes\u002Findex",[818,819,823,827,831,835,839,843,847,851],{"title":814,"path":815,"stem":816},{"title":820,"path":821,"stem":822},"Brand","\u002Fdocs\u002Futils\u002Ftypes\u002Fbrand","docs\u002Futils\u002Ftypes\u002FBrand",{"title":824,"path":825,"stem":826},"DeepPartial","\u002Fdocs\u002Futils\u002Ftypes\u002Fdeeppartial","docs\u002Futils\u002Ftypes\u002FDeepPartial",{"title":828,"path":829,"stem":830},"Merge","\u002Fdocs\u002Futils\u002Ftypes\u002Fmerge","docs\u002Futils\u002Ftypes\u002FMerge",{"title":832,"path":833,"stem":834},"NonNullable","\u002Fdocs\u002Futils\u002Ftypes\u002Fnonnullable","docs\u002Futils\u002Ftypes\u002FNonNullable",{"title":836,"path":837,"stem":838},"Prettify","\u002Fdocs\u002Futils\u002Ftypes\u002Fprettify","docs\u002Futils\u002Ftypes\u002FPrettify",{"title":840,"path":841,"stem":842},"PromiseType","\u002Fdocs\u002Futils\u002Ftypes\u002Fpromisetype","docs\u002Futils\u002Ftypes\u002FPromiseType",{"title":844,"path":845,"stem":846},"RequireKeys","\u002Fdocs\u002Futils\u002Ftypes\u002Frequirekeys","docs\u002Futils\u002Ftypes\u002FRequireKeys",{"title":848,"path":849,"stem":850},"StandardResponse","\u002Fdocs\u002Futils\u002Ftypes\u002Fstandardresponse","docs\u002Futils\u002Ftypes\u002FStandardResponse",{"title":852,"path":853,"stem":854},"ValueOf","\u002Fdocs\u002Futils\u002Ftypes\u002Fvalueof","docs\u002Futils\u002Ftypes\u002FValueOf",{"id":4,"extension":5,"links":856,"meta":867,"stem":62,"__hash__":63},[857,865,866],{"nested":8,"label":9,"icon":10,"to":11,"children":858},[859,860,861,862,863,864],{"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":869,"title":20,"body":870,"description":1013,"extension":1014,"icon":73,"meta":1015,"module":1016,"navigation":8,"path":22,"rawbody":1017,"seo":1018,"stem":70,"__hash__":1019},"docs\u002Fdocs\u002Fauth-h3client\u002Findex.md",{"type":871,"value":872,"toc":1007},"minimark",[873,899,905,908,911,920,925,977,981],[874,875,876,880,881,888,889,894,895,898],"p",{},[877,878,879],"code",{},"@riavzon\u002Fauth-h3client"," is a gateway authentication module for ",[882,883,887],"a",{"href":884,"rel":885},"https:\u002F\u002Fnuxt.com\u002F",[886],"nofollow","Nuxt"," and ",[882,890,893],{"href":891,"rel":892},"https:\u002F\u002Fnitro.unjs.io\u002F",[886],"Nitro"," applications. It sits between the browser and the ",[882,896,897],{"href":29},"IAM service"," and handles every authentication operation that belongs in the server layer of your frontend: session hydration, access token rotation, CSRF enforcement, OAuth code exchange, magic link handling, bot detection, API token verification, and inter-service request signing.",[874,900,901,902,904],{},"Its the Backend for frontend for the ",[882,903,897],{"href":478}," service.",[874,906,907],{},"The module ships pre-built H3 controllers for authentication flows, MFA flows, API token inventory routes, and an OAuth client to connect to various providers. It also exports event handler wrappers for API token verification and management. Every controller proxies to the IAM service over an authenticated connection with optional mTLS and HMAC request signing.",[874,909,910],{},"Both H3 v1 and H3 v2 are supported and ship the same controller and utility surface.",[912,913,914],"note",{},[874,915,916,917,919],{},"Auth H3 Client is designed to run as the server layer of a Nuxt or Nitro application. The ",[882,918,897],{"href":29}," must be running and reachable for every request that requires authentication. The module does not store credentials or issue tokens; it proxies to IAM and manages the resulting cookies and responses.",[921,922,924],"h2",{"id":923},"features","Features",[926,927,930,934,939,942,945,948,952,956,959,963,966,970,973],"u-page-grid",{"className":928},[929],"lg:grid-cols-3",[931,932],"u-page-card",{"description":933,"icon":94,"title":91},"Server and client session state stay synchronized without an extra round trip.",[931,935],{"description":936,"icon":937,"title":938},"Access tokens are checked and rotated automatically on every protected request. A built-in deduplication mechanism ensures that parallel requests on the same session do not trigger competing refresh calls, keeping the session consistent under concurrent load.","i-lucide-refresh-cw","Token Rotation",[931,940],{"description":941,"icon":104,"title":101},"A signed, expiring CSRF cookie is issued on first contact and validated on every state-changing request. The check covers the cookie signature, expiry, and a matching request header using timing-safe comparison to prevent forgery and timing side-channel attacks.",[931,943],{"description":944,"icon":99,"title":96},"Pre-built event handler wrappers enforce authentication and CSRF requirements at the route level. Each wrapper receives the verified session data as a typed argument so no manual token extraction or status checking is needed inside the handler body.",[931,946],{"description":947,"icon":114,"title":111},"Built-in handlers cover the full authorization code flow with PKCE support. After the provider callback, the module verifies the ID token signature against the provider's JWKS endpoint, validates the at_hash claim, and forwards user data to the IAM service with protected field enforcement.",[931,949],{"description":950,"icon":174,"title":951},"A composable reads magic link query parameters on page load and routes the verification to the correct server endpoint based on the reason embedded in the link. Pre-built server handlers cover code requests, magic link validation, and code submission.","MFA and Magic Links",[931,953],{"description":954,"icon":21,"title":955},"Pre-built handlers cover the complete two-step flows for password reset and email change. Each flow relies on a signed magic link issued by the IAM service. A dedicated handler validates the link before accepting new credentials.","Password Reset and Email Change",[931,957],{"description":958,"icon":118,"title":33},"Incoming requests are screened against the IAM service bot detection pipeline. The middleware reads the visitor fingerprint, forwards it to the check endpoint, and returns 403 for flagged visitors. On Linux with UFW available, banned IPs can be dropped at the firewall level.",[931,960],{"description":961,"icon":211,"title":962},"Every outbound connection from the module to the IAM service can present a client certificate and verify the server certificate. The SSL configuration points to the certificate bundle paths and the module builds the underlying HTTP agent accordingly.","mTLS",[931,964],{"description":965,"icon":201,"title":198},"Every request the module sends to the IAM service can be signed with a shared secret and a timestamp. The IAM service rejects any request that does not carry a valid signature, ensuring that only known gateway instances can reach it.",[931,967],{"description":968,"icon":969,"title":510},"Built-in wrappers verify `X-API-KEY` headers against the IAM service, expose authenticated token inventory routes, and proxy token creation, rotation, revocation, privilege changes, and IP restriction updates through typed H3 handlers.","i-lucide-key-square",[931,971],{"description":972,"icon":206,"title":203},"Uploaded image buffers are validated against a configurable list of allowed MIME types, extensions, and a maximum byte size. Valid images are converted to WebP before storage. An optional key function controls how the storage path is derived from the upload context.",[931,974],{"description":975,"icon":976,"title":125},"Ships with both HTTP logger and a general logger that used internally, and can be imported to use in your app.","i-lucide-bell",[921,978,980],{"id":979},"documentation","Documentation",[926,982,983,986,989,992,996,999,1002],{},[931,984],{"description":985,"icon":15,"title":14,"to":75},"Prerequisites, installation, configuration, and first-run verification.",[931,987],{"description":988,"icon":10,"title":85,"to":86},"Essentials docs for this module.",[931,990],{"description":991,"icon":165,"title":160,"to":161},"Browser-side Vue composables and fetch utilities shipped from auth-h3client\u002Fclient.",[931,993],{"description":994,"icon":995,"title":188,"to":199},"Guides for this module.","i-lucide-book-marked",[931,997],{"description":998,"icon":99,"title":38,"to":185},"Overview of the security primitives and design of this module.",[931,1000],{"description":1001,"icon":216,"title":213,"to":214},"Complete reference for the configuration object.",[931,1003],{"description":1004,"icon":223,"title":218,"to":219,"className":1005},"Complete reference for all exported controllers, middleware, event handler wrappers, composables, and utility functions.",[1006],"col-span-full",{"title":1008,"searchDepth":1009,"depth":1009,"links":1010},"",2,[1011,1012],{"id":923,"depth":1009,"text":924},{"id":979,"depth":1009,"text":980},"Gateway authentication module for Nuxt and Nitro applications that connects your frontend to the IAM service with full session management, OAuth flows, CSRF protection, token rotation, and more.","md",{},null,"---\ntitle: Auth H3 Client\ndescription: Gateway authentication module for Nuxt and Nitro applications that connects your frontend to the IAM service with full session management, OAuth flows, CSRF protection, token rotation, and more.\nicon: i-lucide-layers\n---\n\n`@riavzon\u002Fauth-h3client` is a gateway authentication module for [Nuxt](https:\u002F\u002Fnuxt.com\u002F) and [Nitro](https:\u002F\u002Fnitro.unjs.io\u002F) applications. It sits between the browser and the [IAM service](\u002Fdocs\u002Fiam) and handles every authentication operation that belongs in the server layer of your frontend: session hydration, access token rotation, CSRF enforcement, OAuth code exchange, magic link handling, bot detection, API token verification, and inter-service request signing.\n\nIts the Backend for frontend for the [IAM service](\u002Fdocs\u002Fiam\u002Fessentials\u002Fbff) service.\n\nThe module ships pre-built H3 controllers for authentication flows, MFA flows, API token inventory routes, and an OAuth client to connect to various providers. It also exports event handler wrappers for API token verification and management. Every controller proxies to the IAM service over an authenticated connection with optional mTLS and HMAC request signing.\n\nBoth H3 v1 and H3 v2 are supported and ship the same controller and utility surface.\n\n::note\nAuth H3 Client is designed to run as the server layer of a Nuxt or Nitro application. The [IAM service](\u002Fdocs\u002Fiam) must be running and reachable for every request that requires authentication. The module does not store credentials or issue tokens; it proxies to IAM and manages the resulting cookies and responses.\n::\n\n## Features\n\n::UPageGrid{class=\"lg:grid-cols-3\"}\n  ::UPageCard\n  ---\n  title: Session Management\n  description: Server and client session state stay synchronized without an extra round trip.\n  icon: i-lucide-user-check\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: Token Rotation\n  description: Access tokens are checked and rotated automatically on every protected request. A built-in deduplication mechanism ensures that parallel requests on the same session do not trigger competing refresh calls, keeping the session consistent under concurrent load.\n  icon: i-lucide-refresh-cw\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: CSRF Protection\n  description: A signed, expiring CSRF cookie is issued on first contact and validated on every state-changing request. The check covers the cookie signature, expiry, and a matching request header using timing-safe comparison to prevent forgery and timing side-channel attacks.\n  icon: i-lucide-shield-x\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: Route Protection\n  description: Pre-built event handler wrappers enforce authentication and CSRF requirements at the route level. Each wrapper receives the verified session data as a typed argument so no manual token extraction or status checking is needed inside the handler body.\n  icon: i-lucide-lock-keyhole\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: OAuth and OIDC\n  description: Built-in handlers cover the full authorization code flow with PKCE support. After the provider callback, the module verifies the ID token signature against the provider's JWKS endpoint, validates the at_hash claim, and forwards user data to the IAM service with protected field enforcement.\n  icon: i-lucide-users\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: MFA and Magic Links\n  description: A composable reads magic link query parameters on page load and routes the verification to the correct server endpoint based on the reason embedded in the link. Pre-built server handlers cover code requests, magic link validation, and code submission.\n  icon: i-lucide-link\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: Password Reset and Email Change\n  description: Pre-built handlers cover the complete two-step flows for password reset and email change. Each flow relies on a signed magic link issued by the IAM service. A dedicated handler validates the link before accepting new credentials.\n  icon: i-lucide-key-round\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: Bot Detection\n  description: Incoming requests are screened against the IAM service bot detection pipeline. The middleware reads the visitor fingerprint, forwards it to the check endpoint, and returns 403 for flagged visitors. On Linux with UFW available, banned IPs can be dropped at the firewall level.\n  icon: i-lucide-scan-eye\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: mTLS\n  description: Every outbound connection from the module to the IAM service can present a client certificate and verify the server certificate. The SSL configuration points to the certificate bundle paths and the module builds the underlying HTTP agent accordingly.\n  icon: i-lucide-file-badge\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: HMAC Inter-service Auth\n  description: Every request the module sends to the IAM service can be signed with a shared secret and a timestamp. The IAM service rejects any request that does not carry a valid signature, ensuring that only known gateway instances can reach it.\n  icon: i-lucide-fingerprint\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: API Tokens\n  description: Built-in wrappers verify `X-API-KEY` headers against the IAM service, expose authenticated token inventory routes, and proxy token creation, rotation, revocation, privilege changes, and IP restriction updates through typed H3 handlers.\n  icon: i-lucide-key-square\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: Image Upload\n  description: Uploaded image buffers are validated against a configurable list of allowed MIME types, extensions, and a maximum byte size. Valid images are converted to WebP before storage. An optional key function controls how the storage path is derived from the upload context.\n  icon: i-lucide-image\n  ---\n  ::\n\n\n  ::UPageCard\n  ---\n  title: Logging\n  description: Ships with both HTTP logger and a general logger that used internally, and can be imported to use in your app.\n  icon: i-lucide-bell\n  ---\n  ::\n\n::\n\n## Documentation\n\n::UPageGrid\n  ::UPageCard\n  ---\n  title: Getting Started\n  description: Prerequisites, installation, configuration, and first-run verification.\n  icon: i-lucide-rocket\n  to: \u002Fdocs\u002Fauth-h3client\u002Fgetting-started\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: Essentials\n  description: Essentials docs for this module.\n  icon: i-lucide-book-open\n  to: \u002Fdocs\u002Fauth-h3client\u002Fessentials\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: Client-side\n  description: Browser-side Vue composables and fetch utilities shipped from auth-h3client\u002Fclient.\n  icon: i-lucide-monitor\n  to: \u002Fdocs\u002Fauth-h3client\u002Fclient\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: Guides\n  description: Guides for this module.\n  icon: i-lucide-book-marked\n  to: \u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fhmac\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: Security\n  description: Overview of the security primitives and design of this module.\n  icon: i-lucide-lock-keyhole\n  to: \u002Fdocs\u002Fauth-h3client\u002Fsecurity\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: Configuration\n  description: Complete reference for the configuration object.\n  icon: i-lucide-settings\n  to: \u002Fdocs\u002Fauth-h3client\u002Fconfiguration\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: API Reference\n  description: Complete reference for all exported controllers, middleware, event handler wrappers, composables, and utility functions.\n  icon: i-lucide-code\n  to: \u002Fdocs\u002Fauth-h3client\u002Fapi\n  class: col-span-full\n  ---\n  ::\n\n::\n",{"title":20,"description":1013},"Mq0LCNf4U86JFWaf1EcEh9x9Jr6JBSfAnh83Oh9vCG4",[1016,1021],{"title":14,"path":75,"stem":76,"children":-1},{"id":869,"title":20,"body":1023,"description":1013,"extension":1014,"icon":73,"meta":1105,"module":1016,"navigation":8,"path":22,"rawbody":1017,"seo":1106,"stem":70,"__hash__":1019},{"type":871,"value":1024,"toc":1101},[1025,1037,1041,1043,1045,1051,1053,1082,1084],[874,1026,1027,880,1029,888,1032,894,1035,898],{},[877,1028,879],{},[882,1030,887],{"href":884,"rel":1031},[886],[882,1033,893],{"href":891,"rel":1034},[886],[882,1036,897],{"href":29},[874,1038,901,1039,904],{},[882,1040,897],{"href":478},[874,1042,907],{},[874,1044,910],{},[912,1046,1047],{},[874,1048,916,1049,919],{},[882,1050,897],{"href":29},[921,1052,924],{"id":923},[926,1054,1056,1058,1060,1062,1064,1066,1068,1070,1072,1074,1076,1078,1080],{"className":1055},[929],[931,1057],{"description":933,"icon":94,"title":91},[931,1059],{"description":936,"icon":937,"title":938},[931,1061],{"description":941,"icon":104,"title":101},[931,1063],{"description":944,"icon":99,"title":96},[931,1065],{"description":947,"icon":114,"title":111},[931,1067],{"description":950,"icon":174,"title":951},[931,1069],{"description":954,"icon":21,"title":955},[931,1071],{"description":958,"icon":118,"title":33},[931,1073],{"description":961,"icon":211,"title":962},[931,1075],{"description":965,"icon":201,"title":198},[931,1077],{"description":968,"icon":969,"title":510},[931,1079],{"description":972,"icon":206,"title":203},[931,1081],{"description":975,"icon":976,"title":125},[921,1083,980],{"id":979},[926,1085,1086,1088,1090,1092,1094,1096,1098],{},[931,1087],{"description":985,"icon":15,"title":14,"to":75},[931,1089],{"description":988,"icon":10,"title":85,"to":86},[931,1091],{"description":991,"icon":165,"title":160,"to":161},[931,1093],{"description":994,"icon":995,"title":188,"to":199},[931,1095],{"description":998,"icon":99,"title":38,"to":185},[931,1097],{"description":1001,"icon":216,"title":213,"to":214},[931,1099],{"description":1004,"icon":223,"title":218,"to":219,"className":1100},[1006],{"title":1008,"searchDepth":1009,"depth":1009,"links":1102},[1103,1104],{"id":923,"depth":1009,"text":924},{"id":979,"depth":1009,"text":980},{},{"title":20,"description":1013},1780564513104]