[{"data":1,"prerenderedAt":2824},["ShallowReactive",2],{"navLinks":3,"sidebar_docs_navigation_\u002Fdocs\u002Fauth-h3client":64,"navigation":217,"navLinks_footer":829,"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Flogging_page":842,"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Flogging_surround":1981,"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Flogging":1984},{"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":116,"body":844,"description":1973,"extension":1974,"icon":1975,"meta":1976,"module":1977,"navigation":8,"path":117,"rawbody":1978,"seo":1979,"stem":118,"__hash__":1980},"docs\u002Fdocs\u002Fauth-h3client\u002F01.essentials\u002F07.logging.md",{"type":845,"value":846,"toc":1962},"minimark",[847,851,854,859,878,881,1074,1078,1081,1118,1121,1124,1128,1131,1181,1185,1212,1216,1225,1549,1602,1612,1616,1657,1659,1665,1670,1841,1847,1871,1873,1877,1885,1945,1958],[848,849,850],"p",{},"The module ships two logging mechanisms: a structured HTTP request logger, and a pino logger instance used by all internal operations. Both are available for use in your own handlers.",[852,853],"hr",{},[855,856,858],"h2",{"id":857},"http-logger","HTTP logger",[848,860,861,865,866,869,870,873,874,877],{},[862,863,864],"code",{},"httpLogger()"," is an H3 plugin that attaches structured request and response logging to your app. It hooks into ",[862,867,868],{},"onRequest",", ",[862,871,872],{},"onResponse",", and ",[862,875,876],{},"onError"," to capture the full lifecycle of every request.",[848,879,880],{},"Register it during startup. When using the Nuxt module, registration happens automatically.",[882,883,884,991],"code-group",{},[885,886,892],"pre",{"className":887,"code":888,"filename":889,"language":890,"meta":891,"style":891},"language-ts shiki shiki-themes light-plus light-plus dracula","import { createApp } from 'h3'\nimport { httpLogger } from 'auth-h3client\u002Fv1'\n\nconst app = createApp()\nhttpLogger()(app)\n","H3 v1","ts","",[862,893,894,928,949,955,977],{"__ignoreMap":891},[895,896,899,903,907,911,914,917,921,925],"span",{"class":897,"line":898},"line",1,[895,900,902],{"class":901},"sZ328","import",[895,904,906],{"class":905},"sDd4n"," { ",[895,908,910],{"class":909},"sjsA6","createApp",[895,912,913],{"class":905}," } ",[895,915,916],{"class":901},"from",[895,918,920],{"class":919},"sFkSl"," '",[895,922,924],{"class":923},"sFB1V","h3",[895,926,927],{"class":919},"'\n",[895,929,931,933,935,938,940,942,944,947],{"class":897,"line":930},2,[895,932,902],{"class":901},[895,934,906],{"class":905},[895,936,937],{"class":909},"httpLogger",[895,939,913],{"class":905},[895,941,916],{"class":901},[895,943,920],{"class":919},[895,945,946],{"class":923},"auth-h3client\u002Fv1",[895,948,927],{"class":919},[895,950,952],{"class":897,"line":951},3,[895,953,954],{"emptyLinePlaceholder":8},"\n",[895,956,958,962,966,970,974],{"class":897,"line":957},4,[895,959,961],{"class":960},"sl46w","const",[895,963,965],{"class":964},"s3JHE"," app",[895,967,969],{"class":968},"saOXh"," =",[895,971,973],{"class":972},"sHOzp"," createApp",[895,975,976],{"class":905},"()\n",[895,978,980,982,985,988],{"class":897,"line":979},5,[895,981,937],{"class":972},[895,983,984],{"class":905},"()(",[895,986,987],{"class":909},"app",[895,989,990],{"class":905},")\n",[885,992,995],{"className":887,"code":993,"filename":994,"language":890,"meta":891,"style":891},"import { H3 } from 'h3'\nimport { httpLogger } from 'auth-h3client\u002Fv2'\n\nconst app = new H3()\napp.register(httpLogger())\n","H3 v2",[862,996,997,1016,1035,1039,1056],{"__ignoreMap":891},[895,998,999,1001,1003,1006,1008,1010,1012,1014],{"class":897,"line":898},[895,1000,902],{"class":901},[895,1002,906],{"class":905},[895,1004,1005],{"class":909},"H3",[895,1007,913],{"class":905},[895,1009,916],{"class":901},[895,1011,920],{"class":919},[895,1013,924],{"class":923},[895,1015,927],{"class":919},[895,1017,1018,1020,1022,1024,1026,1028,1030,1033],{"class":897,"line":930},[895,1019,902],{"class":901},[895,1021,906],{"class":905},[895,1023,937],{"class":909},[895,1025,913],{"class":905},[895,1027,916],{"class":901},[895,1029,920],{"class":919},[895,1031,1032],{"class":923},"auth-h3client\u002Fv2",[895,1034,927],{"class":919},[895,1036,1037],{"class":897,"line":951},[895,1038,954],{"emptyLinePlaceholder":8},[895,1040,1041,1043,1045,1047,1051,1054],{"class":897,"line":957},[895,1042,961],{"class":960},[895,1044,965],{"class":964},[895,1046,969],{"class":968},[895,1048,1050],{"class":1049},"sakC6"," new",[895,1052,1053],{"class":972}," H3",[895,1055,976],{"class":905},[895,1057,1058,1060,1063,1066,1069,1071],{"class":897,"line":979},[895,1059,987],{"class":909},[895,1061,1062],{"class":905},".",[895,1064,1065],{"class":972},"register",[895,1067,1068],{"class":905},"(",[895,1070,937],{"class":972},[895,1072,1073],{"class":905},"())\n",[924,1075,1077],{"id":1076},"logs-output","Logs output",[848,1079,1080],{},"On each request, the logger records:",[1082,1083,1084,1096,1099,1102,1108,1115],"ul",{},[1085,1086,1087,1088,1091,1092,1095],"li",{},"Request ID (",[862,1089,1090],{},"x-request-id","): read from the incoming header if present, otherwise a random UUID. Set on the response and stored on ",[862,1093,1094],{},"event.context.rid"," for use by other middleware and handlers.",[1085,1097,1098],{},"Method, URL path, query string, and full host URL",[1085,1100,1101],{},"Client IP address and User-Agent",[1085,1103,1104,1105],{},"Request fingerprint via ",[862,1106,1107],{},"getRequestFingerprint",[1085,1109,1110,1111,1114],{},"All request headers and cookies (both redacted to ",[862,1112,1113],{},"[SECRET]"," in the log output)",[1085,1116,1117],{},"Referrer",[848,1119,1120],{},"On each response, it records the status code, response headers, content type, content length, and latency in milliseconds.",[848,1122,1123],{},"On errors, it records the status, error name, message, stack trace, and error body.",[924,1125,1127],{"id":1126},"log-level-selection","Log level selection",[848,1129,1130],{},"The HTTP logger selects the level for each response automatically:",[1132,1133,1134,1147],"table",{},[1135,1136,1137],"thead",{},[1138,1139,1140,1144],"tr",{},[1141,1142,1143],"th",{},"Status range",[1141,1145,1146],{},"Level",[1148,1149,1150,1161,1171],"tbody",{},[1138,1151,1152,1156],{},[1153,1154,1155],"td",{},"5xx or error context",[1153,1157,1158],{},[862,1159,1160],{},"error",[1138,1162,1163,1166],{},[1153,1164,1165],{},"4xx",[1153,1167,1168],{},[862,1169,1170],{},"warn",[1138,1172,1173,1176],{},[1153,1174,1175],{},"2xx \u002F 3xx",[1153,1177,1178],{},[862,1179,1180],{},"info",[924,1182,1184],{"id":1183},"output-destination","Output destination",[848,1186,1187,1188,1191,1192,1195,1196,1199,1200,1203,1204,1207,1208,1211],{},"Log output is written to ",[862,1189,1190],{},"logs\u002Fhttp.log"," as newline-delimited JSON using a pino file transport. The ",[862,1193,1194],{},"logs\u002F"," directory is created automatically at the nearest ",[862,1197,1198],{},"package.json"," root relative to the process working directory. Set the ",[862,1201,1202],{},"CLIENT_LOG_DIR"," environment variable to write logs to a different path. This logger is separate from the general ",[862,1205,1206],{},"getLogger()"," instance, but its minimum level is controlled by the same ",[862,1209,1210],{},"logLevel"," configuration field.",[924,1213,1215],{"id":1214},"log-entry-shape","Log entry shape",[848,1217,1218,1219,1221,1222,1224],{},"Each request produces an entry at ",[862,1220,868],{}," and a second entry at ",[862,1223,872],{},". The structure looks like:",[885,1226,1229],{"className":1227,"code":1228,"language":5,"meta":891,"style":891},"language-json shiki shiki-themes light-plus light-plus dracula","{\n  \"level\": 30,\n  \"time\": \"2026-04-12T10:00:00.000Z\",\n  \"uptime\": 120.5,\n  \"requestId\": \"a1b2c3d4-...\",\n  \"ip\": \"1.2.3.4\",\n  \"userAgent\": \"Mozilla\u002F5.0 ...\",\n  \"FullUrl\": \"app.example.com\u002Fapi\u002Fprofile\",\n  \"fingerPrints\": \"...\",\n  \"referrer\": \"https:\u002F\u002Fapp.example.com\u002F\",\n  \"httpRequest\": {\n    \"method\": \"POST\",\n    \"url\": \"\u002Fapi\u002Fprofile\",\n    \"headers\": \"[SECRET]\",\n    \"remoteAddress\": \"1.2.3.4\"\n  },\n  \"msg\": \"request start\"\n}\n",[862,1230,1231,1236,1259,1280,1296,1316,1337,1358,1379,1400,1421,1436,1458,1479,1499,1518,1524,1543],{"__ignoreMap":891},[895,1232,1233],{"class":897,"line":898},[895,1234,1235],{"class":905},"{\n",[895,1237,1238,1242,1246,1249,1252,1256],{"class":897,"line":930},[895,1239,1241],{"class":1240},"saJyd","  \"",[895,1243,1245],{"class":1244},"s_W10","level",[895,1247,1248],{"class":1240},"\"",[895,1250,1251],{"class":968},":",[895,1253,1255],{"class":1254},"spgvN"," 30",[895,1257,1258],{"class":905},",\n",[895,1260,1261,1263,1266,1268,1270,1273,1276,1278],{"class":897,"line":951},[895,1262,1241],{"class":1240},[895,1264,1265],{"class":1244},"time",[895,1267,1248],{"class":1240},[895,1269,1251],{"class":968},[895,1271,1272],{"class":919}," \"",[895,1274,1275],{"class":923},"2026-04-12T10:00:00.000Z",[895,1277,1248],{"class":919},[895,1279,1258],{"class":905},[895,1281,1282,1284,1287,1289,1291,1294],{"class":897,"line":957},[895,1283,1241],{"class":1240},[895,1285,1286],{"class":1244},"uptime",[895,1288,1248],{"class":1240},[895,1290,1251],{"class":968},[895,1292,1293],{"class":1254}," 120.5",[895,1295,1258],{"class":905},[895,1297,1298,1300,1303,1305,1307,1309,1312,1314],{"class":897,"line":979},[895,1299,1241],{"class":1240},[895,1301,1302],{"class":1244},"requestId",[895,1304,1248],{"class":1240},[895,1306,1251],{"class":968},[895,1308,1272],{"class":919},[895,1310,1311],{"class":923},"a1b2c3d4-...",[895,1313,1248],{"class":919},[895,1315,1258],{"class":905},[895,1317,1319,1321,1324,1326,1328,1330,1333,1335],{"class":897,"line":1318},6,[895,1320,1241],{"class":1240},[895,1322,1323],{"class":1244},"ip",[895,1325,1248],{"class":1240},[895,1327,1251],{"class":968},[895,1329,1272],{"class":919},[895,1331,1332],{"class":923},"1.2.3.4",[895,1334,1248],{"class":919},[895,1336,1258],{"class":905},[895,1338,1340,1342,1345,1347,1349,1351,1354,1356],{"class":897,"line":1339},7,[895,1341,1241],{"class":1240},[895,1343,1344],{"class":1244},"userAgent",[895,1346,1248],{"class":1240},[895,1348,1251],{"class":968},[895,1350,1272],{"class":919},[895,1352,1353],{"class":923},"Mozilla\u002F5.0 ...",[895,1355,1248],{"class":919},[895,1357,1258],{"class":905},[895,1359,1361,1363,1366,1368,1370,1372,1375,1377],{"class":897,"line":1360},8,[895,1362,1241],{"class":1240},[895,1364,1365],{"class":1244},"FullUrl",[895,1367,1248],{"class":1240},[895,1369,1251],{"class":968},[895,1371,1272],{"class":919},[895,1373,1374],{"class":923},"app.example.com\u002Fapi\u002Fprofile",[895,1376,1248],{"class":919},[895,1378,1258],{"class":905},[895,1380,1382,1384,1387,1389,1391,1393,1396,1398],{"class":897,"line":1381},9,[895,1383,1241],{"class":1240},[895,1385,1386],{"class":1244},"fingerPrints",[895,1388,1248],{"class":1240},[895,1390,1251],{"class":968},[895,1392,1272],{"class":919},[895,1394,1395],{"class":923},"...",[895,1397,1248],{"class":919},[895,1399,1258],{"class":905},[895,1401,1403,1405,1408,1410,1412,1414,1417,1419],{"class":897,"line":1402},10,[895,1404,1241],{"class":1240},[895,1406,1407],{"class":1244},"referrer",[895,1409,1248],{"class":1240},[895,1411,1251],{"class":968},[895,1413,1272],{"class":919},[895,1415,1416],{"class":923},"https:\u002F\u002Fapp.example.com\u002F",[895,1418,1248],{"class":919},[895,1420,1258],{"class":905},[895,1422,1424,1426,1429,1431,1433],{"class":897,"line":1423},11,[895,1425,1241],{"class":1240},[895,1427,1428],{"class":1244},"httpRequest",[895,1430,1248],{"class":1240},[895,1432,1251],{"class":968},[895,1434,1435],{"class":905}," {\n",[895,1437,1439,1442,1445,1447,1449,1451,1454,1456],{"class":897,"line":1438},12,[895,1440,1441],{"class":1240},"    \"",[895,1443,1444],{"class":1244},"method",[895,1446,1248],{"class":1240},[895,1448,1251],{"class":968},[895,1450,1272],{"class":919},[895,1452,1453],{"class":923},"POST",[895,1455,1248],{"class":919},[895,1457,1258],{"class":905},[895,1459,1461,1463,1466,1468,1470,1472,1475,1477],{"class":897,"line":1460},13,[895,1462,1441],{"class":1240},[895,1464,1465],{"class":1244},"url",[895,1467,1248],{"class":1240},[895,1469,1251],{"class":968},[895,1471,1272],{"class":919},[895,1473,1474],{"class":923},"\u002Fapi\u002Fprofile",[895,1476,1248],{"class":919},[895,1478,1258],{"class":905},[895,1480,1482,1484,1487,1489,1491,1493,1495,1497],{"class":897,"line":1481},14,[895,1483,1441],{"class":1240},[895,1485,1486],{"class":1244},"headers",[895,1488,1248],{"class":1240},[895,1490,1251],{"class":968},[895,1492,1272],{"class":919},[895,1494,1113],{"class":923},[895,1496,1248],{"class":919},[895,1498,1258],{"class":905},[895,1500,1502,1504,1507,1509,1511,1513,1515],{"class":897,"line":1501},15,[895,1503,1441],{"class":1240},[895,1505,1506],{"class":1244},"remoteAddress",[895,1508,1248],{"class":1240},[895,1510,1251],{"class":968},[895,1512,1272],{"class":919},[895,1514,1332],{"class":923},[895,1516,1517],{"class":919},"\"\n",[895,1519,1521],{"class":897,"line":1520},16,[895,1522,1523],{"class":905},"  },\n",[895,1525,1527,1529,1532,1534,1536,1538,1541],{"class":897,"line":1526},17,[895,1528,1241],{"class":1240},[895,1530,1531],{"class":1244},"msg",[895,1533,1248],{"class":1240},[895,1535,1251],{"class":968},[895,1537,1272],{"class":919},[895,1539,1540],{"class":923},"request start",[895,1542,1517],{"class":919},[895,1544,1546],{"class":897,"line":1545},18,[895,1547,1548],{"class":905},"}\n",[848,1550,1551,1552,1555,1556,1559,1560,869,1563,869,1566,869,1569,869,1572,873,1575,1578,1579,1559,1582,869,1585,869,1587,869,1590,869,1593,869,1596,873,1599,1062],{},"The response entry adds ",[862,1553,1554],{},"latencyMS"," and an ",[862,1557,1558],{},"httpResponse"," block with ",[862,1561,1562],{},"statusCode",[862,1564,1565],{},"statusText",[862,1567,1568],{},"resHeaders",[862,1570,1571],{},"contentType",[862,1573,1574],{},"contentLength",[862,1576,1577],{},"type",". Error entries use an ",[862,1580,1581],{},"httpError",[862,1583,1584],{},"status",[862,1586,1565],{},[862,1588,1589],{},"body",[862,1591,1592],{},"data",[862,1594,1595],{},"name",[862,1597,1598],{},"message",[862,1600,1601],{},"stack",[848,1603,1604,1605,1608,1609,1611],{},"The ",[862,1606,1607],{},"authorization"," header and all cookies are redacted to ",[862,1610,1113],{}," before the entry is written.",[924,1613,1615],{"id":1614},"skipped-paths","Skipped paths",[848,1617,1618,1619,869,1622,869,1625,869,1628,869,1631,869,1634,869,1637,869,1640,869,1643,869,1646,869,1649,1652,1653,1656],{},"The logger skips static asset paths (",[862,1620,1621],{},".css",[862,1623,1624],{},".js",[862,1626,1627],{},".png",[862,1629,1630],{},".jpg",[862,1632,1633],{},".svg",[862,1635,1636],{},".ico",[862,1638,1639],{},".woff",[862,1641,1642],{},".ttf",[862,1644,1645],{},".webp",[862,1647,1648],{},".json",[862,1650,1651],{},".map",") and ",[862,1654,1655],{},"\u002F.well-known\u002F"," paths to avoid noise in the log output.",[852,1658],{},[855,1660,1662],{"id":1661},"getlogger",[862,1663,1664],{},"getLogger",[848,1666,1667,1669],{},[862,1668,1206],{}," returns the pino logger instance used internally by the module. Use it in custom handlers to write structured log entries in the same format as module logs.",[885,1671,1674],{"className":887,"code":1672,"filename":1673,"language":890,"meta":891,"style":891},"export default defineAuthenticatedEventHandler(async (event) => {\n  const log = getLogger().child({ service: 'profile', route: '\u002Fapi\u002Fprofile' })\n\n  const { userId } = event.context.authorizedData\n  log.info({ userId }, 'Fetching profile')\n\n  return await getProfile(userId)\n})\n","server\u002Fapi\u002Fprofile.get.ts",[862,1675,1676,1707,1759,1763,1790,1815,1819,1836],{"__ignoreMap":891},[895,1677,1678,1681,1684,1687,1689,1692,1695,1699,1702,1705],{"class":897,"line":898},[895,1679,1680],{"class":901},"export",[895,1682,1683],{"class":901}," default",[895,1685,1686],{"class":972}," defineAuthenticatedEventHandler",[895,1688,1068],{"class":905},[895,1690,1691],{"class":960},"async",[895,1693,1694],{"class":905}," (",[895,1696,1698],{"class":1697},"sygFZ","event",[895,1700,1701],{"class":905},") ",[895,1703,1704],{"class":960},"=>",[895,1706,1435],{"class":905},[895,1708,1709,1712,1715,1717,1720,1723,1726,1729,1732,1735,1737,1740,1743,1745,1748,1750,1752,1754,1756],{"class":897,"line":930},[895,1710,1711],{"class":960},"  const",[895,1713,1714],{"class":964}," log",[895,1716,969],{"class":968},[895,1718,1719],{"class":972}," getLogger",[895,1721,1722],{"class":905},"().",[895,1724,1725],{"class":972},"child",[895,1727,1728],{"class":905},"({ ",[895,1730,1731],{"class":909},"service",[895,1733,1251],{"class":1734},"s34zl",[895,1736,920],{"class":919},[895,1738,1739],{"class":923},"profile",[895,1741,1742],{"class":919},"'",[895,1744,869],{"class":905},[895,1746,1747],{"class":909},"route",[895,1749,1251],{"class":1734},[895,1751,920],{"class":919},[895,1753,1474],{"class":923},[895,1755,1742],{"class":919},[895,1757,1758],{"class":905}," })\n",[895,1760,1761],{"class":897,"line":951},[895,1762,954],{"emptyLinePlaceholder":8},[895,1764,1765,1767,1769,1772,1774,1777,1780,1782,1785,1787],{"class":897,"line":957},[895,1766,1711],{"class":960},[895,1768,906],{"class":905},[895,1770,1771],{"class":964},"userId",[895,1773,913],{"class":905},[895,1775,1776],{"class":968},"=",[895,1778,1779],{"class":909}," event",[895,1781,1062],{"class":905},[895,1783,1784],{"class":909},"context",[895,1786,1062],{"class":905},[895,1788,1789],{"class":909},"authorizedData\n",[895,1791,1792,1795,1797,1799,1801,1803,1806,1808,1811,1813],{"class":897,"line":979},[895,1793,1794],{"class":909},"  log",[895,1796,1062],{"class":905},[895,1798,1180],{"class":972},[895,1800,1728],{"class":905},[895,1802,1771],{"class":909},[895,1804,1805],{"class":905}," }, ",[895,1807,1742],{"class":919},[895,1809,1810],{"class":923},"Fetching profile",[895,1812,1742],{"class":919},[895,1814,990],{"class":905},[895,1816,1817],{"class":897,"line":1318},[895,1818,954],{"emptyLinePlaceholder":8},[895,1820,1821,1824,1827,1830,1832,1834],{"class":897,"line":1339},[895,1822,1823],{"class":901},"  return",[895,1825,1826],{"class":901}," await",[895,1828,1829],{"class":972}," getProfile",[895,1831,1068],{"class":905},[895,1833,1771],{"class":909},[895,1835,990],{"class":905},[895,1837,1838],{"class":897,"line":1360},[895,1839,1840],{"class":905},"})\n",[848,1842,1843,1844,1846],{},"Child loggers inherit the parent log level and transport, and add the fields from the ",[862,1845,1725],{}," bindings to every entry they produce.",[848,1848,1849,1850,1852,1853,1855,1856,1859,1860,1863,1864,1867,1868,1870],{},"Output is written to three files under the ",[862,1851,1194],{}," directory at the nearest ",[862,1854,1198],{}," root relative to the process working directory: ",[862,1857,1858],{},"info.log"," (info and above), ",[862,1861,1862],{},"warn.log"," (warn and above), and ",[862,1865,1866],{},"errors.log"," (error and above). Set ",[862,1869,1202],{}," to write to a different path.",[852,1872],{},[855,1874,1876],{"id":1875},"log-levels","Log levels",[848,1878,1604,1879,1881,1882,1884],{},[862,1880,1210],{}," field in the configuration controls the minimum severity level emitted by ",[862,1883,1206],{},". Available levels:",[1132,1886,1887,1896],{},[1135,1888,1889],{},[1138,1890,1891,1893],{},[1141,1892,1146],{},[1141,1894,1895],{},"When to use",[1148,1897,1898,1908,1917,1926,1935],{},[1138,1899,1900,1905],{},[1153,1901,1902],{},[862,1903,1904],{},"debug",[1153,1906,1907],{},"Development. Logs every internal step including token checks and cache hits",[1138,1909,1910,1914],{},[1153,1911,1912],{},[862,1913,1180],{},[1153,1915,1916],{},"Default. Logs route executions, token rotations, and key authentication events",[1138,1918,1919,1923],{},[1153,1920,1921],{},[862,1922,1170],{},[1153,1924,1925],{},"Logs only potential issues such as rate limits, MFA challenges, and bot flags",[1138,1927,1928,1932],{},[1153,1929,1930],{},[862,1931,1160],{},[1153,1933,1934],{},"Logs errors only",[1138,1936,1937,1942],{},[1153,1938,1939],{},[862,1940,1941],{},"fatal",[1153,1943,1944],{},"Logs only unrecoverable failures",[848,1946,1947,1948,1951,1952,1954,1955,1957],{},"Set ",[862,1949,1950],{},"logLevel: 'debug'"," during development to see the full authentication flow. Use ",[862,1953,1180],{}," or ",[862,1956,1170],{}," in production.",[1959,1960,1961],"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 .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 .sakC6, html code.shiki .sakC6{--shiki-light:#0000FF;--shiki-light-font-weight:inherit;--shiki-default:#0000FF;--shiki-default-font-weight:inherit;--shiki-dark:#FF79C6;--shiki-dark-font-weight:bold}html pre.shiki code .saJyd, html code.shiki .saJyd{--shiki-light:#0451A5;--shiki-default:#0451A5;--shiki-dark:#8BE9FE}html pre.shiki code .s_W10, html code.shiki .s_W10{--shiki-light:#0451A5;--shiki-default:#0451A5;--shiki-dark:#8BE9FD}html pre.shiki code .spgvN, html code.shiki .spgvN{--shiki-light:#098658;--shiki-default:#098658;--shiki-dark:#BD93F9}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":891,"searchDepth":930,"depth":930,"links":1963},[1964,1971,1972],{"id":857,"depth":930,"text":858,"children":1965},[1966,1967,1968,1969,1970],{"id":1076,"depth":951,"text":1077},{"id":1126,"depth":951,"text":1127},{"id":1183,"depth":951,"text":1184},{"id":1214,"depth":951,"text":1215},{"id":1614,"depth":951,"text":1615},{"id":1661,"depth":930,"text":1664},{"id":1875,"depth":930,"text":1876},"The HTTP request logger middleware and the pino logger instance used by all module internals, including registration, output format, redaction, and log levels.","md","i-lucide-terminal",{},null,"---\ntitle: Logging\ndescription: The HTTP request logger middleware and the pino logger instance used by all module internals, including registration, output format, redaction, and log levels.\nicon: i-lucide-terminal\n---\n\nThe module ships two logging mechanisms: a structured HTTP request logger, and a pino logger instance used by all internal operations. Both are available for use in your own handlers.\n\n---\n\n## HTTP logger\n\n`httpLogger()` is an H3 plugin that attaches structured request and response logging to your app. It hooks into `onRequest`, `onResponse`, and `onError` to capture the full lifecycle of every request.\n\nRegister it during startup. When using the Nuxt module, registration happens automatically.\n\n::code-group\n\n```ts [H3 v1]\nimport { createApp } from 'h3'\nimport { httpLogger } from 'auth-h3client\u002Fv1'\n\nconst app = createApp()\nhttpLogger()(app)\n```\n\n```ts [H3 v2]\nimport { H3 } from 'h3'\nimport { httpLogger } from 'auth-h3client\u002Fv2'\n\nconst app = new H3()\napp.register(httpLogger())\n```\n\n::\n\n### Logs output\n\nOn each request, the logger records:\n\n- Request ID (`x-request-id`): read from the incoming header if present, otherwise a random UUID. Set on the response and stored on `event.context.rid` for use by other middleware and handlers.\n- Method, URL path, query string, and full host URL\n- Client IP address and User-Agent\n- Request fingerprint via `getRequestFingerprint`\n- All request headers and cookies (both redacted to `[SECRET]` in the log output)\n- Referrer\n\nOn each response, it records the status code, response headers, content type, content length, and latency in milliseconds.\n\nOn errors, it records the status, error name, message, stack trace, and error body.\n\n### Log level selection\n\nThe HTTP logger selects the level for each response automatically:\n\n| Status range | Level |\n|---|---|\n| 5xx or error context | `error` |\n| 4xx | `warn` |\n| 2xx \u002F 3xx | `info` |\n\n### Output destination\n\nLog output is written to `logs\u002Fhttp.log` as newline-delimited JSON using a pino file transport. The `logs\u002F` directory is created automatically at the nearest `package.json` root relative to the process working directory. Set the `CLIENT_LOG_DIR` environment variable to write logs to a different path. This logger is separate from the general `getLogger()` instance, but its minimum level is controlled by the same `logLevel` configuration field.\n\n### Log entry shape\n\nEach request produces an entry at `onRequest` and a second entry at `onResponse`. The structure looks like:\n\n```json\n{\n  \"level\": 30,\n  \"time\": \"2026-04-12T10:00:00.000Z\",\n  \"uptime\": 120.5,\n  \"requestId\": \"a1b2c3d4-...\",\n  \"ip\": \"1.2.3.4\",\n  \"userAgent\": \"Mozilla\u002F5.0 ...\",\n  \"FullUrl\": \"app.example.com\u002Fapi\u002Fprofile\",\n  \"fingerPrints\": \"...\",\n  \"referrer\": \"https:\u002F\u002Fapp.example.com\u002F\",\n  \"httpRequest\": {\n    \"method\": \"POST\",\n    \"url\": \"\u002Fapi\u002Fprofile\",\n    \"headers\": \"[SECRET]\",\n    \"remoteAddress\": \"1.2.3.4\"\n  },\n  \"msg\": \"request start\"\n}\n```\n\nThe response entry adds `latencyMS` and an `httpResponse` block with `statusCode`, `statusText`, `resHeaders`, `contentType`, `contentLength`, and `type`. Error entries use an `httpError` block with `status`, `statusText`, `body`, `data`, `name`, `message`, and `stack`.\n\nThe `authorization` header and all cookies are redacted to `[SECRET]` before the entry is written.\n\n### Skipped paths\n\nThe logger skips static asset paths (`.css`, `.js`, `.png`, `.jpg`, `.svg`, `.ico`, `.woff`, `.ttf`, `.webp`, `.json`, `.map`) and `\u002F.well-known\u002F` paths to avoid noise in the log output.\n\n---\n\n## `getLogger`\n\n`getLogger()` returns the pino logger instance used internally by the module. Use it in custom handlers to write structured log entries in the same format as module logs.\n\n```ts [server\u002Fapi\u002Fprofile.get.ts]\nexport default defineAuthenticatedEventHandler(async (event) => {\n  const log = getLogger().child({ service: 'profile', route: '\u002Fapi\u002Fprofile' })\n\n  const { userId } = event.context.authorizedData\n  log.info({ userId }, 'Fetching profile')\n\n  return await getProfile(userId)\n})\n```\n\nChild loggers inherit the parent log level and transport, and add the fields from the `child` bindings to every entry they produce.\n\nOutput is written to three files under the `logs\u002F` directory at the nearest `package.json` root relative to the process working directory: `info.log` (info and above), `warn.log` (warn and above), and `errors.log` (error and above). Set `CLIENT_LOG_DIR` to write to a different path.\n\n---\n\n## Log levels\n\nThe `logLevel` field in the configuration controls the minimum severity level emitted by `getLogger()`. Available levels:\n\n| Level | When to use |\n|---|---|\n| `debug` | Development. Logs every internal step including token checks and cache hits |\n| `info` | Default. Logs route executions, token rotations, and key authentication events |\n| `warn` | Logs only potential issues such as rate limits, MFA challenges, and bot flags |\n| `error` | Logs errors only |\n| `fatal` | Logs only unrecoverable failures |\n\nSet `logLevel: 'debug'` during development to see the full authentication flow. Use `info` or `warn` in production.",{"title":116,"description":1973},"iPAPvaWjMkxcMbSTFmgTUEuhteodaAGFeeeOoZ_uzS4",[1982,1983],{"title":112,"path":113,"stem":114,"children":-1},{"title":120,"path":121,"stem":122,"children":-1},{"id":843,"title":116,"body":1985,"description":1973,"extension":1974,"icon":1975,"meta":2822,"module":1977,"navigation":8,"path":117,"rawbody":1978,"seo":2823,"stem":118,"__hash__":1980},{"type":845,"value":1986,"toc":2811},[1987,1989,1991,1993,2003,2005,2145,2147,2149,2171,2173,2175,2177,2179,2215,2217,2231,2233,2239,2507,2541,2547,2549,2575,2577,2581,2585,2721,2725,2739,2741,2743,2749,2801,2809],[848,1988,850],{},[852,1990],{},[855,1992,858],{"id":857},[848,1994,1995,865,1997,869,1999,873,2001,877],{},[862,1996,864],{},[862,1998,868],{},[862,2000,872],{},[862,2002,876],{},[848,2004,880],{},[882,2006,2007,2073],{},[885,2008,2009],{"className":887,"code":888,"filename":889,"language":890,"meta":891,"style":891},[862,2010,2011,2029,2047,2051,2063],{"__ignoreMap":891},[895,2012,2013,2015,2017,2019,2021,2023,2025,2027],{"class":897,"line":898},[895,2014,902],{"class":901},[895,2016,906],{"class":905},[895,2018,910],{"class":909},[895,2020,913],{"class":905},[895,2022,916],{"class":901},[895,2024,920],{"class":919},[895,2026,924],{"class":923},[895,2028,927],{"class":919},[895,2030,2031,2033,2035,2037,2039,2041,2043,2045],{"class":897,"line":930},[895,2032,902],{"class":901},[895,2034,906],{"class":905},[895,2036,937],{"class":909},[895,2038,913],{"class":905},[895,2040,916],{"class":901},[895,2042,920],{"class":919},[895,2044,946],{"class":923},[895,2046,927],{"class":919},[895,2048,2049],{"class":897,"line":951},[895,2050,954],{"emptyLinePlaceholder":8},[895,2052,2053,2055,2057,2059,2061],{"class":897,"line":957},[895,2054,961],{"class":960},[895,2056,965],{"class":964},[895,2058,969],{"class":968},[895,2060,973],{"class":972},[895,2062,976],{"class":905},[895,2064,2065,2067,2069,2071],{"class":897,"line":979},[895,2066,937],{"class":972},[895,2068,984],{"class":905},[895,2070,987],{"class":909},[895,2072,990],{"class":905},[885,2074,2075],{"className":887,"code":993,"filename":994,"language":890,"meta":891,"style":891},[862,2076,2077,2095,2113,2117,2131],{"__ignoreMap":891},[895,2078,2079,2081,2083,2085,2087,2089,2091,2093],{"class":897,"line":898},[895,2080,902],{"class":901},[895,2082,906],{"class":905},[895,2084,1005],{"class":909},[895,2086,913],{"class":905},[895,2088,916],{"class":901},[895,2090,920],{"class":919},[895,2092,924],{"class":923},[895,2094,927],{"class":919},[895,2096,2097,2099,2101,2103,2105,2107,2109,2111],{"class":897,"line":930},[895,2098,902],{"class":901},[895,2100,906],{"class":905},[895,2102,937],{"class":909},[895,2104,913],{"class":905},[895,2106,916],{"class":901},[895,2108,920],{"class":919},[895,2110,1032],{"class":923},[895,2112,927],{"class":919},[895,2114,2115],{"class":897,"line":951},[895,2116,954],{"emptyLinePlaceholder":8},[895,2118,2119,2121,2123,2125,2127,2129],{"class":897,"line":957},[895,2120,961],{"class":960},[895,2122,965],{"class":964},[895,2124,969],{"class":968},[895,2126,1050],{"class":1049},[895,2128,1053],{"class":972},[895,2130,976],{"class":905},[895,2132,2133,2135,2137,2139,2141,2143],{"class":897,"line":979},[895,2134,987],{"class":909},[895,2136,1062],{"class":905},[895,2138,1065],{"class":972},[895,2140,1068],{"class":905},[895,2142,937],{"class":972},[895,2144,1073],{"class":905},[924,2146,1077],{"id":1076},[848,2148,1080],{},[1082,2150,2151,2157,2159,2161,2165,2169],{},[1085,2152,1087,2153,1091,2155,1095],{},[862,2154,1090],{},[862,2156,1094],{},[1085,2158,1098],{},[1085,2160,1101],{},[1085,2162,1104,2163],{},[862,2164,1107],{},[1085,2166,1110,2167,1114],{},[862,2168,1113],{},[1085,2170,1117],{},[848,2172,1120],{},[848,2174,1123],{},[924,2176,1127],{"id":1126},[848,2178,1130],{},[1132,2180,2181,2189],{},[1135,2182,2183],{},[1138,2184,2185,2187],{},[1141,2186,1143],{},[1141,2188,1146],{},[1148,2190,2191,2199,2207],{},[1138,2192,2193,2195],{},[1153,2194,1155],{},[1153,2196,2197],{},[862,2198,1160],{},[1138,2200,2201,2203],{},[1153,2202,1165],{},[1153,2204,2205],{},[862,2206,1170],{},[1138,2208,2209,2211],{},[1153,2210,1175],{},[1153,2212,2213],{},[862,2214,1180],{},[924,2216,1184],{"id":1183},[848,2218,1187,2219,1191,2221,1195,2223,1199,2225,1203,2227,1207,2229,1211],{},[862,2220,1190],{},[862,2222,1194],{},[862,2224,1198],{},[862,2226,1202],{},[862,2228,1206],{},[862,2230,1210],{},[924,2232,1215],{"id":1214},[848,2234,1218,2235,1221,2237,1224],{},[862,2236,868],{},[862,2238,872],{},[885,2240,2241],{"className":1227,"code":1228,"language":5,"meta":891,"style":891},[862,2242,2243,2247,2261,2279,2293,2311,2329,2347,2365,2383,2401,2413,2431,2449,2467,2483,2487,2503],{"__ignoreMap":891},[895,2244,2245],{"class":897,"line":898},[895,2246,1235],{"class":905},[895,2248,2249,2251,2253,2255,2257,2259],{"class":897,"line":930},[895,2250,1241],{"class":1240},[895,2252,1245],{"class":1244},[895,2254,1248],{"class":1240},[895,2256,1251],{"class":968},[895,2258,1255],{"class":1254},[895,2260,1258],{"class":905},[895,2262,2263,2265,2267,2269,2271,2273,2275,2277],{"class":897,"line":951},[895,2264,1241],{"class":1240},[895,2266,1265],{"class":1244},[895,2268,1248],{"class":1240},[895,2270,1251],{"class":968},[895,2272,1272],{"class":919},[895,2274,1275],{"class":923},[895,2276,1248],{"class":919},[895,2278,1258],{"class":905},[895,2280,2281,2283,2285,2287,2289,2291],{"class":897,"line":957},[895,2282,1241],{"class":1240},[895,2284,1286],{"class":1244},[895,2286,1248],{"class":1240},[895,2288,1251],{"class":968},[895,2290,1293],{"class":1254},[895,2292,1258],{"class":905},[895,2294,2295,2297,2299,2301,2303,2305,2307,2309],{"class":897,"line":979},[895,2296,1241],{"class":1240},[895,2298,1302],{"class":1244},[895,2300,1248],{"class":1240},[895,2302,1251],{"class":968},[895,2304,1272],{"class":919},[895,2306,1311],{"class":923},[895,2308,1248],{"class":919},[895,2310,1258],{"class":905},[895,2312,2313,2315,2317,2319,2321,2323,2325,2327],{"class":897,"line":1318},[895,2314,1241],{"class":1240},[895,2316,1323],{"class":1244},[895,2318,1248],{"class":1240},[895,2320,1251],{"class":968},[895,2322,1272],{"class":919},[895,2324,1332],{"class":923},[895,2326,1248],{"class":919},[895,2328,1258],{"class":905},[895,2330,2331,2333,2335,2337,2339,2341,2343,2345],{"class":897,"line":1339},[895,2332,1241],{"class":1240},[895,2334,1344],{"class":1244},[895,2336,1248],{"class":1240},[895,2338,1251],{"class":968},[895,2340,1272],{"class":919},[895,2342,1353],{"class":923},[895,2344,1248],{"class":919},[895,2346,1258],{"class":905},[895,2348,2349,2351,2353,2355,2357,2359,2361,2363],{"class":897,"line":1360},[895,2350,1241],{"class":1240},[895,2352,1365],{"class":1244},[895,2354,1248],{"class":1240},[895,2356,1251],{"class":968},[895,2358,1272],{"class":919},[895,2360,1374],{"class":923},[895,2362,1248],{"class":919},[895,2364,1258],{"class":905},[895,2366,2367,2369,2371,2373,2375,2377,2379,2381],{"class":897,"line":1381},[895,2368,1241],{"class":1240},[895,2370,1386],{"class":1244},[895,2372,1248],{"class":1240},[895,2374,1251],{"class":968},[895,2376,1272],{"class":919},[895,2378,1395],{"class":923},[895,2380,1248],{"class":919},[895,2382,1258],{"class":905},[895,2384,2385,2387,2389,2391,2393,2395,2397,2399],{"class":897,"line":1402},[895,2386,1241],{"class":1240},[895,2388,1407],{"class":1244},[895,2390,1248],{"class":1240},[895,2392,1251],{"class":968},[895,2394,1272],{"class":919},[895,2396,1416],{"class":923},[895,2398,1248],{"class":919},[895,2400,1258],{"class":905},[895,2402,2403,2405,2407,2409,2411],{"class":897,"line":1423},[895,2404,1241],{"class":1240},[895,2406,1428],{"class":1244},[895,2408,1248],{"class":1240},[895,2410,1251],{"class":968},[895,2412,1435],{"class":905},[895,2414,2415,2417,2419,2421,2423,2425,2427,2429],{"class":897,"line":1438},[895,2416,1441],{"class":1240},[895,2418,1444],{"class":1244},[895,2420,1248],{"class":1240},[895,2422,1251],{"class":968},[895,2424,1272],{"class":919},[895,2426,1453],{"class":923},[895,2428,1248],{"class":919},[895,2430,1258],{"class":905},[895,2432,2433,2435,2437,2439,2441,2443,2445,2447],{"class":897,"line":1460},[895,2434,1441],{"class":1240},[895,2436,1465],{"class":1244},[895,2438,1248],{"class":1240},[895,2440,1251],{"class":968},[895,2442,1272],{"class":919},[895,2444,1474],{"class":923},[895,2446,1248],{"class":919},[895,2448,1258],{"class":905},[895,2450,2451,2453,2455,2457,2459,2461,2463,2465],{"class":897,"line":1481},[895,2452,1441],{"class":1240},[895,2454,1486],{"class":1244},[895,2456,1248],{"class":1240},[895,2458,1251],{"class":968},[895,2460,1272],{"class":919},[895,2462,1113],{"class":923},[895,2464,1248],{"class":919},[895,2466,1258],{"class":905},[895,2468,2469,2471,2473,2475,2477,2479,2481],{"class":897,"line":1501},[895,2470,1441],{"class":1240},[895,2472,1506],{"class":1244},[895,2474,1248],{"class":1240},[895,2476,1251],{"class":968},[895,2478,1272],{"class":919},[895,2480,1332],{"class":923},[895,2482,1517],{"class":919},[895,2484,2485],{"class":897,"line":1520},[895,2486,1523],{"class":905},[895,2488,2489,2491,2493,2495,2497,2499,2501],{"class":897,"line":1526},[895,2490,1241],{"class":1240},[895,2492,1531],{"class":1244},[895,2494,1248],{"class":1240},[895,2496,1251],{"class":968},[895,2498,1272],{"class":919},[895,2500,1540],{"class":923},[895,2502,1517],{"class":919},[895,2504,2505],{"class":897,"line":1545},[895,2506,1548],{"class":905},[848,2508,1551,2509,1555,2511,1559,2513,869,2515,869,2517,869,2519,869,2521,873,2523,1578,2525,1559,2527,869,2529,869,2531,869,2533,869,2535,869,2537,873,2539,1062],{},[862,2510,1554],{},[862,2512,1558],{},[862,2514,1562],{},[862,2516,1565],{},[862,2518,1568],{},[862,2520,1571],{},[862,2522,1574],{},[862,2524,1577],{},[862,2526,1581],{},[862,2528,1584],{},[862,2530,1565],{},[862,2532,1589],{},[862,2534,1592],{},[862,2536,1595],{},[862,2538,1598],{},[862,2540,1601],{},[848,2542,1604,2543,1608,2545,1611],{},[862,2544,1607],{},[862,2546,1113],{},[924,2548,1615],{"id":1614},[848,2550,1618,2551,869,2553,869,2555,869,2557,869,2559,869,2561,869,2563,869,2565,869,2567,869,2569,869,2571,1652,2573,1656],{},[862,2552,1621],{},[862,2554,1624],{},[862,2556,1627],{},[862,2558,1630],{},[862,2560,1633],{},[862,2562,1636],{},[862,2564,1639],{},[862,2566,1642],{},[862,2568,1645],{},[862,2570,1648],{},[862,2572,1651],{},[862,2574,1655],{},[852,2576],{},[855,2578,2579],{"id":1661},[862,2580,1664],{},[848,2582,2583,1669],{},[862,2584,1206],{},[885,2586,2587],{"className":887,"code":1672,"filename":1673,"language":890,"meta":891,"style":891},[862,2588,2589,2611,2651,2655,2677,2699,2703,2717],{"__ignoreMap":891},[895,2590,2591,2593,2595,2597,2599,2601,2603,2605,2607,2609],{"class":897,"line":898},[895,2592,1680],{"class":901},[895,2594,1683],{"class":901},[895,2596,1686],{"class":972},[895,2598,1068],{"class":905},[895,2600,1691],{"class":960},[895,2602,1694],{"class":905},[895,2604,1698],{"class":1697},[895,2606,1701],{"class":905},[895,2608,1704],{"class":960},[895,2610,1435],{"class":905},[895,2612,2613,2615,2617,2619,2621,2623,2625,2627,2629,2631,2633,2635,2637,2639,2641,2643,2645,2647,2649],{"class":897,"line":930},[895,2614,1711],{"class":960},[895,2616,1714],{"class":964},[895,2618,969],{"class":968},[895,2620,1719],{"class":972},[895,2622,1722],{"class":905},[895,2624,1725],{"class":972},[895,2626,1728],{"class":905},[895,2628,1731],{"class":909},[895,2630,1251],{"class":1734},[895,2632,920],{"class":919},[895,2634,1739],{"class":923},[895,2636,1742],{"class":919},[895,2638,869],{"class":905},[895,2640,1747],{"class":909},[895,2642,1251],{"class":1734},[895,2644,920],{"class":919},[895,2646,1474],{"class":923},[895,2648,1742],{"class":919},[895,2650,1758],{"class":905},[895,2652,2653],{"class":897,"line":951},[895,2654,954],{"emptyLinePlaceholder":8},[895,2656,2657,2659,2661,2663,2665,2667,2669,2671,2673,2675],{"class":897,"line":957},[895,2658,1711],{"class":960},[895,2660,906],{"class":905},[895,2662,1771],{"class":964},[895,2664,913],{"class":905},[895,2666,1776],{"class":968},[895,2668,1779],{"class":909},[895,2670,1062],{"class":905},[895,2672,1784],{"class":909},[895,2674,1062],{"class":905},[895,2676,1789],{"class":909},[895,2678,2679,2681,2683,2685,2687,2689,2691,2693,2695,2697],{"class":897,"line":979},[895,2680,1794],{"class":909},[895,2682,1062],{"class":905},[895,2684,1180],{"class":972},[895,2686,1728],{"class":905},[895,2688,1771],{"class":909},[895,2690,1805],{"class":905},[895,2692,1742],{"class":919},[895,2694,1810],{"class":923},[895,2696,1742],{"class":919},[895,2698,990],{"class":905},[895,2700,2701],{"class":897,"line":1318},[895,2702,954],{"emptyLinePlaceholder":8},[895,2704,2705,2707,2709,2711,2713,2715],{"class":897,"line":1339},[895,2706,1823],{"class":901},[895,2708,1826],{"class":901},[895,2710,1829],{"class":972},[895,2712,1068],{"class":905},[895,2714,1771],{"class":909},[895,2716,990],{"class":905},[895,2718,2719],{"class":897,"line":1360},[895,2720,1840],{"class":905},[848,2722,1843,2723,1846],{},[862,2724,1725],{},[848,2726,1849,2727,1852,2729,1855,2731,1859,2733,1863,2735,1867,2737,1870],{},[862,2728,1194],{},[862,2730,1198],{},[862,2732,1858],{},[862,2734,1862],{},[862,2736,1866],{},[862,2738,1202],{},[852,2740],{},[855,2742,1876],{"id":1875},[848,2744,1604,2745,1881,2747,1884],{},[862,2746,1210],{},[862,2748,1206],{},[1132,2750,2751,2759],{},[1135,2752,2753],{},[1138,2754,2755,2757],{},[1141,2756,1146],{},[1141,2758,1895],{},[1148,2760,2761,2769,2777,2785,2793],{},[1138,2762,2763,2767],{},[1153,2764,2765],{},[862,2766,1904],{},[1153,2768,1907],{},[1138,2770,2771,2775],{},[1153,2772,2773],{},[862,2774,1180],{},[1153,2776,1916],{},[1138,2778,2779,2783],{},[1153,2780,2781],{},[862,2782,1170],{},[1153,2784,1925],{},[1138,2786,2787,2791],{},[1153,2788,2789],{},[862,2790,1160],{},[1153,2792,1934],{},[1138,2794,2795,2799],{},[1153,2796,2797],{},[862,2798,1941],{},[1153,2800,1944],{},[848,2802,1947,2803,1951,2805,1954,2807,1957],{},[862,2804,1950],{},[862,2806,1180],{},[862,2808,1170],{},[1959,2810,1961],{},{"title":891,"searchDepth":930,"depth":930,"links":2812},[2813,2820,2821],{"id":857,"depth":930,"text":858,"children":2814},[2815,2816,2817,2818,2819],{"id":1076,"depth":951,"text":1077},{"id":1126,"depth":951,"text":1127},{"id":1183,"depth":951,"text":1184},{"id":1214,"depth":951,"text":1215},{"id":1614,"depth":951,"text":1615},{"id":1661,"depth":930,"text":1664},{"id":1875,"depth":930,"text":1876},{},{"title":116,"description":1973},1780436291404]