[{"data":1,"prerenderedAt":2018},["ShallowReactive",2],{"navLinks":3,"sidebar_docs_navigation_\u002Fdocs\u002Fauth-h3client":64,"navigation":217,"navLinks_footer":829,"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fauth-flows_page":842,"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fauth-flows_surround":1519,"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fauth-flows":1522},{"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":101,"body":844,"description":1511,"extension":1512,"icon":1513,"meta":1514,"module":1515,"navigation":8,"path":102,"rawbody":1516,"seo":1517,"stem":103,"__hash__":1518},"docs\u002Fdocs\u002Fauth-h3client\u002F01.essentials\u002F03.auth-flows.md",{"type":845,"value":846,"toc":1504},"minimark",[847,864,867,872,879,986,1063,1066,1132,1139,1141,1144,1160,1216,1226,1237,1287,1290,1340,1342,1344,1360,1367,1369,1371,1383,1433,1436,1439,1449,1487,1489,1493,1500],[848,849,850,851,855,856,859,860,863],"p",{},"The module provides three ready-to-use controllers for the core credential flows. Each controller proxies to the IAM service over a signed connection and writes the resulting cookies to the response. The IAM service handles all credential validation, password hashing, anomaly detection, and rate limiting. See the ",[852,853,854],"a",{"href":425},"IAM login",", ",[852,857,858],{"href":421},"signup",", and ",[852,861,862],{"href":429},"logout"," pages for the server-side details.",[865,866],"hr",{},[868,869,871],"h2",{"id":870},"registering-routes","Registering routes",[848,873,874,878],{},[875,876,877],"code",{},"useAuthRoutes(router)"," registers all three controllers on an H3 router (v1) or H3 app (v2) in a single call. When using the Nuxt module, it is called automatically during plugin setup, so you do not need to call it yourself.",[880,881,887],"pre",{"className":882,"code":883,"filename":884,"language":885,"meta":886,"style":886},"language-ts shiki shiki-themes light-plus light-plus dracula","import { createRouter } from 'h3'\nimport { useAuthRoutes } from 'auth-h3client\u002Fv1'\n\nconst router = createRouter()\nuseAuthRoutes(router)\n","H3 v1","ts","",[875,888,889,923,944,950,972],{"__ignoreMap":886},[890,891,894,898,902,906,909,912,916,920],"span",{"class":892,"line":893},"line",1,[890,895,897],{"class":896},"sZ328","import",[890,899,901],{"class":900},"sDd4n"," { ",[890,903,905],{"class":904},"sjsA6","createRouter",[890,907,908],{"class":900}," } ",[890,910,911],{"class":896},"from",[890,913,915],{"class":914},"sFkSl"," '",[890,917,919],{"class":918},"sFB1V","h3",[890,921,922],{"class":914},"'\n",[890,924,926,928,930,933,935,937,939,942],{"class":892,"line":925},2,[890,927,897],{"class":896},[890,929,901],{"class":900},[890,931,932],{"class":904},"useAuthRoutes",[890,934,908],{"class":900},[890,936,911],{"class":896},[890,938,915],{"class":914},[890,940,941],{"class":918},"auth-h3client\u002Fv1",[890,943,922],{"class":914},[890,945,947],{"class":892,"line":946},3,[890,948,949],{"emptyLinePlaceholder":8},"\n",[890,951,953,957,961,965,969],{"class":892,"line":952},4,[890,954,956],{"class":955},"sl46w","const",[890,958,960],{"class":959},"s3JHE"," router",[890,962,964],{"class":963},"saOXh"," =",[890,966,968],{"class":967},"sHOzp"," createRouter",[890,970,971],{"class":900},"()\n",[890,973,975,977,980,983],{"class":892,"line":974},5,[890,976,932],{"class":967},[890,978,979],{"class":900},"(",[890,981,982],{"class":904},"router",[890,984,985],{"class":900},")\n",[880,987,990],{"className":882,"code":988,"filename":989,"language":885,"meta":886,"style":886},"import { H3 } from 'h3'\nimport { useAuthRoutes } from 'auth-h3client\u002Fv2'\n\nconst app = new H3()\nuseAuthRoutes(app)\n","H3 v2",[875,991,992,1011,1030,1034,1052],{"__ignoreMap":886},[890,993,994,996,998,1001,1003,1005,1007,1009],{"class":892,"line":893},[890,995,897],{"class":896},[890,997,901],{"class":900},[890,999,1000],{"class":904},"H3",[890,1002,908],{"class":900},[890,1004,911],{"class":896},[890,1006,915],{"class":914},[890,1008,919],{"class":918},[890,1010,922],{"class":914},[890,1012,1013,1015,1017,1019,1021,1023,1025,1028],{"class":892,"line":925},[890,1014,897],{"class":896},[890,1016,901],{"class":900},[890,1018,932],{"class":904},[890,1020,908],{"class":900},[890,1022,911],{"class":896},[890,1024,915],{"class":914},[890,1026,1027],{"class":918},"auth-h3client\u002Fv2",[890,1029,922],{"class":914},[890,1031,1032],{"class":892,"line":946},[890,1033,949],{"emptyLinePlaceholder":8},[890,1035,1036,1038,1041,1043,1047,1050],{"class":892,"line":952},[890,1037,956],{"class":955},[890,1039,1040],{"class":959}," app",[890,1042,964],{"class":963},[890,1044,1046],{"class":1045},"sakC6"," new",[890,1048,1049],{"class":967}," H3",[890,1051,971],{"class":900},[890,1053,1054,1056,1058,1061],{"class":892,"line":974},[890,1055,932],{"class":967},[890,1057,979],{"class":900},[890,1059,1060],{"class":904},"app",[890,1062,985],{"class":900},[848,1064,1065],{},"The registered routes are:",[1067,1068,1069,1085],"table",{},[1070,1071,1072],"thead",{},[1073,1074,1075,1079,1082],"tr",{},[1076,1077,1078],"th",{},"Method",[1076,1080,1081],{},"Path",[1076,1083,1084],{},"Controller",[1086,1087,1088,1104,1118],"tbody",{},[1073,1089,1090,1094,1099],{},[1091,1092,1093],"td",{},"POST",[1091,1095,1096],{},[875,1097,1098],{},"\u002Flogin",[1091,1100,1101],{},[875,1102,1103],{},"loginHandler",[1073,1105,1106,1108,1113],{},[1091,1107,1093],{},[1091,1109,1110],{},[875,1111,1112],{},"\u002Fsignup",[1091,1114,1115],{},[875,1116,1117],{},"signUpHandler",[1073,1119,1120,1122,1127],{},[1091,1121,1093],{},[1091,1123,1124],{},[875,1125,1126],{},"\u002Flogout",[1091,1128,1129],{},[875,1130,1131],{},"logoutHandler",[848,1133,1134,1135,1138],{},"Each route enforces CSRF verification, ",[875,1136,1137],{},"Content-Type: application\u002Fjson"," validation, and a 1 KB body limit before the controller runs. The logout route additionally rejects any request that carries a body or query string.",[865,1140],{},[868,1142,424],{"id":1143},"login",[848,1145,1146,1148,1149,1152,1153,1155,1156,1159],{},[875,1147,1103],{}," accepts ",[875,1150,1151],{},"{ email, password }"," as a JSON body. It proxies the credentials to the IAM ",[875,1154,1098],{}," endpoint. On success, the IAM service returns an access token and issues a ",[875,1157,1158],{},"session"," refresh token cookie. The login handler writes two additional cookies to the response:",[1067,1161,1162,1175],{},[1070,1163,1164],{},[1073,1165,1166,1169,1172],{},[1076,1167,1168],{},"Cookie",[1076,1170,1171],{},"Value",[1076,1173,1174],{},"Attributes",[1086,1176,1177,1198],{},[1073,1178,1179,1184,1187],{},[1091,1180,1181],{},[875,1182,1183],{},"__Secure-a",[1091,1185,1186],{},"Access token",[1091,1188,1189,855,1192,855,1195],{},[875,1190,1191],{},"HttpOnly",[875,1193,1194],{},"Secure",[875,1196,1197],{},"SameSite=Strict",[1073,1199,1200,1205,1208],{},[1091,1201,1202],{},[875,1203,1204],{},"a-iat",[1091,1206,1207],{},"Access token issued-at timestamp",[1091,1209,1210,855,1212,855,1214],{},[875,1211,1191],{},[875,1213,1194],{},[875,1215,1197],{},[848,1217,1218,1219,1221,1222,1225],{},"The ",[875,1220,1158],{}," cookie from the IAM response is forwarded as-is via ",[875,1223,1224],{},"Set-Cookie"," headers.",[848,1227,1228,1229,1232,1233,1236],{},"After writing cookies the handler redirects to ",[875,1230,1231],{},"onSuccessRedirect"," with HTTP 303. When the request includes an ",[875,1234,1235],{},"Accept: application\u002Fjson"," header, it returns JSON instead:",[880,1238,1241],{"className":1239,"code":1240,"language":5,"meta":886,"style":886},"language-json shiki shiki-themes light-plus light-plus dracula","{ \"ok\": true, \"redirectTo\": \"\u002Fdashboard\" }\n",[875,1242,1243],{"__ignoreMap":886},[890,1244,1245,1248,1252,1256,1258,1261,1265,1267,1269,1272,1274,1276,1279,1282,1284],{"class":892,"line":893},[890,1246,1247],{"class":900},"{ ",[890,1249,1251],{"class":1250},"saJyd","\"",[890,1253,1255],{"class":1254},"s_W10","ok",[890,1257,1251],{"class":1250},[890,1259,1260],{"class":963},":",[890,1262,1264],{"class":1263},"sjR7W"," true",[890,1266,855],{"class":900},[890,1268,1251],{"class":1250},[890,1270,1271],{"class":1254},"redirectTo",[890,1273,1251],{"class":1250},[890,1275,1260],{"class":963},[890,1277,1278],{"class":914}," \"",[890,1280,1281],{"class":918},"\u002Fdashboard",[890,1283,1251],{"class":914},[890,1285,1286],{"class":900}," }\n",[848,1288,1289],{},"Error responses:",[1067,1291,1292,1302],{},[1070,1293,1294],{},[1073,1295,1296,1299],{},[1076,1297,1298],{},"IAM status",[1076,1300,1301],{},"Handler response",[1086,1303,1304,1312,1320,1332],{},[1073,1305,1306,1309],{},[1091,1307,1308],{},"400 or 401",[1091,1310,1311],{},"HTTP 401, invalid credentials",[1073,1313,1314,1317],{},[1091,1315,1316],{},"403",[1091,1318,1319],{},"HTTP 403, banned or blacklisted",[1073,1321,1322,1325],{},[1091,1323,1324],{},"429",[1091,1326,1327,1328,1331],{},"HTTP 429, rate limited, ",[875,1329,1330],{},"Retry-After"," header forwarded",[1073,1333,1334,1337],{},[1091,1335,1336],{},"500",[1091,1338,1339],{},"HTTP 500, server error",[865,1341],{},[868,1343,420],{"id":858},[848,1345,1346,1348,1349,1352,1353,1356,1357,1359],{},[875,1347,1117],{}," accepts the same pipeline as login: CSRF check, ",[875,1350,1351],{},"Content-Type"," validation, 1 KB body limit. It proxies the request body as-is to the IAM ",[875,1354,1355],{},"\u002Fauth\u002Fsignup"," endpoint. The IAM service handles all validation: email uniqueness, password strength, disposable email detection, and credential hashing. On success, the handler sets the same cookies as login and redirects to ",[875,1358,1231],{},".",[848,1361,1362,1363,1366],{},"The body shape is determined entirely by the IAM service configuration. See ",[852,1364,1365],{"href":421},"IAM Signup"," for the required fields and schema.",[865,1368],{},[868,1370,428],{"id":862},[848,1372,1373,1375,1376,1379,1380,1382],{},[875,1374,1131],{}," sends a signed POST to the IAM ",[875,1377,1378],{},"\u002Fauth\u002Flogout"," endpoint with the ",[875,1381,1158],{}," refresh token. On success, it deletes all session cookies from the response:",[1067,1384,1385,1395],{},[1070,1386,1387],{},[1073,1388,1389,1392],{},[1076,1390,1391],{},"Cookie cleared",[1076,1393,1394],{},"Notes",[1086,1396,1397,1405,1414,1423],{},[1073,1398,1399,1403],{},[1091,1400,1401],{},[875,1402,1183],{},[1091,1404,1186],{},[1073,1406,1407,1411],{},[1091,1408,1409],{},[875,1410,1204],{},[1091,1412,1413],{},"Access token issued-at",[1073,1415,1416,1420],{},[1091,1417,1418],{},[875,1419,1158],{},[1091,1421,1422],{},"Refresh token",[1073,1424,1425,1430],{},[1091,1426,1427],{},[875,1428,1429],{},"iat",[1091,1431,1432],{},"Session issued-at (if present)",[848,1434,1435],{},"The handler also deletes the access token entry from the local LRU metadata cache so subsequent rotation checks do not find stale data.",[848,1437,1438],{},"The logout handler rejects requests that carry a body or a query string with HTTP 400 or 415. This prevents information leakage through unexpected payloads.",[848,1440,1441,1442,1445,1446,1448],{},"After clearing cookies the handler redirects to the root of the domain derived from ",[875,1443,1444],{},"operationalConfig.domain",". When the request includes ",[875,1447,1235],{},", it returns:",[880,1450,1452],{"className":1239,"code":1451,"language":5,"meta":886,"style":886},"{ \"ok\": true, \"redirectTo\": \"\u002F\" }\n",[875,1453,1454],{"__ignoreMap":886},[890,1455,1456,1458,1460,1462,1464,1466,1468,1470,1472,1474,1476,1478,1480,1483,1485],{"class":892,"line":893},[890,1457,1247],{"class":900},[890,1459,1251],{"class":1250},[890,1461,1255],{"class":1254},[890,1463,1251],{"class":1250},[890,1465,1260],{"class":963},[890,1467,1264],{"class":1263},[890,1469,855],{"class":900},[890,1471,1251],{"class":1250},[890,1473,1271],{"class":1254},[890,1475,1251],{"class":1250},[890,1477,1260],{"class":963},[890,1479,1278],{"class":914},[890,1481,1482],{"class":918},"\u002F",[890,1484,1251],{"class":914},[890,1486,1286],{"class":900},[865,1488],{},[868,1490,1492],{"id":1491},"deduplication","Deduplication",[848,1494,1495,1496,1499],{},"All three controllers are wrapped with ",[875,1497,1498],{},"defineDeduplicatedEventHandler",", which prevents concurrent execution of the same handler for a given request identity. If two login requests for the same session arrive simultaneously, only one is processed and the other waits for the result. This avoids race conditions during high-load scenarios such as double-submit from the frontend.",[1501,1502,1503],"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 .sjR7W, html code.shiki .sjR7W{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#BD93F9}",{"title":886,"searchDepth":925,"depth":925,"links":1505},[1506,1507,1508,1509,1510],{"id":870,"depth":925,"text":871},{"id":1143,"depth":925,"text":424},{"id":858,"depth":925,"text":420},{"id":862,"depth":925,"text":428},{"id":1491,"depth":925,"text":1492},"The built-in login, signup, and logout controllers, the pipeline each one enforces, how token cookies are set, and how to register the routes with useAuthRoutes.","md","i-lucide-log-in",{},null,"---\ntitle: Auth Flows\ndescription: The built-in login, signup, and logout controllers, the pipeline each one enforces, how token cookies are set, and how to register the routes with useAuthRoutes.\nicon: i-lucide-log-in\n---\n\nThe module provides three ready-to-use controllers for the core credential flows. Each controller proxies to the IAM service over a signed connection and writes the resulting cookies to the response. The IAM service handles all credential validation, password hashing, anomaly detection, and rate limiting. See the [IAM login](\u002Fdocs\u002Fiam\u002Fessentials\u002Flogin), [signup](\u002Fdocs\u002Fiam\u002Fessentials\u002Fsignup), and [logout](\u002Fdocs\u002Fiam\u002Fessentials\u002Flogout) pages for the server-side details.\n\n---\n\n## Registering routes\n\n`useAuthRoutes(router)` registers all three controllers on an H3 router (v1) or H3 app (v2) in a single call. When using the Nuxt module, it is called automatically during plugin setup, so you do not need to call it yourself.\n\n```ts [H3 v1]\nimport { createRouter } from 'h3'\nimport { useAuthRoutes } from 'auth-h3client\u002Fv1'\n\nconst router = createRouter()\nuseAuthRoutes(router)\n```\n\n```ts [H3 v2]\nimport { H3 } from 'h3'\nimport { useAuthRoutes } from 'auth-h3client\u002Fv2'\n\nconst app = new H3()\nuseAuthRoutes(app)\n```\n\nThe registered routes are:\n\n| Method | Path | Controller |\n|---|---|---|\n| POST | `\u002Flogin` | `loginHandler` |\n| POST | `\u002Fsignup` | `signUpHandler` |\n| POST | `\u002Flogout` | `logoutHandler` |\n\nEach route enforces CSRF verification, `Content-Type: application\u002Fjson` validation, and a 1 KB body limit before the controller runs. The logout route additionally rejects any request that carries a body or query string.\n\n---\n\n## Login\n\n`loginHandler` accepts `{ email, password }` as a JSON body. It proxies the credentials to the IAM `\u002Flogin` endpoint. On success, the IAM service returns an access token and issues a `session` refresh token cookie. The login handler writes two additional cookies to the response:\n\n| Cookie | Value | Attributes |\n|---|---|---|\n| `__Secure-a` | Access token | `HttpOnly`, `Secure`, `SameSite=Strict` |\n| `a-iat` | Access token issued-at timestamp | `HttpOnly`, `Secure`, `SameSite=Strict` |\n\nThe `session` cookie from the IAM response is forwarded as-is via `Set-Cookie` headers.\n\nAfter writing cookies the handler redirects to `onSuccessRedirect` with HTTP 303. When the request includes an `Accept: application\u002Fjson` header, it returns JSON instead:\n\n```json\n{ \"ok\": true, \"redirectTo\": \"\u002Fdashboard\" }\n```\n\nError responses:\n\n| IAM status | Handler response |\n|---|---|\n| 400 or 401 | HTTP 401, invalid credentials |\n| 403 | HTTP 403, banned or blacklisted |\n| 429 | HTTP 429, rate limited, `Retry-After` header forwarded |\n| 500 | HTTP 500, server error |\n\n---\n\n## Signup\n\n`signUpHandler` accepts the same pipeline as login: CSRF check, `Content-Type` validation, 1 KB body limit. It proxies the request body as-is to the IAM `\u002Fauth\u002Fsignup` endpoint. The IAM service handles all validation: email uniqueness, password strength, disposable email detection, and credential hashing. On success, the handler sets the same cookies as login and redirects to `onSuccessRedirect`.\n\nThe body shape is determined entirely by the IAM service configuration. See [IAM Signup](\u002Fdocs\u002Fiam\u002Fessentials\u002Fsignup) for the required fields and schema.\n\n---\n\n## Logout\n\n`logoutHandler` sends a signed POST to the IAM `\u002Fauth\u002Flogout` endpoint with the `session` refresh token. On success, it deletes all session cookies from the response:\n\n| Cookie cleared | Notes |\n|---|---|\n| `__Secure-a` | Access token |\n| `a-iat` | Access token issued-at |\n| `session` | Refresh token |\n| `iat` | Session issued-at (if present) |\n\nThe handler also deletes the access token entry from the local LRU metadata cache so subsequent rotation checks do not find stale data.\n\nThe logout handler rejects requests that carry a body or a query string with HTTP 400 or 415. This prevents information leakage through unexpected payloads.\n\nAfter clearing cookies the handler redirects to the root of the domain derived from `operationalConfig.domain`. When the request includes `Accept: application\u002Fjson`, it returns:\n\n```json\n{ \"ok\": true, \"redirectTo\": \"\u002F\" }\n```\n\n---\n\n## Deduplication\n\nAll three controllers are wrapped with `defineDeduplicatedEventHandler`, which prevents concurrent execution of the same handler for a given request identity. If two login requests for the same session arrive simultaneously, only one is processed and the other waits for the result. This avoids race conditions during high-load scenarios such as double-submit from the frontend.",{"title":101,"description":1511},"GHINEqzxFEddYjbTxeHGsJjVmrcGMv4eluOYn3JJRds",[1520,1521],{"title":97,"path":98,"stem":99,"children":-1},{"title":105,"path":106,"stem":107,"children":-1},{"id":843,"title":101,"body":1523,"description":1511,"extension":1512,"icon":1513,"meta":2016,"module":1515,"navigation":8,"path":102,"rawbody":1516,"seo":2017,"stem":103,"__hash__":1518},{"type":845,"value":1524,"toc":2009},[1525,1533,1535,1537,1541,1607,1675,1677,1727,1731,1733,1735,1745,1791,1797,1803,1839,1841,1879,1881,1883,1893,1897,1899,1901,1909,1953,1955,1957,1963,1999,2001,2003,2007],[848,1526,850,1527,855,1529,859,1531,863],{},[852,1528,854],{"href":425},[852,1530,858],{"href":421},[852,1532,862],{"href":429},[865,1534],{},[868,1536,871],{"id":870},[848,1538,1539,878],{},[875,1540,877],{},[880,1542,1543],{"className":882,"code":883,"filename":884,"language":885,"meta":886,"style":886},[875,1544,1545,1563,1581,1585,1597],{"__ignoreMap":886},[890,1546,1547,1549,1551,1553,1555,1557,1559,1561],{"class":892,"line":893},[890,1548,897],{"class":896},[890,1550,901],{"class":900},[890,1552,905],{"class":904},[890,1554,908],{"class":900},[890,1556,911],{"class":896},[890,1558,915],{"class":914},[890,1560,919],{"class":918},[890,1562,922],{"class":914},[890,1564,1565,1567,1569,1571,1573,1575,1577,1579],{"class":892,"line":925},[890,1566,897],{"class":896},[890,1568,901],{"class":900},[890,1570,932],{"class":904},[890,1572,908],{"class":900},[890,1574,911],{"class":896},[890,1576,915],{"class":914},[890,1578,941],{"class":918},[890,1580,922],{"class":914},[890,1582,1583],{"class":892,"line":946},[890,1584,949],{"emptyLinePlaceholder":8},[890,1586,1587,1589,1591,1593,1595],{"class":892,"line":952},[890,1588,956],{"class":955},[890,1590,960],{"class":959},[890,1592,964],{"class":963},[890,1594,968],{"class":967},[890,1596,971],{"class":900},[890,1598,1599,1601,1603,1605],{"class":892,"line":974},[890,1600,932],{"class":967},[890,1602,979],{"class":900},[890,1604,982],{"class":904},[890,1606,985],{"class":900},[880,1608,1609],{"className":882,"code":988,"filename":989,"language":885,"meta":886,"style":886},[875,1610,1611,1629,1647,1651,1665],{"__ignoreMap":886},[890,1612,1613,1615,1617,1619,1621,1623,1625,1627],{"class":892,"line":893},[890,1614,897],{"class":896},[890,1616,901],{"class":900},[890,1618,1000],{"class":904},[890,1620,908],{"class":900},[890,1622,911],{"class":896},[890,1624,915],{"class":914},[890,1626,919],{"class":918},[890,1628,922],{"class":914},[890,1630,1631,1633,1635,1637,1639,1641,1643,1645],{"class":892,"line":925},[890,1632,897],{"class":896},[890,1634,901],{"class":900},[890,1636,932],{"class":904},[890,1638,908],{"class":900},[890,1640,911],{"class":896},[890,1642,915],{"class":914},[890,1644,1027],{"class":918},[890,1646,922],{"class":914},[890,1648,1649],{"class":892,"line":946},[890,1650,949],{"emptyLinePlaceholder":8},[890,1652,1653,1655,1657,1659,1661,1663],{"class":892,"line":952},[890,1654,956],{"class":955},[890,1656,1040],{"class":959},[890,1658,964],{"class":963},[890,1660,1046],{"class":1045},[890,1662,1049],{"class":967},[890,1664,971],{"class":900},[890,1666,1667,1669,1671,1673],{"class":892,"line":974},[890,1668,932],{"class":967},[890,1670,979],{"class":900},[890,1672,1060],{"class":904},[890,1674,985],{"class":900},[848,1676,1065],{},[1067,1678,1679,1689],{},[1070,1680,1681],{},[1073,1682,1683,1685,1687],{},[1076,1684,1078],{},[1076,1686,1081],{},[1076,1688,1084],{},[1086,1690,1691,1703,1715],{},[1073,1692,1693,1695,1699],{},[1091,1694,1093],{},[1091,1696,1697],{},[875,1698,1098],{},[1091,1700,1701],{},[875,1702,1103],{},[1073,1704,1705,1707,1711],{},[1091,1706,1093],{},[1091,1708,1709],{},[875,1710,1112],{},[1091,1712,1713],{},[875,1714,1117],{},[1073,1716,1717,1719,1723],{},[1091,1718,1093],{},[1091,1720,1721],{},[875,1722,1126],{},[1091,1724,1725],{},[875,1726,1131],{},[848,1728,1134,1729,1138],{},[875,1730,1137],{},[865,1732],{},[868,1734,424],{"id":1143},[848,1736,1737,1148,1739,1152,1741,1155,1743,1159],{},[875,1738,1103],{},[875,1740,1151],{},[875,1742,1098],{},[875,1744,1158],{},[1067,1746,1747,1757],{},[1070,1748,1749],{},[1073,1750,1751,1753,1755],{},[1076,1752,1168],{},[1076,1754,1171],{},[1076,1756,1174],{},[1086,1758,1759,1775],{},[1073,1760,1761,1765,1767],{},[1091,1762,1763],{},[875,1764,1183],{},[1091,1766,1186],{},[1091,1768,1769,855,1771,855,1773],{},[875,1770,1191],{},[875,1772,1194],{},[875,1774,1197],{},[1073,1776,1777,1781,1783],{},[1091,1778,1779],{},[875,1780,1204],{},[1091,1782,1207],{},[1091,1784,1785,855,1787,855,1789],{},[875,1786,1191],{},[875,1788,1194],{},[875,1790,1197],{},[848,1792,1218,1793,1221,1795,1225],{},[875,1794,1158],{},[875,1796,1224],{},[848,1798,1228,1799,1232,1801,1236],{},[875,1800,1231],{},[875,1802,1235],{},[880,1804,1805],{"className":1239,"code":1240,"language":5,"meta":886,"style":886},[875,1806,1807],{"__ignoreMap":886},[890,1808,1809,1811,1813,1815,1817,1819,1821,1823,1825,1827,1829,1831,1833,1835,1837],{"class":892,"line":893},[890,1810,1247],{"class":900},[890,1812,1251],{"class":1250},[890,1814,1255],{"class":1254},[890,1816,1251],{"class":1250},[890,1818,1260],{"class":963},[890,1820,1264],{"class":1263},[890,1822,855],{"class":900},[890,1824,1251],{"class":1250},[890,1826,1271],{"class":1254},[890,1828,1251],{"class":1250},[890,1830,1260],{"class":963},[890,1832,1278],{"class":914},[890,1834,1281],{"class":918},[890,1836,1251],{"class":914},[890,1838,1286],{"class":900},[848,1840,1289],{},[1067,1842,1843,1851],{},[1070,1844,1845],{},[1073,1846,1847,1849],{},[1076,1848,1298],{},[1076,1850,1301],{},[1086,1852,1853,1859,1865,1873],{},[1073,1854,1855,1857],{},[1091,1856,1308],{},[1091,1858,1311],{},[1073,1860,1861,1863],{},[1091,1862,1316],{},[1091,1864,1319],{},[1073,1866,1867,1869],{},[1091,1868,1324],{},[1091,1870,1327,1871,1331],{},[875,1872,1330],{},[1073,1874,1875,1877],{},[1091,1876,1336],{},[1091,1878,1339],{},[865,1880],{},[868,1882,420],{"id":858},[848,1884,1885,1348,1887,1352,1889,1356,1891,1359],{},[875,1886,1117],{},[875,1888,1351],{},[875,1890,1355],{},[875,1892,1231],{},[848,1894,1362,1895,1366],{},[852,1896,1365],{"href":421},[865,1898],{},[868,1900,428],{"id":862},[848,1902,1903,1375,1905,1379,1907,1382],{},[875,1904,1131],{},[875,1906,1378],{},[875,1908,1158],{},[1067,1910,1911,1919],{},[1070,1912,1913],{},[1073,1914,1915,1917],{},[1076,1916,1391],{},[1076,1918,1394],{},[1086,1920,1921,1929,1937,1945],{},[1073,1922,1923,1927],{},[1091,1924,1925],{},[875,1926,1183],{},[1091,1928,1186],{},[1073,1930,1931,1935],{},[1091,1932,1933],{},[875,1934,1204],{},[1091,1936,1413],{},[1073,1938,1939,1943],{},[1091,1940,1941],{},[875,1942,1158],{},[1091,1944,1422],{},[1073,1946,1947,1951],{},[1091,1948,1949],{},[875,1950,1429],{},[1091,1952,1432],{},[848,1954,1435],{},[848,1956,1438],{},[848,1958,1441,1959,1445,1961,1448],{},[875,1960,1444],{},[875,1962,1235],{},[880,1964,1965],{"className":1239,"code":1451,"language":5,"meta":886,"style":886},[875,1966,1967],{"__ignoreMap":886},[890,1968,1969,1971,1973,1975,1977,1979,1981,1983,1985,1987,1989,1991,1993,1995,1997],{"class":892,"line":893},[890,1970,1247],{"class":900},[890,1972,1251],{"class":1250},[890,1974,1255],{"class":1254},[890,1976,1251],{"class":1250},[890,1978,1260],{"class":963},[890,1980,1264],{"class":1263},[890,1982,855],{"class":900},[890,1984,1251],{"class":1250},[890,1986,1271],{"class":1254},[890,1988,1251],{"class":1250},[890,1990,1260],{"class":963},[890,1992,1278],{"class":914},[890,1994,1482],{"class":918},[890,1996,1251],{"class":914},[890,1998,1286],{"class":900},[865,2000],{},[868,2002,1492],{"id":1491},[848,2004,1495,2005,1499],{},[875,2006,1498],{},[1501,2008,1503],{},{"title":886,"searchDepth":925,"depth":925,"links":2010},[2011,2012,2013,2014,2015],{"id":870,"depth":925,"text":871},{"id":1143,"depth":925,"text":424},{"id":858,"depth":925,"text":420},{"id":862,"depth":925,"text":428},{"id":1491,"depth":925,"text":1492},{},{"title":101,"description":1511},1780436290773]