[{"data":1,"prerenderedAt":3220},["ShallowReactive",2],{"navLinks":3,"sidebar_docs_navigation_\u002Fdocs\u002Fauth-h3client":64,"navigation":217,"navLinks_footer":829,"\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcomposables_page":842,"\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcomposables_surround":2184,"\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcomposables":2187},{"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":210,"body":844,"description":2176,"extension":2177,"icon":2178,"meta":2179,"module":2180,"navigation":8,"path":211,"rawbody":2181,"seo":2182,"stem":212,"__hash__":2183},"docs\u002Fdocs\u002Fauth-h3client\u002F07.api\u002F02.composables.md",{"type":845,"value":846,"toc":2170},"minimark",[847,856,910,930,933,940,951,980,987,993,1043,1048,1122,1127,1221,1223,1229,1240,1261,1279,1283,1314,1321,1383,1387,1465,1467,1473,1479,1583,1587,1700,1704,1797,1812,1817,1978,1980,1985,2003,2009,2151,2166],[848,849,850,851,855],"p",{},"These functions ship from the ",[852,853,854],"code",{},"auth-h3client\u002Fclient"," entry point and run in the browser (or during Vue SSR) of any Nuxt or Vue application. When using the Nuxt module, they are auto-imported in components and pages. Outside the Nuxt module, import them explicitly:",[857,858,863],"pre",{"className":859,"code":860,"language":861,"meta":862,"style":862},"language-ts shiki shiki-themes light-plus light-plus dracula","import { useAuthData, useMagicLink, executeRequest, getCsrfToken } from 'auth-h3client\u002Fclient'\n","ts","",[852,864,865],{"__ignoreMap":862},[866,867,870,874,878,881,884,886,888,890,892,894,897,900,904,907],"span",{"class":868,"line":869},"line",1,[866,871,873],{"class":872},"sZ328","import",[866,875,877],{"class":876},"sDd4n"," { ",[866,879,152],{"class":880},"sjsA6",[866,882,883],{"class":876},", ",[866,885,156],{"class":880},[866,887,883],{"class":876},[866,889,160],{"class":880},[866,891,883],{"class":876},[866,893,164],{"class":880},[866,895,896],{"class":876}," } ",[866,898,899],{"class":872},"from",[866,901,903],{"class":902},"sFkSl"," '",[866,905,854],{"class":906},"sFB1V",[866,908,909],{"class":902},"'\n",[848,911,912,913,916,917,883,920,883,923,883,926,929],{},"The composables depend on ",[852,914,915],{},"nuxt\u002Fapp"," for SSR context composables (",[852,918,919],{},"useState",[852,921,922],{},"useRequestHeaders",[852,924,925],{},"useRequestEvent",[852,927,928],{},"useFetch","), so they require an application that provides those symbols.",[931,932],"hr",{},[934,935,937],"h2",{"id":936},"useauthdataauthstatusurl",[852,938,939],{},"useAuthData(authStatusUrl?)",[848,941,942,943,946,947,950],{},"Returns a reactive ",[852,944,945],{},"Ref\u003CAuthState>"," representing the current authentication state. Implements a singleton pattern using ",[852,948,949],{},"useState('auth')"," to prevent duplicate network requests during SSR and hydration.",[857,952,954],{"className":859,"code":953,"language":861,"meta":862,"style":862},"const auth = await useAuthData()\n",[852,955,956],{"__ignoreMap":862},[866,957,958,962,966,970,973,977],{"class":868,"line":869},[866,959,961],{"class":960},"sl46w","const",[866,963,965],{"class":964},"s3JHE"," auth",[866,967,969],{"class":968},"saOXh"," =",[866,971,972],{"class":872}," await",[866,974,976],{"class":975},"sHOzp"," useAuthData",[866,978,979],{"class":876},"()\n",[848,981,982,983,986],{},"On the server, it forwards all incoming request headers to the auth status endpoint and captures ",[852,984,985],{},"Set-Cookie"," response headers to forward them to the browser. On the client, it reuses the server-populated payload from the SSR hydration cache for the first call, then fetches fresh data on subsequent calls.",[848,988,989],{},[990,991,992],"strong",{},"Parameters",[994,995,996,1015],"table",{},[997,998,999],"thead",{},[1000,1001,1002,1006,1009,1012],"tr",{},[1003,1004,1005],"th",{},"Parameter",[1003,1007,1008],{},"Type",[1003,1010,1011],{},"Default",[1003,1013,1014],{},"Description",[1016,1017,1018],"tbody",{},[1000,1019,1020,1026,1031,1036],{},[1021,1022,1023],"td",{},[852,1024,1025],{},"authStatusUrl",[1021,1027,1028],{},[852,1029,1030],{},"string",[1021,1032,1033],{},[852,1034,1035],{},"'\u002Fapi\u002Fauth\u002Fusers\u002FauthStatus'",[1021,1037,1038,1039,1042],{},"Endpoint path for the auth status check when you use the Nuxt module. In manual H3 or Nitro setups, pass the path where you registered ",[852,1040,1041],{},"getAuthStatusHandler",".",[848,1044,1045],{},[990,1046,1047],{},"Return type",[857,1049,1051],{"className":859,"code":1050,"language":861,"meta":862,"style":862},"interface AuthState {\n  authorized: boolean\n  mfaRequired: boolean\n  id?: string       \u002F\u002F userId from the IAM response\n  message?: string  \u002F\u002F MFA challenge message when mfaRequired is true\n}\n",[852,1052,1053,1065,1077,1087,1103,1116],{"__ignoreMap":862},[866,1054,1055,1058,1062],{"class":868,"line":869},[866,1056,1057],{"class":960},"interface",[866,1059,1061],{"class":1060},"sFs1U"," AuthState",[866,1063,1064],{"class":876}," {\n",[866,1066,1068,1071,1074],{"class":868,"line":1067},2,[866,1069,1070],{"class":880},"  authorized",[866,1072,1073],{"class":968},":",[866,1075,1076],{"class":1060}," boolean\n",[866,1078,1080,1083,1085],{"class":868,"line":1079},3,[866,1081,1082],{"class":880},"  mfaRequired",[866,1084,1073],{"class":968},[866,1086,1076],{"class":1060},[866,1088,1090,1093,1096,1099],{"class":868,"line":1089},4,[866,1091,1092],{"class":880},"  id",[866,1094,1095],{"class":968},"?:",[866,1097,1098],{"class":1060}," string",[866,1100,1102],{"class":1101},"sghk6","       \u002F\u002F userId from the IAM response\n",[866,1104,1106,1109,1111,1113],{"class":868,"line":1105},5,[866,1107,1108],{"class":880},"  message",[866,1110,1095],{"class":968},[866,1112,1098],{"class":1060},[866,1114,1115],{"class":1101},"  \u002F\u002F MFA challenge message when mfaRequired is true\n",[866,1117,1119],{"class":868,"line":1118},6,[866,1120,1121],{"class":876},"}\n",[848,1123,1124],{},[990,1125,1126],{},"Status code handling",[994,1128,1129,1149],{},[997,1130,1131],{},[1000,1132,1133,1136,1141,1146],{},[1003,1134,1135],{},"Status",[1003,1137,1138],{},[852,1139,1140],{},"authorized",[1003,1142,1143],{},[852,1144,1145],{},"mfaRequired",[1003,1147,1148],{},"Notes",[1016,1150,1151,1169,1189,1205],{},[1000,1152,1153,1156,1161,1166],{},[1021,1154,1155],{},"200",[1021,1157,1158],{},[852,1159,1160],{},"true",[1021,1162,1163],{},[852,1164,1165],{},"false",[1021,1167,1168],{},"User is authenticated",[1000,1170,1171,1174,1178,1182],{},[1021,1172,1173],{},"202",[1021,1175,1176],{},[852,1177,1165],{},[1021,1179,1180],{},[852,1181,1160],{},[1021,1183,1184,1185,1188],{},"MFA challenge; ",[852,1186,1187],{},"message"," contains instructions",[1000,1190,1191,1194,1198,1202],{},[1021,1192,1193],{},"401",[1021,1195,1196],{},[852,1197,1165],{},[1021,1199,1200],{},[852,1201,1165],{},[1021,1203,1204],{},"Not authenticated",[1000,1206,1207,1210,1214,1218],{},[1021,1208,1209],{},"Any error",[1021,1211,1212],{},[852,1213,1165],{},[1021,1215,1216],{},[852,1217,1165],{},[1021,1219,1220],{},"Network or server error; fails silently",[931,1222],{},[934,1224,1226],{"id":1225},"usemagiclinkpath",[852,1227,1228],{},"useMagicLink(path?)",[848,1230,1231,1232,1235,1236,1239],{},"Reads magic link query parameters from the current route, validates that all required parameters are present, and calls the appropriate server API endpoint based on the ",[852,1233,1234],{},"reason"," parameter. See ",[1237,1238,142],"a",{"href":143}," for the full bounce-route integration.",[857,1241,1243],{"className":859,"code":1242,"language":861,"meta":862,"style":862},"const result = await useMagicLink()\n",[852,1244,1245],{"__ignoreMap":862},[866,1246,1247,1249,1252,1254,1256,1259],{"class":868,"line":869},[866,1248,961],{"class":960},[866,1250,1251],{"class":964}," result",[866,1253,969],{"class":968},[866,1255,972],{"class":872},[866,1257,1258],{"class":975}," useMagicLink",[866,1260,979],{"class":876},[848,1262,1263,1264,883,1267,883,1270,883,1272,1275,1276,1278],{},"Throws a Nuxt 404 error if any required query parameter (",[852,1265,1266],{},"random",[852,1268,1269],{},"token",[852,1271,1234],{},[852,1273,1274],{},"visitor",") is missing, if no API endpoint matches the ",[852,1277,1234],{},", or if the server returns an error.",[848,1280,1281],{},[990,1282,992],{},[994,1284,1285,1295],{},[997,1286,1287],{},[1000,1288,1289,1291,1293],{},[1003,1290,1005],{},[1003,1292,1008],{},[1003,1294,1014],{},[1016,1296,1297],{},[1000,1298,1299,1304,1308],{},[1021,1300,1301],{},[852,1302,1303],{},"path",[1021,1305,1306],{},[852,1307,1030],{},[1021,1309,1310,1311,1313],{},"Custom API endpoint for non-standard ",[852,1312,1234],{}," values",[848,1315,1316],{},[990,1317,1318,1319],{},"Routing by ",[852,1320,1234],{},[994,1322,1323,1335],{},[997,1324,1325],{},[1000,1326,1327,1332],{},[1003,1328,1329,1331],{},[852,1330,1234],{}," value",[1003,1333,1334],{},"Endpoint called",[1016,1336,1337,1349,1361,1373],{},[1000,1338,1339,1344],{},[1021,1340,1341],{},[852,1342,1343],{},"MAGIC_LINK_MFA_CHECKS",[1021,1345,1346],{},[852,1347,1348],{},"GET \u002Fapi\u002Fauth\u002Fverify-mfa",[1000,1350,1351,1356],{},[1021,1352,1353],{},[852,1354,1355],{},"PASSWORD_RESET",[1021,1357,1358],{},[852,1359,1360],{},"GET \u002Fapi\u002Fauth\u002Freset-password",[1000,1362,1363,1368],{},[1021,1364,1365],{},[852,1366,1367],{},"change_email",[1021,1369,1370],{},[852,1371,1372],{},"GET \u002Fapi\u002Fauth\u002Fupdate-email",[1000,1374,1375,1378],{},[1021,1376,1377],{},"Any other value",[1021,1379,1380,1382],{},[852,1381,1303],{}," argument",[848,1384,1385],{},[990,1386,1047],{},[857,1388,1390],{"className":859,"code":1389,"language":861,"meta":862,"style":862},"{\n  reason: string                                    \u002F\u002F The reason from the link\n  link: 'Password Reset' | 'MFA Code' | 'Custom MFA'\n  token: string\n  random: string\n  visitor: string\n}\n",[852,1391,1392,1397,1407,1438,1446,1453,1460],{"__ignoreMap":862},[866,1393,1394],{"class":868,"line":869},[866,1395,1396],{"class":876},"{\n",[866,1398,1399,1402,1404],{"class":868,"line":1067},[866,1400,1401],{"class":876},"  reason: ",[866,1403,1030],{"class":880},[866,1405,1406],{"class":1101},"                                    \u002F\u002F The reason from the link\n",[866,1408,1409,1412,1415,1417,1419,1422,1424,1427,1429,1431,1433,1436],{"class":868,"line":1079},[866,1410,1411],{"class":876},"  link: ",[866,1413,1414],{"class":902},"'",[866,1416,130],{"class":906},[866,1418,1414],{"class":902},[866,1420,1421],{"class":968}," |",[866,1423,903],{"class":902},[866,1425,1426],{"class":906},"MFA Code",[866,1428,1414],{"class":902},[866,1430,1421],{"class":968},[866,1432,903],{"class":902},[866,1434,1435],{"class":906},"Custom MFA",[866,1437,909],{"class":902},[866,1439,1440,1443],{"class":868,"line":1089},[866,1441,1442],{"class":876},"  token: ",[866,1444,1445],{"class":880},"string\n",[866,1447,1448,1451],{"class":868,"line":1105},[866,1449,1450],{"class":876},"  random: ",[866,1452,1445],{"class":880},[866,1454,1455,1458],{"class":868,"line":1118},[866,1456,1457],{"class":876},"  visitor: ",[866,1459,1445],{"class":880},[866,1461,1463],{"class":868,"line":1462},7,[866,1464,1121],{"class":876},[931,1466],{},[934,1468,1470],{"id":1469},"executerequestturl-method-body-customheaders-customoptions-context",[852,1471,1472],{},"executeRequest\u003CT>(url, method, body?, customHeaders?, customOptions?, context?)",[848,1474,1475,1476,1478],{},"Universal fetch wrapper for making authenticated requests. Automatically injects the CSRF token on the client and proxies request headers on the server. Captures ",[852,1477,985],{}," response headers and forwards them to the browser.",[857,1480,1482],{"className":859,"code":1481,"language":861,"meta":862,"style":862},"const result = await executeRequest\u003C{ name: string }>('\u002Fapi\u002Fprofile', 'GET')\n\nif (result.ok) {\n  console.log(result.data.name)\n}\n",[852,1483,1484,1529,1534,1553,1579],{"__ignoreMap":862},[866,1485,1486,1488,1490,1492,1494,1497,1500,1503,1505,1507,1510,1512,1515,1517,1519,1521,1524,1526],{"class":868,"line":869},[866,1487,961],{"class":960},[866,1489,1251],{"class":964},[866,1491,969],{"class":968},[866,1493,972],{"class":872},[866,1495,1496],{"class":975}," executeRequest",[866,1498,1499],{"class":876},"\u003C{ ",[866,1501,1502],{"class":880},"name",[866,1504,1073],{"class":968},[866,1506,1098],{"class":1060},[866,1508,1509],{"class":876}," }>(",[866,1511,1414],{"class":902},[866,1513,1514],{"class":906},"\u002Fapi\u002Fprofile",[866,1516,1414],{"class":902},[866,1518,883],{"class":876},[866,1520,1414],{"class":902},[866,1522,1523],{"class":906},"GET",[866,1525,1414],{"class":902},[866,1527,1528],{"class":876},")\n",[866,1530,1531],{"class":868,"line":1067},[866,1532,1533],{"emptyLinePlaceholder":8},"\n",[866,1535,1536,1539,1542,1545,1547,1550],{"class":868,"line":1079},[866,1537,1538],{"class":872},"if",[866,1540,1541],{"class":876}," (",[866,1543,1544],{"class":880},"result",[866,1546,1042],{"class":876},[866,1548,1549],{"class":880},"ok",[866,1551,1552],{"class":876},") {\n",[866,1554,1555,1558,1560,1563,1566,1568,1570,1573,1575,1577],{"class":868,"line":1089},[866,1556,1557],{"class":880},"  console",[866,1559,1042],{"class":876},[866,1561,1562],{"class":975},"log",[866,1564,1565],{"class":876},"(",[866,1567,1544],{"class":880},[866,1569,1042],{"class":876},[866,1571,1572],{"class":880},"data",[866,1574,1042],{"class":876},[866,1576,1502],{"class":880},[866,1578,1528],{"class":876},[866,1580,1581],{"class":868,"line":1105},[866,1582,1121],{"class":876},[848,1584,1585],{},[990,1586,992],{},[994,1588,1589,1599],{},[997,1590,1591],{},[1000,1592,1593,1595,1597],{},[1003,1594,1005],{},[1003,1596,1008],{},[1003,1598,1014],{},[1016,1600,1601,1615,1630,1645,1660,1675],{},[1000,1602,1603,1608,1612],{},[1021,1604,1605],{},[852,1606,1607],{},"url",[1021,1609,1610],{},[852,1611,1030],{},[1021,1613,1614],{},"Endpoint URL",[1000,1616,1617,1622,1627],{},[1021,1618,1619],{},[852,1620,1621],{},"method",[1021,1623,1624],{},[852,1625,1626],{},"'GET' | 'POST' | 'DELETE' | 'PUT' | 'PATCH'",[1021,1628,1629],{},"HTTP method",[1000,1631,1632,1637,1642],{},[1021,1633,1634],{},[852,1635,1636],{},"body",[1021,1638,1639],{},[852,1640,1641],{},"object",[1021,1643,1644],{},"Request body for POST\u002FPUT\u002FPATCH, or query parameters for GET",[1000,1646,1647,1652,1657],{},[1021,1648,1649],{},[852,1650,1651],{},"customHeaders",[1021,1653,1654],{},[852,1655,1656],{},"Record\u003Cstring, string>",[1021,1658,1659],{},"Additional headers",[1000,1661,1662,1667,1672],{},[1021,1663,1664],{},[852,1665,1666],{},"customOptions",[1021,1668,1669],{},[852,1670,1671],{},"FetchOptions",[1021,1673,1674],{},"Additional ofetch options",[1000,1676,1677,1682,1687],{},[1021,1678,1679],{},[852,1680,1681],{},"context",[1021,1683,1684],{},[852,1685,1686],{},"ApiContext",[1021,1688,1689,1690,883,1693,1696,1697],{},"Server-side context with ",[852,1691,1692],{},"event",[852,1694,1695],{},"fetcher",", and ",[852,1698,1699],{},"headers",[848,1701,1702],{},[990,1703,1047],{},[857,1705,1707],{"className":859,"code":1706,"language":861,"meta":862,"style":862},"type Results\u003CT> =\n  | { ok: true; data: T; date: string }\n  | { ok: false; reason: string; date: string }\n",[852,1708,1709,1730,1766],{"__ignoreMap":862},[866,1710,1711,1714,1717,1720,1724,1727],{"class":868,"line":869},[866,1712,1713],{"class":960},"type",[866,1715,1716],{"class":1060}," Results",[866,1718,1719],{"class":876},"\u003C",[866,1721,1723],{"class":1722},"sW-rI","T",[866,1725,1726],{"class":876},"> ",[866,1728,1729],{"class":968},"=\n",[866,1731,1732,1735,1737,1739,1741,1744,1747,1749,1751,1754,1756,1759,1761,1763],{"class":868,"line":1067},[866,1733,1734],{"class":968},"  |",[866,1736,877],{"class":876},[866,1738,1549],{"class":880},[866,1740,1073],{"class":968},[866,1742,1743],{"class":1060}," true",[866,1745,1746],{"class":876},"; ",[866,1748,1572],{"class":880},[866,1750,1073],{"class":968},[866,1752,1753],{"class":1060}," T",[866,1755,1746],{"class":876},[866,1757,1758],{"class":880},"date",[866,1760,1073],{"class":968},[866,1762,1098],{"class":1060},[866,1764,1765],{"class":876}," }\n",[866,1767,1768,1770,1772,1774,1776,1779,1781,1783,1785,1787,1789,1791,1793,1795],{"class":868,"line":1079},[866,1769,1734],{"class":968},[866,1771,877],{"class":876},[866,1773,1549],{"class":880},[866,1775,1073],{"class":968},[866,1777,1778],{"class":1060}," false",[866,1780,1746],{"class":876},[866,1782,1234],{"class":880},[866,1784,1073],{"class":968},[866,1786,1098],{"class":1060},[866,1788,1746],{"class":876},[866,1790,1758],{"class":880},[866,1792,1073],{"class":968},[866,1794,1098],{"class":1060},[866,1796,1765],{"class":876},[848,1798,1799,1800,1803,1804,1807,1808,1811],{},"On the client, ",[852,1801,1802],{},"X-CSRF-Token"," is injected automatically from ",[852,1805,1806],{},"getCsrfToken()",". On the server, incoming request headers are proxied when ",[852,1809,1810],{},"context.headers"," is provided.",[848,1813,1814],{},[990,1815,1816],{},"Server-side usage",[857,1818,1821],{"className":859,"code":1819,"filename":1820,"language":861,"meta":862,"style":862},"export default defineAuthenticatedEventHandler(async (event) => {\n  const result = await executeRequest\u003CData>(\n    '\u002Fapi\u002Fdownstream',\n    'GET',\n    {},\n    {},\n    {},\n    {\n      headers: useRequestHeaders(),\n      event,\n      fetcher: useRequestFetch()\n    }\n  )\n  return result\n})\n","server\u002Fapi\u002Fproxy.get.ts",[852,1822,1823,1852,1873,1886,1896,1901,1905,1909,1915,1930,1938,1951,1957,1963,1972],{"__ignoreMap":862},[866,1824,1825,1828,1831,1834,1836,1839,1841,1844,1847,1850],{"class":868,"line":869},[866,1826,1827],{"class":872},"export",[866,1829,1830],{"class":872}," default",[866,1832,1833],{"class":975}," defineAuthenticatedEventHandler",[866,1835,1565],{"class":876},[866,1837,1838],{"class":960},"async",[866,1840,1541],{"class":876},[866,1842,1692],{"class":1843},"sygFZ",[866,1845,1846],{"class":876},") ",[866,1848,1849],{"class":960},"=>",[866,1851,1064],{"class":876},[866,1853,1854,1857,1859,1861,1863,1865,1867,1870],{"class":868,"line":1067},[866,1855,1856],{"class":960},"  const",[866,1858,1251],{"class":964},[866,1860,969],{"class":968},[866,1862,972],{"class":872},[866,1864,1496],{"class":975},[866,1866,1719],{"class":876},[866,1868,1869],{"class":1722},"Data",[866,1871,1872],{"class":876},">(\n",[866,1874,1875,1878,1881,1883],{"class":868,"line":1079},[866,1876,1877],{"class":902},"    '",[866,1879,1880],{"class":906},"\u002Fapi\u002Fdownstream",[866,1882,1414],{"class":902},[866,1884,1885],{"class":876},",\n",[866,1887,1888,1890,1892,1894],{"class":868,"line":1089},[866,1889,1877],{"class":902},[866,1891,1523],{"class":906},[866,1893,1414],{"class":902},[866,1895,1885],{"class":876},[866,1897,1898],{"class":868,"line":1105},[866,1899,1900],{"class":876},"    {},\n",[866,1902,1903],{"class":868,"line":1118},[866,1904,1900],{"class":876},[866,1906,1907],{"class":868,"line":1462},[866,1908,1900],{"class":876},[866,1910,1912],{"class":868,"line":1911},8,[866,1913,1914],{"class":876},"    {\n",[866,1916,1918,1921,1924,1927],{"class":868,"line":1917},9,[866,1919,1920],{"class":880},"      headers",[866,1922,1073],{"class":1923},"s34zl",[866,1925,1926],{"class":975}," useRequestHeaders",[866,1928,1929],{"class":876},"(),\n",[866,1931,1933,1936],{"class":868,"line":1932},10,[866,1934,1935],{"class":880},"      event",[866,1937,1885],{"class":876},[866,1939,1941,1944,1946,1949],{"class":868,"line":1940},11,[866,1942,1943],{"class":880},"      fetcher",[866,1945,1073],{"class":1923},[866,1947,1948],{"class":975}," useRequestFetch",[866,1950,979],{"class":876},[866,1952,1954],{"class":868,"line":1953},12,[866,1955,1956],{"class":876},"    }\n",[866,1958,1960],{"class":868,"line":1959},13,[866,1961,1962],{"class":876},"  )\n",[866,1964,1966,1969],{"class":868,"line":1965},14,[866,1967,1968],{"class":872},"  return",[866,1970,1971],{"class":880}," result\n",[866,1973,1975],{"class":868,"line":1974},15,[866,1976,1977],{"class":876},"})\n",[931,1979],{},[934,1981,1983],{"id":1982},"getcsrftoken",[852,1984,1806],{},[848,1986,1987,1988,1991,1992,1995,1996,1998,1999,2002],{},"Reads the ",[852,1989,1990],{},"__Host-csrf"," cookie from ",[852,1993,1994],{},"document.cookie"," and returns the first segment (the raw token before the first ",[852,1997,1042],{},"). Returns ",[852,2000,2001],{},"undefined"," if the cookie is not present.",[848,2004,2005,2006,2008],{},"This function is browser-only. On the server, the CSRF token is injected by ",[852,2007,160],{}," from the forwarded request headers.",[857,2010,2012],{"className":859,"code":2011,"language":861,"meta":862,"style":862},"const token = getCsrfToken()\n\n\u002F\u002F Manual header injection:\nfetch('\u002Fapi\u002Faction', {\n  method: 'POST',\n  headers: {\n    'X-CSRF-Token': token ?? '',\n    'Content-Type': 'application\u002Fjson'\n  },\n  body: JSON.stringify({ ... })\n})\n",[852,2013,2014,2028,2032,2037,2054,2070,2079,2099,2117,2122,2147],{"__ignoreMap":862},[866,2015,2016,2018,2021,2023,2026],{"class":868,"line":869},[866,2017,961],{"class":960},[866,2019,2020],{"class":964}," token",[866,2022,969],{"class":968},[866,2024,2025],{"class":975}," getCsrfToken",[866,2027,979],{"class":876},[866,2029,2030],{"class":868,"line":1067},[866,2031,1533],{"emptyLinePlaceholder":8},[866,2033,2034],{"class":868,"line":1079},[866,2035,2036],{"class":1101},"\u002F\u002F Manual header injection:\n",[866,2038,2039,2042,2044,2046,2049,2051],{"class":868,"line":1089},[866,2040,2041],{"class":975},"fetch",[866,2043,1565],{"class":876},[866,2045,1414],{"class":902},[866,2047,2048],{"class":906},"\u002Fapi\u002Faction",[866,2050,1414],{"class":902},[866,2052,2053],{"class":876},", {\n",[866,2055,2056,2059,2061,2063,2066,2068],{"class":868,"line":1105},[866,2057,2058],{"class":880},"  method",[866,2060,1073],{"class":1923},[866,2062,903],{"class":902},[866,2064,2065],{"class":906},"POST",[866,2067,1414],{"class":902},[866,2069,1885],{"class":876},[866,2071,2072,2075,2077],{"class":868,"line":1118},[866,2073,2074],{"class":880},"  headers",[866,2076,1073],{"class":1923},[866,2078,1064],{"class":876},[866,2080,2081,2083,2085,2087,2089,2091,2094,2097],{"class":868,"line":1462},[866,2082,1877],{"class":902},[866,2084,1802],{"class":906},[866,2086,1414],{"class":902},[866,2088,1073],{"class":1923},[866,2090,2020],{"class":880},[866,2092,2093],{"class":968}," ??",[866,2095,2096],{"class":902}," ''",[866,2098,1885],{"class":876},[866,2100,2101,2103,2106,2108,2110,2112,2115],{"class":868,"line":1911},[866,2102,1877],{"class":902},[866,2104,2105],{"class":906},"Content-Type",[866,2107,1414],{"class":902},[866,2109,1073],{"class":1923},[866,2111,903],{"class":902},[866,2113,2114],{"class":906},"application\u002Fjson",[866,2116,909],{"class":902},[866,2118,2119],{"class":868,"line":1917},[866,2120,2121],{"class":876},"  },\n",[866,2123,2124,2127,2129,2133,2135,2138,2141,2144],{"class":868,"line":1932},[866,2125,2126],{"class":880},"  body",[866,2128,1073],{"class":1923},[866,2130,2132],{"class":2131},"sPzPf"," JSON",[866,2134,1042],{"class":876},[866,2136,2137],{"class":975},"stringify",[866,2139,2140],{"class":876},"({ ",[866,2142,2143],{"class":968},"...",[866,2145,2146],{"class":876}," })\n",[866,2148,2149],{"class":868,"line":1940},[866,2150,1977],{"class":876},[848,2152,2153,2154,2156,2157,2159,2160,2162,2163,2165],{},"Use ",[852,2155,164],{}," directly only when making raw ",[852,2158,2041],{}," calls. For everything else, use ",[852,2161,160],{},", which handles token injection automatically. See ",[1237,2164,97],{"href":98}," for the double-submit pattern this composable integrates with.",[2167,2168,2169],"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 .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 .sl46w, html code.shiki .sl46w{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#FF79C6}html pre.shiki code .s3JHE, html code.shiki .s3JHE{--shiki-light:#0070C1;--shiki-default:#0070C1;--shiki-dark:#F8F8F2}html pre.shiki code .saOXh, html code.shiki .saOXh{--shiki-light:#000000;--shiki-default:#000000;--shiki-dark:#FF79C6}html pre.shiki code .sHOzp, html code.shiki .sHOzp{--shiki-light:#795E26;--shiki-default:#795E26;--shiki-dark:#50FA7B}html pre.shiki code .sFs1U, html code.shiki .sFs1U{--shiki-light:#267F99;--shiki-light-font-style:inherit;--shiki-default:#267F99;--shiki-default-font-style:inherit;--shiki-dark:#8BE9FD;--shiki-dark-font-style:italic}html pre.shiki code .sghk6, html code.shiki .sghk6{--shiki-light:#008000;--shiki-default:#008000;--shiki-dark:#6272A4}html pre.shiki code .sW-rI, html code.shiki .sW-rI{--shiki-light:#267F99;--shiki-light-font-style:inherit;--shiki-default:#267F99;--shiki-default-font-style:inherit;--shiki-dark:#FFB86C;--shiki-dark-font-style:italic}html pre.shiki code .sygFZ, html code.shiki .sygFZ{--shiki-light:#001080;--shiki-light-font-style:inherit;--shiki-default:#001080;--shiki-default-font-style:inherit;--shiki-dark:#FFB86C;--shiki-dark-font-style:italic}html pre.shiki code .s34zl, html code.shiki .s34zl{--shiki-light:#001080;--shiki-default:#001080;--shiki-dark:#FF79C6}html pre.shiki code .sPzPf, html code.shiki .sPzPf{--shiki-light:#0070C1;--shiki-default:#0070C1;--shiki-dark:#BD93F9}",{"title":862,"searchDepth":1067,"depth":1067,"links":2171},[2172,2173,2174,2175],{"id":936,"depth":1067,"text":939},{"id":1225,"depth":1067,"text":1228},{"id":1469,"depth":1067,"text":1472},{"id":1982,"depth":1067,"text":1806},"Browser-side Vue composables and fetch utilities for session state, magic link handling, authenticated requests, and CSRF token reading.","md","i-lucide-component",{},null,"---\ntitle: Client-side Reference\ndescription: Browser-side Vue composables and fetch utilities for session state, magic link handling, authenticated requests, and CSRF token reading.\nicon: i-lucide-component\n---\n\nThese functions ship from the `auth-h3client\u002Fclient` entry point and run in the browser (or during Vue SSR) of any Nuxt or Vue application. When using the Nuxt module, they are auto-imported in components and pages. Outside the Nuxt module, import them explicitly:\n\n```ts\nimport { useAuthData, useMagicLink, executeRequest, getCsrfToken } from 'auth-h3client\u002Fclient'\n```\n\nThe composables depend on `nuxt\u002Fapp` for SSR context composables (`useState`, `useRequestHeaders`, `useRequestEvent`, `useFetch`), so they require an application that provides those symbols.\n\n---\n\n## `useAuthData(authStatusUrl?)`\n\nReturns a reactive `Ref\u003CAuthState>` representing the current authentication state. Implements a singleton pattern using `useState('auth')` to prevent duplicate network requests during SSR and hydration.\n\n```ts\nconst auth = await useAuthData()\n```\n\nOn the server, it forwards all incoming request headers to the auth status endpoint and captures `Set-Cookie` response headers to forward them to the browser. On the client, it reuses the server-populated payload from the SSR hydration cache for the first call, then fetches fresh data on subsequent calls.\n\n**Parameters**\n\n| Parameter | Type | Default | Description |\n|---|---|---|---|\n| `authStatusUrl` | `string` | `'\u002Fapi\u002Fauth\u002Fusers\u002FauthStatus'` | Endpoint path for the auth status check when you use the Nuxt module. In manual H3 or Nitro setups, pass the path where you registered `getAuthStatusHandler`. |\n\n**Return type**\n\n```ts\ninterface AuthState {\n  authorized: boolean\n  mfaRequired: boolean\n  id?: string       \u002F\u002F userId from the IAM response\n  message?: string  \u002F\u002F MFA challenge message when mfaRequired is true\n}\n```\n\n**Status code handling**\n\n| Status | `authorized` | `mfaRequired` | Notes |\n|---|---|---|---|\n| 200 | `true` | `false` | User is authenticated |\n| 202 | `false` | `true` | MFA challenge; `message` contains instructions |\n| 401 | `false` | `false` | Not authenticated |\n| Any error | `false` | `false` | Network or server error; fails silently |\n\n---\n\n## `useMagicLink(path?)`\n\nReads magic link query parameters from the current route, validates that all required parameters are present, and calls the appropriate server API endpoint based on the `reason` parameter. See [Client-Side MFA](\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fclient-side) for the full bounce-route integration.\n\n```ts\nconst result = await useMagicLink()\n```\n\nThrows a Nuxt 404 error if any required query parameter (`random`, `token`, `reason`, `visitor`) is missing, if no API endpoint matches the `reason`, or if the server returns an error.\n\n**Parameters**\n\n| Parameter | Type | Description |\n|---|---|---|\n| `path` | `string` | Custom API endpoint for non-standard `reason` values |\n\n**Routing by `reason`**\n\n| `reason` value | Endpoint called |\n|---|---|\n| `MAGIC_LINK_MFA_CHECKS` | `GET \u002Fapi\u002Fauth\u002Fverify-mfa` |\n| `PASSWORD_RESET` | `GET \u002Fapi\u002Fauth\u002Freset-password` |\n| `change_email` | `GET \u002Fapi\u002Fauth\u002Fupdate-email` |\n| Any other value | `path` argument |\n\n**Return type**\n\n```ts\n{\n  reason: string                                    \u002F\u002F The reason from the link\n  link: 'Password Reset' | 'MFA Code' | 'Custom MFA'\n  token: string\n  random: string\n  visitor: string\n}\n```\n\n---\n\n## `executeRequest\u003CT>(url, method, body?, customHeaders?, customOptions?, context?)`\n\nUniversal fetch wrapper for making authenticated requests. Automatically injects the CSRF token on the client and proxies request headers on the server. Captures `Set-Cookie` response headers and forwards them to the browser.\n\n```ts\nconst result = await executeRequest\u003C{ name: string }>('\u002Fapi\u002Fprofile', 'GET')\n\nif (result.ok) {\n  console.log(result.data.name)\n}\n```\n\n**Parameters**\n\n| Parameter | Type | Description |\n|---|---|---|\n| `url` | `string` | Endpoint URL |\n| `method` | `'GET' \\| 'POST' \\| 'DELETE' \\| 'PUT' \\| 'PATCH'` | HTTP method |\n| `body` | `object` | Request body for POST\u002FPUT\u002FPATCH, or query parameters for GET |\n| `customHeaders` | `Record\u003Cstring, string>` | Additional headers |\n| `customOptions` | `FetchOptions` | Additional ofetch options |\n| `context` | `ApiContext` | Server-side context with `event`, `fetcher`, and `headers` |\n\n**Return type**\n\n```ts\ntype Results\u003CT> =\n  | { ok: true; data: T; date: string }\n  | { ok: false; reason: string; date: string }\n```\n\nOn the client, `X-CSRF-Token` is injected automatically from `getCsrfToken()`. On the server, incoming request headers are proxied when `context.headers` is provided.\n\n**Server-side usage**\n\n```ts [server\u002Fapi\u002Fproxy.get.ts]\nexport default defineAuthenticatedEventHandler(async (event) => {\n  const result = await executeRequest\u003CData>(\n    '\u002Fapi\u002Fdownstream',\n    'GET',\n    {},\n    {},\n    {},\n    {\n      headers: useRequestHeaders(),\n      event,\n      fetcher: useRequestFetch()\n    }\n  )\n  return result\n})\n```\n\n---\n\n## `getCsrfToken()`\n\nReads the `__Host-csrf` cookie from `document.cookie` and returns the first segment (the raw token before the first `.`). Returns `undefined` if the cookie is not present.\n\nThis function is browser-only. On the server, the CSRF token is injected by `executeRequest` from the forwarded request headers.\n\n```ts\nconst token = getCsrfToken()\n\n\u002F\u002F Manual header injection:\nfetch('\u002Fapi\u002Faction', {\n  method: 'POST',\n  headers: {\n    'X-CSRF-Token': token ?? '',\n    'Content-Type': 'application\u002Fjson'\n  },\n  body: JSON.stringify({ ... })\n})\n```\n\nUse `getCsrfToken` directly only when making raw `fetch` calls. For everything else, use `executeRequest`, which handles token injection automatically. See [CSRF Protection](\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcsrf) for the double-submit pattern this composable integrates with.\n",{"title":210,"description":2176},"u4TEE7ltGUVavluU1S4wkNt4CrHQwVECFHU6RiGVmnQ",[2185,2186],{"title":206,"path":207,"stem":208,"children":-1},{"title":214,"path":215,"stem":216,"children":-1},{"id":843,"title":210,"body":2188,"description":2176,"extension":2177,"icon":2178,"meta":3218,"module":2180,"navigation":8,"path":211,"rawbody":2181,"seo":3219,"stem":212,"__hash__":2183},{"type":845,"value":2189,"toc":3212},[2190,2194,2228,2240,2242,2246,2252,2270,2274,2278,2312,2316,2368,2372,2450,2452,2456,2462,2480,2492,2496,2524,2530,2582,2586,2650,2652,2656,2660,2746,2750,2842,2846,2924,2932,2936,3060,3062,3066,3076,3080,3200,3210],[848,2191,850,2192,855],{},[852,2193,854],{},[857,2195,2196],{"className":859,"code":860,"language":861,"meta":862,"style":862},[852,2197,2198],{"__ignoreMap":862},[866,2199,2200,2202,2204,2206,2208,2210,2212,2214,2216,2218,2220,2222,2224,2226],{"class":868,"line":869},[866,2201,873],{"class":872},[866,2203,877],{"class":876},[866,2205,152],{"class":880},[866,2207,883],{"class":876},[866,2209,156],{"class":880},[866,2211,883],{"class":876},[866,2213,160],{"class":880},[866,2215,883],{"class":876},[866,2217,164],{"class":880},[866,2219,896],{"class":876},[866,2221,899],{"class":872},[866,2223,903],{"class":902},[866,2225,854],{"class":906},[866,2227,909],{"class":902},[848,2229,912,2230,916,2232,883,2234,883,2236,883,2238,929],{},[852,2231,915],{},[852,2233,919],{},[852,2235,922],{},[852,2237,925],{},[852,2239,928],{},[931,2241],{},[934,2243,2244],{"id":936},[852,2245,939],{},[848,2247,942,2248,946,2250,950],{},[852,2249,945],{},[852,2251,949],{},[857,2253,2254],{"className":859,"code":953,"language":861,"meta":862,"style":862},[852,2255,2256],{"__ignoreMap":862},[866,2257,2258,2260,2262,2264,2266,2268],{"class":868,"line":869},[866,2259,961],{"class":960},[866,2261,965],{"class":964},[866,2263,969],{"class":968},[866,2265,972],{"class":872},[866,2267,976],{"class":975},[866,2269,979],{"class":876},[848,2271,982,2272,986],{},[852,2273,985],{},[848,2275,2276],{},[990,2277,992],{},[994,2279,2280,2292],{},[997,2281,2282],{},[1000,2283,2284,2286,2288,2290],{},[1003,2285,1005],{},[1003,2287,1008],{},[1003,2289,1011],{},[1003,2291,1014],{},[1016,2293,2294],{},[1000,2295,2296,2300,2304,2308],{},[1021,2297,2298],{},[852,2299,1025],{},[1021,2301,2302],{},[852,2303,1030],{},[1021,2305,2306],{},[852,2307,1035],{},[1021,2309,1038,2310,1042],{},[852,2311,1041],{},[848,2313,2314],{},[990,2315,1047],{},[857,2317,2318],{"className":859,"code":1050,"language":861,"meta":862,"style":862},[852,2319,2320,2328,2336,2344,2354,2364],{"__ignoreMap":862},[866,2321,2322,2324,2326],{"class":868,"line":869},[866,2323,1057],{"class":960},[866,2325,1061],{"class":1060},[866,2327,1064],{"class":876},[866,2329,2330,2332,2334],{"class":868,"line":1067},[866,2331,1070],{"class":880},[866,2333,1073],{"class":968},[866,2335,1076],{"class":1060},[866,2337,2338,2340,2342],{"class":868,"line":1079},[866,2339,1082],{"class":880},[866,2341,1073],{"class":968},[866,2343,1076],{"class":1060},[866,2345,2346,2348,2350,2352],{"class":868,"line":1089},[866,2347,1092],{"class":880},[866,2349,1095],{"class":968},[866,2351,1098],{"class":1060},[866,2353,1102],{"class":1101},[866,2355,2356,2358,2360,2362],{"class":868,"line":1105},[866,2357,1108],{"class":880},[866,2359,1095],{"class":968},[866,2361,1098],{"class":1060},[866,2363,1115],{"class":1101},[866,2365,2366],{"class":868,"line":1118},[866,2367,1121],{"class":876},[848,2369,2370],{},[990,2371,1126],{},[994,2373,2374,2390],{},[997,2375,2376],{},[1000,2377,2378,2380,2384,2388],{},[1003,2379,1135],{},[1003,2381,2382],{},[852,2383,1140],{},[1003,2385,2386],{},[852,2387,1145],{},[1003,2389,1148],{},[1016,2391,2392,2406,2422,2436],{},[1000,2393,2394,2396,2400,2404],{},[1021,2395,1155],{},[1021,2397,2398],{},[852,2399,1160],{},[1021,2401,2402],{},[852,2403,1165],{},[1021,2405,1168],{},[1000,2407,2408,2410,2414,2418],{},[1021,2409,1173],{},[1021,2411,2412],{},[852,2413,1165],{},[1021,2415,2416],{},[852,2417,1160],{},[1021,2419,1184,2420,1188],{},[852,2421,1187],{},[1000,2423,2424,2426,2430,2434],{},[1021,2425,1193],{},[1021,2427,2428],{},[852,2429,1165],{},[1021,2431,2432],{},[852,2433,1165],{},[1021,2435,1204],{},[1000,2437,2438,2440,2444,2448],{},[1021,2439,1209],{},[1021,2441,2442],{},[852,2443,1165],{},[1021,2445,2446],{},[852,2447,1165],{},[1021,2449,1220],{},[931,2451],{},[934,2453,2454],{"id":1225},[852,2455,1228],{},[848,2457,1231,2458,1235,2460,1239],{},[852,2459,1234],{},[1237,2461,142],{"href":143},[857,2463,2464],{"className":859,"code":1242,"language":861,"meta":862,"style":862},[852,2465,2466],{"__ignoreMap":862},[866,2467,2468,2470,2472,2474,2476,2478],{"class":868,"line":869},[866,2469,961],{"class":960},[866,2471,1251],{"class":964},[866,2473,969],{"class":968},[866,2475,972],{"class":872},[866,2477,1258],{"class":975},[866,2479,979],{"class":876},[848,2481,1263,2482,883,2484,883,2486,883,2488,1275,2490,1278],{},[852,2483,1266],{},[852,2485,1269],{},[852,2487,1234],{},[852,2489,1274],{},[852,2491,1234],{},[848,2493,2494],{},[990,2495,992],{},[994,2497,2498,2508],{},[997,2499,2500],{},[1000,2501,2502,2504,2506],{},[1003,2503,1005],{},[1003,2505,1008],{},[1003,2507,1014],{},[1016,2509,2510],{},[1000,2511,2512,2516,2520],{},[1021,2513,2514],{},[852,2515,1303],{},[1021,2517,2518],{},[852,2519,1030],{},[1021,2521,1310,2522,1313],{},[852,2523,1234],{},[848,2525,2526],{},[990,2527,1318,2528],{},[852,2529,1234],{},[994,2531,2532,2542],{},[997,2533,2534],{},[1000,2535,2536,2540],{},[1003,2537,2538,1331],{},[852,2539,1234],{},[1003,2541,1334],{},[1016,2543,2544,2554,2564,2574],{},[1000,2545,2546,2550],{},[1021,2547,2548],{},[852,2549,1343],{},[1021,2551,2552],{},[852,2553,1348],{},[1000,2555,2556,2560],{},[1021,2557,2558],{},[852,2559,1355],{},[1021,2561,2562],{},[852,2563,1360],{},[1000,2565,2566,2570],{},[1021,2567,2568],{},[852,2569,1367],{},[1021,2571,2572],{},[852,2573,1372],{},[1000,2575,2576,2578],{},[1021,2577,1377],{},[1021,2579,2580,1382],{},[852,2581,1303],{},[848,2583,2584],{},[990,2585,1047],{},[857,2587,2588],{"className":859,"code":1389,"language":861,"meta":862,"style":862},[852,2589,2590,2594,2602,2628,2634,2640,2646],{"__ignoreMap":862},[866,2591,2592],{"class":868,"line":869},[866,2593,1396],{"class":876},[866,2595,2596,2598,2600],{"class":868,"line":1067},[866,2597,1401],{"class":876},[866,2599,1030],{"class":880},[866,2601,1406],{"class":1101},[866,2603,2604,2606,2608,2610,2612,2614,2616,2618,2620,2622,2624,2626],{"class":868,"line":1079},[866,2605,1411],{"class":876},[866,2607,1414],{"class":902},[866,2609,130],{"class":906},[866,2611,1414],{"class":902},[866,2613,1421],{"class":968},[866,2615,903],{"class":902},[866,2617,1426],{"class":906},[866,2619,1414],{"class":902},[866,2621,1421],{"class":968},[866,2623,903],{"class":902},[866,2625,1435],{"class":906},[866,2627,909],{"class":902},[866,2629,2630,2632],{"class":868,"line":1089},[866,2631,1442],{"class":876},[866,2633,1445],{"class":880},[866,2635,2636,2638],{"class":868,"line":1105},[866,2637,1450],{"class":876},[866,2639,1445],{"class":880},[866,2641,2642,2644],{"class":868,"line":1118},[866,2643,1457],{"class":876},[866,2645,1445],{"class":880},[866,2647,2648],{"class":868,"line":1462},[866,2649,1121],{"class":876},[931,2651],{},[934,2653,2654],{"id":1469},[852,2655,1472],{},[848,2657,1475,2658,1478],{},[852,2659,985],{},[857,2661,2662],{"className":859,"code":1481,"language":861,"meta":862,"style":862},[852,2663,2664,2702,2706,2720,2742],{"__ignoreMap":862},[866,2665,2666,2668,2670,2672,2674,2676,2678,2680,2682,2684,2686,2688,2690,2692,2694,2696,2698,2700],{"class":868,"line":869},[866,2667,961],{"class":960},[866,2669,1251],{"class":964},[866,2671,969],{"class":968},[866,2673,972],{"class":872},[866,2675,1496],{"class":975},[866,2677,1499],{"class":876},[866,2679,1502],{"class":880},[866,2681,1073],{"class":968},[866,2683,1098],{"class":1060},[866,2685,1509],{"class":876},[866,2687,1414],{"class":902},[866,2689,1514],{"class":906},[866,2691,1414],{"class":902},[866,2693,883],{"class":876},[866,2695,1414],{"class":902},[866,2697,1523],{"class":906},[866,2699,1414],{"class":902},[866,2701,1528],{"class":876},[866,2703,2704],{"class":868,"line":1067},[866,2705,1533],{"emptyLinePlaceholder":8},[866,2707,2708,2710,2712,2714,2716,2718],{"class":868,"line":1079},[866,2709,1538],{"class":872},[866,2711,1541],{"class":876},[866,2713,1544],{"class":880},[866,2715,1042],{"class":876},[866,2717,1549],{"class":880},[866,2719,1552],{"class":876},[866,2721,2722,2724,2726,2728,2730,2732,2734,2736,2738,2740],{"class":868,"line":1089},[866,2723,1557],{"class":880},[866,2725,1042],{"class":876},[866,2727,1562],{"class":975},[866,2729,1565],{"class":876},[866,2731,1544],{"class":880},[866,2733,1042],{"class":876},[866,2735,1572],{"class":880},[866,2737,1042],{"class":876},[866,2739,1502],{"class":880},[866,2741,1528],{"class":876},[866,2743,2744],{"class":868,"line":1105},[866,2745,1121],{"class":876},[848,2747,2748],{},[990,2749,992],{},[994,2751,2752,2762],{},[997,2753,2754],{},[1000,2755,2756,2758,2760],{},[1003,2757,1005],{},[1003,2759,1008],{},[1003,2761,1014],{},[1016,2763,2764,2776,2788,2800,2812,2824],{},[1000,2765,2766,2770,2774],{},[1021,2767,2768],{},[852,2769,1607],{},[1021,2771,2772],{},[852,2773,1030],{},[1021,2775,1614],{},[1000,2777,2778,2782,2786],{},[1021,2779,2780],{},[852,2781,1621],{},[1021,2783,2784],{},[852,2785,1626],{},[1021,2787,1629],{},[1000,2789,2790,2794,2798],{},[1021,2791,2792],{},[852,2793,1636],{},[1021,2795,2796],{},[852,2797,1641],{},[1021,2799,1644],{},[1000,2801,2802,2806,2810],{},[1021,2803,2804],{},[852,2805,1651],{},[1021,2807,2808],{},[852,2809,1656],{},[1021,2811,1659],{},[1000,2813,2814,2818,2822],{},[1021,2815,2816],{},[852,2817,1666],{},[1021,2819,2820],{},[852,2821,1671],{},[1021,2823,1674],{},[1000,2825,2826,2830,2834],{},[1021,2827,2828],{},[852,2829,1681],{},[1021,2831,2832],{},[852,2833,1686],{},[1021,2835,1689,2836,883,2838,1696,2840],{},[852,2837,1692],{},[852,2839,1695],{},[852,2841,1699],{},[848,2843,2844],{},[990,2845,1047],{},[857,2847,2848],{"className":859,"code":1706,"language":861,"meta":862,"style":862},[852,2849,2850,2864,2894],{"__ignoreMap":862},[866,2851,2852,2854,2856,2858,2860,2862],{"class":868,"line":869},[866,2853,1713],{"class":960},[866,2855,1716],{"class":1060},[866,2857,1719],{"class":876},[866,2859,1723],{"class":1722},[866,2861,1726],{"class":876},[866,2863,1729],{"class":968},[866,2865,2866,2868,2870,2872,2874,2876,2878,2880,2882,2884,2886,2888,2890,2892],{"class":868,"line":1067},[866,2867,1734],{"class":968},[866,2869,877],{"class":876},[866,2871,1549],{"class":880},[866,2873,1073],{"class":968},[866,2875,1743],{"class":1060},[866,2877,1746],{"class":876},[866,2879,1572],{"class":880},[866,2881,1073],{"class":968},[866,2883,1753],{"class":1060},[866,2885,1746],{"class":876},[866,2887,1758],{"class":880},[866,2889,1073],{"class":968},[866,2891,1098],{"class":1060},[866,2893,1765],{"class":876},[866,2895,2896,2898,2900,2902,2904,2906,2908,2910,2912,2914,2916,2918,2920,2922],{"class":868,"line":1079},[866,2897,1734],{"class":968},[866,2899,877],{"class":876},[866,2901,1549],{"class":880},[866,2903,1073],{"class":968},[866,2905,1778],{"class":1060},[866,2907,1746],{"class":876},[866,2909,1234],{"class":880},[866,2911,1073],{"class":968},[866,2913,1098],{"class":1060},[866,2915,1746],{"class":876},[866,2917,1758],{"class":880},[866,2919,1073],{"class":968},[866,2921,1098],{"class":1060},[866,2923,1765],{"class":876},[848,2925,1799,2926,1803,2928,1807,2930,1811],{},[852,2927,1802],{},[852,2929,1806],{},[852,2931,1810],{},[848,2933,2934],{},[990,2935,1816],{},[857,2937,2938],{"className":859,"code":1819,"filename":1820,"language":861,"meta":862,"style":862},[852,2939,2940,2962,2980,2990,3000,3004,3008,3012,3016,3026,3032,3042,3046,3050,3056],{"__ignoreMap":862},[866,2941,2942,2944,2946,2948,2950,2952,2954,2956,2958,2960],{"class":868,"line":869},[866,2943,1827],{"class":872},[866,2945,1830],{"class":872},[866,2947,1833],{"class":975},[866,2949,1565],{"class":876},[866,2951,1838],{"class":960},[866,2953,1541],{"class":876},[866,2955,1692],{"class":1843},[866,2957,1846],{"class":876},[866,2959,1849],{"class":960},[866,2961,1064],{"class":876},[866,2963,2964,2966,2968,2970,2972,2974,2976,2978],{"class":868,"line":1067},[866,2965,1856],{"class":960},[866,2967,1251],{"class":964},[866,2969,969],{"class":968},[866,2971,972],{"class":872},[866,2973,1496],{"class":975},[866,2975,1719],{"class":876},[866,2977,1869],{"class":1722},[866,2979,1872],{"class":876},[866,2981,2982,2984,2986,2988],{"class":868,"line":1079},[866,2983,1877],{"class":902},[866,2985,1880],{"class":906},[866,2987,1414],{"class":902},[866,2989,1885],{"class":876},[866,2991,2992,2994,2996,2998],{"class":868,"line":1089},[866,2993,1877],{"class":902},[866,2995,1523],{"class":906},[866,2997,1414],{"class":902},[866,2999,1885],{"class":876},[866,3001,3002],{"class":868,"line":1105},[866,3003,1900],{"class":876},[866,3005,3006],{"class":868,"line":1118},[866,3007,1900],{"class":876},[866,3009,3010],{"class":868,"line":1462},[866,3011,1900],{"class":876},[866,3013,3014],{"class":868,"line":1911},[866,3015,1914],{"class":876},[866,3017,3018,3020,3022,3024],{"class":868,"line":1917},[866,3019,1920],{"class":880},[866,3021,1073],{"class":1923},[866,3023,1926],{"class":975},[866,3025,1929],{"class":876},[866,3027,3028,3030],{"class":868,"line":1932},[866,3029,1935],{"class":880},[866,3031,1885],{"class":876},[866,3033,3034,3036,3038,3040],{"class":868,"line":1940},[866,3035,1943],{"class":880},[866,3037,1073],{"class":1923},[866,3039,1948],{"class":975},[866,3041,979],{"class":876},[866,3043,3044],{"class":868,"line":1953},[866,3045,1956],{"class":876},[866,3047,3048],{"class":868,"line":1959},[866,3049,1962],{"class":876},[866,3051,3052,3054],{"class":868,"line":1965},[866,3053,1968],{"class":872},[866,3055,1971],{"class":880},[866,3057,3058],{"class":868,"line":1974},[866,3059,1977],{"class":876},[931,3061],{},[934,3063,3064],{"id":1982},[852,3065,1806],{},[848,3067,1987,3068,1991,3070,1995,3072,1998,3074,2002],{},[852,3069,1990],{},[852,3071,1994],{},[852,3073,1042],{},[852,3075,2001],{},[848,3077,2005,3078,2008],{},[852,3079,160],{},[857,3081,3082],{"className":859,"code":2011,"language":861,"meta":862,"style":862},[852,3083,3084,3096,3100,3104,3118,3132,3140,3158,3174,3178,3196],{"__ignoreMap":862},[866,3085,3086,3088,3090,3092,3094],{"class":868,"line":869},[866,3087,961],{"class":960},[866,3089,2020],{"class":964},[866,3091,969],{"class":968},[866,3093,2025],{"class":975},[866,3095,979],{"class":876},[866,3097,3098],{"class":868,"line":1067},[866,3099,1533],{"emptyLinePlaceholder":8},[866,3101,3102],{"class":868,"line":1079},[866,3103,2036],{"class":1101},[866,3105,3106,3108,3110,3112,3114,3116],{"class":868,"line":1089},[866,3107,2041],{"class":975},[866,3109,1565],{"class":876},[866,3111,1414],{"class":902},[866,3113,2048],{"class":906},[866,3115,1414],{"class":902},[866,3117,2053],{"class":876},[866,3119,3120,3122,3124,3126,3128,3130],{"class":868,"line":1105},[866,3121,2058],{"class":880},[866,3123,1073],{"class":1923},[866,3125,903],{"class":902},[866,3127,2065],{"class":906},[866,3129,1414],{"class":902},[866,3131,1885],{"class":876},[866,3133,3134,3136,3138],{"class":868,"line":1118},[866,3135,2074],{"class":880},[866,3137,1073],{"class":1923},[866,3139,1064],{"class":876},[866,3141,3142,3144,3146,3148,3150,3152,3154,3156],{"class":868,"line":1462},[866,3143,1877],{"class":902},[866,3145,1802],{"class":906},[866,3147,1414],{"class":902},[866,3149,1073],{"class":1923},[866,3151,2020],{"class":880},[866,3153,2093],{"class":968},[866,3155,2096],{"class":902},[866,3157,1885],{"class":876},[866,3159,3160,3162,3164,3166,3168,3170,3172],{"class":868,"line":1911},[866,3161,1877],{"class":902},[866,3163,2105],{"class":906},[866,3165,1414],{"class":902},[866,3167,1073],{"class":1923},[866,3169,903],{"class":902},[866,3171,2114],{"class":906},[866,3173,909],{"class":902},[866,3175,3176],{"class":868,"line":1917},[866,3177,2121],{"class":876},[866,3179,3180,3182,3184,3186,3188,3190,3192,3194],{"class":868,"line":1932},[866,3181,2126],{"class":880},[866,3183,1073],{"class":1923},[866,3185,2132],{"class":2131},[866,3187,1042],{"class":876},[866,3189,2137],{"class":975},[866,3191,2140],{"class":876},[866,3193,2143],{"class":968},[866,3195,2146],{"class":876},[866,3197,3198],{"class":868,"line":1940},[866,3199,1977],{"class":876},[848,3201,2153,3202,2156,3204,2159,3206,2162,3208,2165],{},[852,3203,164],{},[852,3205,2041],{},[852,3207,160],{},[1237,3209,97],{"href":98},[2167,3211,2169],{},{"title":862,"searchDepth":1067,"depth":1067,"links":3213},[3214,3215,3216,3217],{"id":936,"depth":1067,"text":939},{"id":1225,"depth":1067,"text":1228},{"id":1469,"depth":1067,"text":1472},{"id":1982,"depth":1067,"text":1806},{},{"title":210,"description":2176},1780436293386]