[{"data":1,"prerenderedAt":6581},["ShallowReactive",2],{"navLinks":3,"sidebar_docs_navigation_\u002Fdocs\u002Fauth-h3client":64,"navigation":217,"navLinks_footer":829,"\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fh3-nitro_page":842,"\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fh3-nitro_surround":3933,"\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fh3-nitro":3936},{"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":176,"body":844,"description":3925,"extension":3926,"icon":3927,"meta":3928,"module":3929,"navigation":8,"path":177,"rawbody":3930,"seo":3931,"stem":178,"__hash__":3932},"docs\u002Fdocs\u002Fauth-h3client\u002F05.guides\u002F00.h3-nitro.md",{"type":845,"value":846,"toc":3907},"minimark",[847,856,859,864,929,931,934,941,1423,1430,1432,1436,1870,1898,1902,2372,2374,2378,2729,2733,2746,2760,2764,2767,3050,3052,3056,3167,3177,3179,3183,3186,3189,3322,3325,3448,3456,3458,3462,3465,3830,3838,3840,3849,3853,3856,3898,3903],[848,849,850,851,855],"p",{},"The Nuxt module handles all wiring automatically, but ",[852,853,854],"code",{},"auth-h3client"," also works as a standalone library with plain H3 or Nitro servers. The public API is identical across H3 v1 and v2: the same function names, the same configuration object, the same handler wrappers. The differences are in how H3 itself registers middleware and defines handlers.",[857,858],"hr",{},[860,861,863],"h2",{"id":862},"import-paths","Import paths",[865,866,867,883],"table",{},[868,869,870],"thead",{},[871,872,873,877,880],"tr",{},[874,875,876],"th",{},"Import",[874,878,879],{},"H3 version",[874,881,882],{},"Notes",[884,885,886,903,916],"tbody",{},[871,887,888,897,900],{},[889,890,891,893,894],"td",{},[852,892,854],{}," or ",[852,895,896],{},"auth-h3client\u002Fv1",[889,898,899],{},"H3 v1 (1.15.x)",[889,901,902],{},"Default, backwards compatible",[871,904,905,910,913],{},[889,906,907],{},[852,908,909],{},"auth-h3client\u002Fv2",[889,911,912],{},"H3 v2 (2.0 beta)",[889,914,915],{},"Opt-in for H3 v2 projects",[871,917,918,923,926],{},[889,919,920],{},[852,921,922],{},"auth-h3client\u002Fclient",[889,924,925],{},"N\u002FA",[889,927,928],{},"Vue\u002FNuxt composables only",[857,930],{},[860,932,192],{"id":933},"configuration",[848,935,936,937,940],{},"Call ",[852,938,939],{},"configuration()"," exactly once when your server starts. This sets the global configuration used by every handler and middleware in the library.",[942,943,948],"pre",{"className":944,"code":945,"language":946,"meta":947,"style":947},"language-ts shiki shiki-themes light-plus light-plus dracula","import { configuration } from 'auth-h3client\u002Fv1'\nimport { createStorage } from 'unstorage'\nimport memoryDriver from 'unstorage\u002Fdrivers\u002Fmemory'\n\nconst storage = createStorage({ driver: memoryDriver() })\n\nconfiguration({\n  server: {\n    auth_location: {\n      serverOrDNS: process.env.AUTH_HOST || 'localhost',\n      port: Number(process.env.AUTH_PORT) || 4000,\n    },\n    hmac: {\n      enableHmac: true,\n      clientId: process.env.HMAC_CLIENT_ID!,\n      sharedSecret: process.env.HMAC_SHARED_SECRET!,\n    },\n    ssl: { enableSSL: false },\n    cryptoCookiesSecret: process.env.AUTH_CRYPTO_COOKIES!,\n  },\n  uStorage: {\n    storage,\n    cacheOptions: { successTtl: 60 * 60 * 24 * 30, rateLimitTtl: 10 },\n  },\n  onSuccessRedirect: 'https:\u002F\u002Fapp.example.com\u002Fdashboard',\n  enableFireWallBans: false,\n  logLevel: 'info',\n})\n","ts","",[852,949,950,982,1003,1021,1027,1061,1066,1074,1085,1095,1132,1170,1176,1186,1200,1224,1247,1252,1273,1296,1302,1312,1320,1366,1371,1388,1400,1417],{"__ignoreMap":947},[951,952,955,959,963,966,969,972,976,979],"span",{"class":953,"line":954},"line",1,[951,956,958],{"class":957},"sZ328","import",[951,960,962],{"class":961},"sDd4n"," { ",[951,964,933],{"class":965},"sjsA6",[951,967,968],{"class":961}," } ",[951,970,971],{"class":957},"from",[951,973,975],{"class":974},"sFkSl"," '",[951,977,896],{"class":978},"sFB1V",[951,980,981],{"class":974},"'\n",[951,983,985,987,989,992,994,996,998,1001],{"class":953,"line":984},2,[951,986,958],{"class":957},[951,988,962],{"class":961},[951,990,991],{"class":965},"createStorage",[951,993,968],{"class":961},[951,995,971],{"class":957},[951,997,975],{"class":974},[951,999,1000],{"class":978},"unstorage",[951,1002,981],{"class":974},[951,1004,1006,1008,1011,1014,1016,1019],{"class":953,"line":1005},3,[951,1007,958],{"class":957},[951,1009,1010],{"class":965}," memoryDriver",[951,1012,1013],{"class":957}," from",[951,1015,975],{"class":974},[951,1017,1018],{"class":978},"unstorage\u002Fdrivers\u002Fmemory",[951,1020,981],{"class":974},[951,1022,1024],{"class":953,"line":1023},4,[951,1025,1026],{"emptyLinePlaceholder":8},"\n",[951,1028,1030,1034,1038,1042,1046,1049,1052,1056,1058],{"class":953,"line":1029},5,[951,1031,1033],{"class":1032},"sl46w","const",[951,1035,1037],{"class":1036},"s3JHE"," storage",[951,1039,1041],{"class":1040},"saOXh"," =",[951,1043,1045],{"class":1044},"sHOzp"," createStorage",[951,1047,1048],{"class":961},"({ ",[951,1050,1051],{"class":965},"driver",[951,1053,1055],{"class":1054},"s34zl",":",[951,1057,1010],{"class":1044},[951,1059,1060],{"class":961},"() })\n",[951,1062,1064],{"class":953,"line":1063},6,[951,1065,1026],{"emptyLinePlaceholder":8},[951,1067,1069,1071],{"class":953,"line":1068},7,[951,1070,933],{"class":1044},[951,1072,1073],{"class":961},"({\n",[951,1075,1077,1080,1082],{"class":953,"line":1076},8,[951,1078,1079],{"class":965},"  server",[951,1081,1055],{"class":1054},[951,1083,1084],{"class":961}," {\n",[951,1086,1088,1091,1093],{"class":953,"line":1087},9,[951,1089,1090],{"class":965},"    auth_location",[951,1092,1055],{"class":1054},[951,1094,1084],{"class":961},[951,1096,1098,1101,1103,1106,1109,1112,1114,1118,1121,1123,1126,1129],{"class":953,"line":1097},10,[951,1099,1100],{"class":965},"      serverOrDNS",[951,1102,1055],{"class":1054},[951,1104,1105],{"class":965}," process",[951,1107,1108],{"class":961},".",[951,1110,1111],{"class":965},"env",[951,1113,1108],{"class":961},[951,1115,1117],{"class":1116},"sPzPf","AUTH_HOST",[951,1119,1120],{"class":1040}," ||",[951,1122,975],{"class":974},[951,1124,1125],{"class":978},"localhost",[951,1127,1128],{"class":974},"'",[951,1130,1131],{"class":961},",\n",[951,1133,1135,1138,1140,1143,1146,1149,1151,1153,1155,1158,1161,1164,1168],{"class":953,"line":1134},11,[951,1136,1137],{"class":965},"      port",[951,1139,1055],{"class":1054},[951,1141,1142],{"class":1044}," Number",[951,1144,1145],{"class":961},"(",[951,1147,1148],{"class":965},"process",[951,1150,1108],{"class":961},[951,1152,1111],{"class":965},[951,1154,1108],{"class":961},[951,1156,1157],{"class":1116},"AUTH_PORT",[951,1159,1160],{"class":961},") ",[951,1162,1163],{"class":1040},"||",[951,1165,1167],{"class":1166},"spgvN"," 4000",[951,1169,1131],{"class":961},[951,1171,1173],{"class":953,"line":1172},12,[951,1174,1175],{"class":961},"    },\n",[951,1177,1179,1182,1184],{"class":953,"line":1178},13,[951,1180,1181],{"class":965},"    hmac",[951,1183,1055],{"class":1054},[951,1185,1084],{"class":961},[951,1187,1189,1192,1194,1198],{"class":953,"line":1188},14,[951,1190,1191],{"class":965},"      enableHmac",[951,1193,1055],{"class":1054},[951,1195,1197],{"class":1196},"sjR7W"," true",[951,1199,1131],{"class":961},[951,1201,1203,1206,1208,1210,1212,1214,1216,1219,1222],{"class":953,"line":1202},15,[951,1204,1205],{"class":965},"      clientId",[951,1207,1055],{"class":1054},[951,1209,1105],{"class":965},[951,1211,1108],{"class":961},[951,1213,1111],{"class":965},[951,1215,1108],{"class":961},[951,1217,1218],{"class":1116},"HMAC_CLIENT_ID",[951,1220,1221],{"class":1040},"!",[951,1223,1131],{"class":961},[951,1225,1227,1230,1232,1234,1236,1238,1240,1243,1245],{"class":953,"line":1226},16,[951,1228,1229],{"class":965},"      sharedSecret",[951,1231,1055],{"class":1054},[951,1233,1105],{"class":965},[951,1235,1108],{"class":961},[951,1237,1111],{"class":965},[951,1239,1108],{"class":961},[951,1241,1242],{"class":1116},"HMAC_SHARED_SECRET",[951,1244,1221],{"class":1040},[951,1246,1131],{"class":961},[951,1248,1250],{"class":953,"line":1249},17,[951,1251,1175],{"class":961},[951,1253,1255,1258,1260,1262,1265,1267,1270],{"class":953,"line":1254},18,[951,1256,1257],{"class":965},"    ssl",[951,1259,1055],{"class":1054},[951,1261,962],{"class":961},[951,1263,1264],{"class":965},"enableSSL",[951,1266,1055],{"class":1054},[951,1268,1269],{"class":1196}," false",[951,1271,1272],{"class":961}," },\n",[951,1274,1276,1279,1281,1283,1285,1287,1289,1292,1294],{"class":953,"line":1275},19,[951,1277,1278],{"class":965},"    cryptoCookiesSecret",[951,1280,1055],{"class":1054},[951,1282,1105],{"class":965},[951,1284,1108],{"class":961},[951,1286,1111],{"class":965},[951,1288,1108],{"class":961},[951,1290,1291],{"class":1116},"AUTH_CRYPTO_COOKIES",[951,1293,1221],{"class":1040},[951,1295,1131],{"class":961},[951,1297,1299],{"class":953,"line":1298},20,[951,1300,1301],{"class":961},"  },\n",[951,1303,1305,1308,1310],{"class":953,"line":1304},21,[951,1306,1307],{"class":965},"  uStorage",[951,1309,1055],{"class":1054},[951,1311,1084],{"class":961},[951,1313,1315,1318],{"class":953,"line":1314},22,[951,1316,1317],{"class":965},"    storage",[951,1319,1131],{"class":961},[951,1321,1323,1326,1328,1330,1333,1335,1338,1341,1343,1345,1348,1350,1353,1356,1359,1361,1364],{"class":953,"line":1322},23,[951,1324,1325],{"class":965},"    cacheOptions",[951,1327,1055],{"class":1054},[951,1329,962],{"class":961},[951,1331,1332],{"class":965},"successTtl",[951,1334,1055],{"class":1054},[951,1336,1337],{"class":1166}," 60",[951,1339,1340],{"class":1040}," *",[951,1342,1337],{"class":1166},[951,1344,1340],{"class":1040},[951,1346,1347],{"class":1166}," 24",[951,1349,1340],{"class":1040},[951,1351,1352],{"class":1166}," 30",[951,1354,1355],{"class":961},", ",[951,1357,1358],{"class":965},"rateLimitTtl",[951,1360,1055],{"class":1054},[951,1362,1363],{"class":1166}," 10",[951,1365,1272],{"class":961},[951,1367,1369],{"class":953,"line":1368},24,[951,1370,1301],{"class":961},[951,1372,1374,1377,1379,1381,1384,1386],{"class":953,"line":1373},25,[951,1375,1376],{"class":965},"  onSuccessRedirect",[951,1378,1055],{"class":1054},[951,1380,975],{"class":974},[951,1382,1383],{"class":978},"https:\u002F\u002Fapp.example.com\u002Fdashboard",[951,1385,1128],{"class":974},[951,1387,1131],{"class":961},[951,1389,1391,1394,1396,1398],{"class":953,"line":1390},26,[951,1392,1393],{"class":965},"  enableFireWallBans",[951,1395,1055],{"class":1054},[951,1397,1269],{"class":1196},[951,1399,1131],{"class":961},[951,1401,1403,1406,1408,1410,1413,1415],{"class":953,"line":1402},27,[951,1404,1405],{"class":965},"  logLevel",[951,1407,1055],{"class":1054},[951,1409,975],{"class":974},[951,1411,1412],{"class":978},"info",[951,1414,1128],{"class":974},[951,1416,1131],{"class":961},[951,1418,1420],{"class":953,"line":1419},28,[951,1421,1422],{"class":961},"})\n",[848,1424,1425,1426,1429],{},"See ",[1427,1428,192],"a",{"href":193}," for the complete reference of all options.",[857,1431],{},[860,1433,1435],{"id":1434},"h3-v1-setup","H3 v1 setup",[942,1437,1439],{"className":944,"code":1438,"language":946,"meta":947,"style":947},"import { createApp, createRouter } from 'h3'\nimport {\n  configuration,\n  httpLogger,\n  isIPValid,\n  botDetectorMiddleware,\n  generateCsrfCookie,\n  useAuthRoutes,\n  magicLinksRouter,\n  useOAuthRoutes,\n  bounceRouter,\n  getAuthStatusHandler,\n} from 'auth-h3client\u002Fv1'\n  getApiListsController,\n\nconfiguration({ \u002F* ... *\u002F })\n\nconst app = createApp()\n\n\u002F\u002F Global middleware (order matters)\nhttpLogger()(app)     \u002F\u002F HTTP request logging\napp.use(isIPValid)             \u002F\u002F IP extraction and validation\napp.use(botDetectorMiddleware) \u002F\u002F Bot detection via IAM \u002Fcheck\napp.use(generateCsrfCookie)   \u002F\u002F CSRF cookie issuance\n\n\u002F\u002F Routes\nconst router = createRouter()\nuseAuthRoutes(router)           \u002F\u002F POST \u002Flogin, \u002Fsignup, \u002Flogout\nuseOAuthRoutes(router)          \u002F\u002F GET \u002Foauth\u002F:provider, \u002Foauth\u002Fcallback\u002F:provider\nbounceRouter(router)            \u002F\u002F GET \u002Fauth\u002Fbounce\nmagicLinksRouter(router, 'api') \u002F\u002F MFA, password reset, email change\n\n\u002F\u002F Auth status endpoint\nrouter.get('\u002Fauth\u002Fusers\u002FauthStatus', getAuthStatusHandler)\n\n\u002F\u002F Optional API token inventory endpoint\nrouter.get('\u002Fapi\u002Fauth\u002Fapi-tokens', getApiListsController)\n\napp.use(router)\n",[852,1440,1441,1466,1472,1479,1486,1493,1500,1507,1514,1521,1528,1535,1542,1555,1562,1566,1579,1583,1598,1602,1607,1624,1644,1662,1681,1685,1690,1704,1720,1736,1752,1776,1781,1787,1814,1819,1825,1850,1855],{"__ignoreMap":947},[951,1442,1443,1445,1447,1450,1452,1455,1457,1459,1461,1464],{"class":953,"line":954},[951,1444,958],{"class":957},[951,1446,962],{"class":961},[951,1448,1449],{"class":965},"createApp",[951,1451,1355],{"class":961},[951,1453,1454],{"class":965},"createRouter",[951,1456,968],{"class":961},[951,1458,971],{"class":957},[951,1460,975],{"class":974},[951,1462,1463],{"class":978},"h3",[951,1465,981],{"class":974},[951,1467,1468,1470],{"class":953,"line":984},[951,1469,958],{"class":957},[951,1471,1084],{"class":961},[951,1473,1474,1477],{"class":953,"line":1005},[951,1475,1476],{"class":965},"  configuration",[951,1478,1131],{"class":961},[951,1480,1481,1484],{"class":953,"line":1023},[951,1482,1483],{"class":965},"  httpLogger",[951,1485,1131],{"class":961},[951,1487,1488,1491],{"class":953,"line":1029},[951,1489,1490],{"class":965},"  isIPValid",[951,1492,1131],{"class":961},[951,1494,1495,1498],{"class":953,"line":1063},[951,1496,1497],{"class":965},"  botDetectorMiddleware",[951,1499,1131],{"class":961},[951,1501,1502,1505],{"class":953,"line":1068},[951,1503,1504],{"class":965},"  generateCsrfCookie",[951,1506,1131],{"class":961},[951,1508,1509,1512],{"class":953,"line":1076},[951,1510,1511],{"class":965},"  useAuthRoutes",[951,1513,1131],{"class":961},[951,1515,1516,1519],{"class":953,"line":1087},[951,1517,1518],{"class":965},"  magicLinksRouter",[951,1520,1131],{"class":961},[951,1522,1523,1526],{"class":953,"line":1097},[951,1524,1525],{"class":965},"  useOAuthRoutes",[951,1527,1131],{"class":961},[951,1529,1530,1533],{"class":953,"line":1134},[951,1531,1532],{"class":965},"  bounceRouter",[951,1534,1131],{"class":961},[951,1536,1537,1540],{"class":953,"line":1172},[951,1538,1539],{"class":965},"  getAuthStatusHandler",[951,1541,1131],{"class":961},[951,1543,1544,1547,1549,1551,1553],{"class":953,"line":1178},[951,1545,1546],{"class":961},"} ",[951,1548,971],{"class":957},[951,1550,975],{"class":974},[951,1552,896],{"class":978},[951,1554,981],{"class":974},[951,1556,1557,1560],{"class":953,"line":1188},[951,1558,1559],{"class":965},"  getApiListsController",[951,1561,1131],{"class":961},[951,1563,1564],{"class":953,"line":1202},[951,1565,1026],{"emptyLinePlaceholder":8},[951,1567,1568,1570,1572,1576],{"class":953,"line":1226},[951,1569,933],{"class":1044},[951,1571,1048],{"class":961},[951,1573,1575],{"class":1574},"sghk6","\u002F* ... *\u002F",[951,1577,1578],{"class":961}," })\n",[951,1580,1581],{"class":953,"line":1249},[951,1582,1026],{"emptyLinePlaceholder":8},[951,1584,1585,1587,1590,1592,1595],{"class":953,"line":1254},[951,1586,1033],{"class":1032},[951,1588,1589],{"class":1036}," app",[951,1591,1041],{"class":1040},[951,1593,1594],{"class":1044}," createApp",[951,1596,1597],{"class":961},"()\n",[951,1599,1600],{"class":953,"line":1275},[951,1601,1026],{"emptyLinePlaceholder":8},[951,1603,1604],{"class":953,"line":1298},[951,1605,1606],{"class":1574},"\u002F\u002F Global middleware (order matters)\n",[951,1608,1609,1612,1615,1618,1621],{"class":953,"line":1304},[951,1610,1611],{"class":1044},"httpLogger",[951,1613,1614],{"class":961},"()(",[951,1616,1617],{"class":965},"app",[951,1619,1620],{"class":961},")     ",[951,1622,1623],{"class":1574},"\u002F\u002F HTTP request logging\n",[951,1625,1626,1628,1630,1633,1635,1638,1641],{"class":953,"line":1314},[951,1627,1617],{"class":965},[951,1629,1108],{"class":961},[951,1631,1632],{"class":1044},"use",[951,1634,1145],{"class":961},[951,1636,1637],{"class":965},"isIPValid",[951,1639,1640],{"class":961},")             ",[951,1642,1643],{"class":1574},"\u002F\u002F IP extraction and validation\n",[951,1645,1646,1648,1650,1652,1654,1657,1659],{"class":953,"line":1322},[951,1647,1617],{"class":965},[951,1649,1108],{"class":961},[951,1651,1632],{"class":1044},[951,1653,1145],{"class":961},[951,1655,1656],{"class":965},"botDetectorMiddleware",[951,1658,1160],{"class":961},[951,1660,1661],{"class":1574},"\u002F\u002F Bot detection via IAM \u002Fcheck\n",[951,1663,1664,1666,1668,1670,1672,1675,1678],{"class":953,"line":1368},[951,1665,1617],{"class":965},[951,1667,1108],{"class":961},[951,1669,1632],{"class":1044},[951,1671,1145],{"class":961},[951,1673,1674],{"class":965},"generateCsrfCookie",[951,1676,1677],{"class":961},")   ",[951,1679,1680],{"class":1574},"\u002F\u002F CSRF cookie issuance\n",[951,1682,1683],{"class":953,"line":1373},[951,1684,1026],{"emptyLinePlaceholder":8},[951,1686,1687],{"class":953,"line":1390},[951,1688,1689],{"class":1574},"\u002F\u002F Routes\n",[951,1691,1692,1694,1697,1699,1702],{"class":953,"line":1402},[951,1693,1033],{"class":1032},[951,1695,1696],{"class":1036}," router",[951,1698,1041],{"class":1040},[951,1700,1701],{"class":1044}," createRouter",[951,1703,1597],{"class":961},[951,1705,1706,1709,1711,1714,1717],{"class":953,"line":1419},[951,1707,1708],{"class":1044},"useAuthRoutes",[951,1710,1145],{"class":961},[951,1712,1713],{"class":965},"router",[951,1715,1716],{"class":961},")           ",[951,1718,1719],{"class":1574},"\u002F\u002F POST \u002Flogin, \u002Fsignup, \u002Flogout\n",[951,1721,1723,1726,1728,1730,1733],{"class":953,"line":1722},29,[951,1724,1725],{"class":1044},"useOAuthRoutes",[951,1727,1145],{"class":961},[951,1729,1713],{"class":965},[951,1731,1732],{"class":961},")          ",[951,1734,1735],{"class":1574},"\u002F\u002F GET \u002Foauth\u002F:provider, \u002Foauth\u002Fcallback\u002F:provider\n",[951,1737,1739,1742,1744,1746,1749],{"class":953,"line":1738},30,[951,1740,1741],{"class":1044},"bounceRouter",[951,1743,1145],{"class":961},[951,1745,1713],{"class":965},[951,1747,1748],{"class":961},")            ",[951,1750,1751],{"class":1574},"\u002F\u002F GET \u002Fauth\u002Fbounce\n",[951,1753,1755,1758,1760,1762,1764,1766,1769,1771,1773],{"class":953,"line":1754},31,[951,1756,1757],{"class":1044},"magicLinksRouter",[951,1759,1145],{"class":961},[951,1761,1713],{"class":965},[951,1763,1355],{"class":961},[951,1765,1128],{"class":974},[951,1767,1768],{"class":978},"api",[951,1770,1128],{"class":974},[951,1772,1160],{"class":961},[951,1774,1775],{"class":1574},"\u002F\u002F MFA, password reset, email change\n",[951,1777,1779],{"class":953,"line":1778},32,[951,1780,1026],{"emptyLinePlaceholder":8},[951,1782,1784],{"class":953,"line":1783},33,[951,1785,1786],{"class":1574},"\u002F\u002F Auth status endpoint\n",[951,1788,1790,1792,1794,1797,1799,1801,1804,1806,1808,1811],{"class":953,"line":1789},34,[951,1791,1713],{"class":965},[951,1793,1108],{"class":961},[951,1795,1796],{"class":1044},"get",[951,1798,1145],{"class":961},[951,1800,1128],{"class":974},[951,1802,1803],{"class":978},"\u002Fauth\u002Fusers\u002FauthStatus",[951,1805,1128],{"class":974},[951,1807,1355],{"class":961},[951,1809,1810],{"class":965},"getAuthStatusHandler",[951,1812,1813],{"class":961},")\n",[951,1815,1817],{"class":953,"line":1816},35,[951,1818,1026],{"emptyLinePlaceholder":8},[951,1820,1822],{"class":953,"line":1821},36,[951,1823,1824],{"class":1574},"\u002F\u002F Optional API token inventory endpoint\n",[951,1826,1828,1830,1832,1834,1836,1838,1841,1843,1845,1848],{"class":953,"line":1827},37,[951,1829,1713],{"class":965},[951,1831,1108],{"class":961},[951,1833,1796],{"class":1044},[951,1835,1145],{"class":961},[951,1837,1128],{"class":974},[951,1839,1840],{"class":978},"\u002Fapi\u002Fauth\u002Fapi-tokens",[951,1842,1128],{"class":974},[951,1844,1355],{"class":961},[951,1846,1847],{"class":965},"getApiListsController",[951,1849,1813],{"class":961},[951,1851,1853],{"class":953,"line":1852},38,[951,1854,1026],{"emptyLinePlaceholder":8},[951,1856,1858,1860,1862,1864,1866,1868],{"class":953,"line":1857},39,[951,1859,1617],{"class":965},[951,1861,1108],{"class":961},[951,1863,1632],{"class":1044},[951,1865,1145],{"class":961},[951,1867,1713],{"class":965},[951,1869,1813],{"class":961},[1871,1872,1873],"warning",{},[848,1874,1875,1876,1355,1878,1880,1881,1883,1884,1887,1888,1891,1892,1880,1894,1897],{},"The global ",[852,1877,1637],{},[852,1879,1656],{},", and ",[852,1882,1674],{},"\nchain is for browser session routes. Do not mount that chain in front of\nroutes that use ",[852,1885,1886],{},"defineAuthenticatePublicApi",", because repeated\nmachine-to-machine ",[852,1889,1890],{},"X-API-KEY"," verification traffic can hit the bot detector\nand escalate into rate limits or bans. Keep the chain for regular auth routes,\n",[852,1893,1847],{},[852,1895,1896],{},"defineApiManagementHandler",", and add a path\nguard if you need both kinds of routes in the same app.",[1463,1899,1901],{"id":1900},"route-level-middleware-in-v1","Route-level middleware in v1",[942,1903,1905],{"className":944,"code":1904,"language":946,"meta":947,"style":947},"import { defineEventHandler } from 'h3'\nimport { verifyCsrfCookie, contentType, limitBytes, signUpHandler, loginHandler, logoutHandler } from 'auth-h3client\u002Fv1'\n\nexport function useAuthRoutes(router: Router) {\n\n  const signUpPipeline = defineEventHandler(async (event) => {\n    await verifyCsrfCookie(event);\n    await contentType('application\u002Fjson')(event);\n    await limitBytes(1024)(event);\n    return signUpHandler(event);\n  })\n\n  router.post('\u002Fsignup', signUpPipeline);\n\n  const loginPipeline = defineEventHandler(async (event) => {\n      await verifyCsrfCookie(event);\n      await contentType('application\u002Fjson')(event);\n      await limitBytes(1024)(event);\n      return loginHandler(event);\n  });\n\n  router.post('\u002Flogin', loginPipeline);\n\n  const logoutPipeline = defineEventHandler(async (event) => {\n      await verifyCsrfCookie(event);\n      await limitBytes(0)(event);\n      return logoutHandler(event);\n  })\n\n  router.post('\u002Flogout', logoutPipeline)\n}\n\n",[852,1906,1907,1926,1970,1974,1999,2003,2034,2049,2072,2090,2104,2109,2113,2139,2143,2168,2181,2201,2217,2231,2236,2240,2264,2268,2293,2305,2322,2335,2339,2343,2367],{"__ignoreMap":947},[951,1908,1909,1911,1913,1916,1918,1920,1922,1924],{"class":953,"line":954},[951,1910,958],{"class":957},[951,1912,962],{"class":961},[951,1914,1915],{"class":965},"defineEventHandler",[951,1917,968],{"class":961},[951,1919,971],{"class":957},[951,1921,975],{"class":974},[951,1923,1463],{"class":978},[951,1925,981],{"class":974},[951,1927,1928,1930,1932,1935,1937,1940,1942,1945,1947,1950,1952,1955,1957,1960,1962,1964,1966,1968],{"class":953,"line":984},[951,1929,958],{"class":957},[951,1931,962],{"class":961},[951,1933,1934],{"class":965},"verifyCsrfCookie",[951,1936,1355],{"class":961},[951,1938,1939],{"class":965},"contentType",[951,1941,1355],{"class":961},[951,1943,1944],{"class":965},"limitBytes",[951,1946,1355],{"class":961},[951,1948,1949],{"class":965},"signUpHandler",[951,1951,1355],{"class":961},[951,1953,1954],{"class":965},"loginHandler",[951,1956,1355],{"class":961},[951,1958,1959],{"class":965},"logoutHandler",[951,1961,968],{"class":961},[951,1963,971],{"class":957},[951,1965,975],{"class":974},[951,1967,896],{"class":978},[951,1969,981],{"class":974},[951,1971,1972],{"class":953,"line":1005},[951,1973,1026],{"emptyLinePlaceholder":8},[951,1975,1976,1979,1982,1985,1987,1990,1992,1996],{"class":953,"line":1023},[951,1977,1978],{"class":957},"export",[951,1980,1981],{"class":1032}," function",[951,1983,1984],{"class":1044}," useAuthRoutes",[951,1986,1145],{"class":961},[951,1988,1713],{"class":1989},"sygFZ",[951,1991,1055],{"class":1040},[951,1993,1995],{"class":1994},"sFs1U"," Router",[951,1997,1998],{"class":961},") {\n",[951,2000,2001],{"class":953,"line":1029},[951,2002,1026],{"emptyLinePlaceholder":8},[951,2004,2005,2008,2011,2013,2016,2018,2021,2024,2027,2029,2032],{"class":953,"line":1063},[951,2006,2007],{"class":1032},"  const",[951,2009,2010],{"class":1036}," signUpPipeline",[951,2012,1041],{"class":1040},[951,2014,2015],{"class":1044}," defineEventHandler",[951,2017,1145],{"class":961},[951,2019,2020],{"class":1032},"async",[951,2022,2023],{"class":961}," (",[951,2025,2026],{"class":1989},"event",[951,2028,1160],{"class":961},[951,2030,2031],{"class":1032},"=>",[951,2033,1084],{"class":961},[951,2035,2036,2039,2042,2044,2046],{"class":953,"line":1068},[951,2037,2038],{"class":957},"    await",[951,2040,2041],{"class":1044}," verifyCsrfCookie",[951,2043,1145],{"class":961},[951,2045,2026],{"class":965},[951,2047,2048],{"class":961},");\n",[951,2050,2051,2053,2056,2058,2060,2063,2065,2068,2070],{"class":953,"line":1076},[951,2052,2038],{"class":957},[951,2054,2055],{"class":1044}," contentType",[951,2057,1145],{"class":961},[951,2059,1128],{"class":974},[951,2061,2062],{"class":978},"application\u002Fjson",[951,2064,1128],{"class":974},[951,2066,2067],{"class":961},")(",[951,2069,2026],{"class":965},[951,2071,2048],{"class":961},[951,2073,2074,2076,2079,2081,2084,2086,2088],{"class":953,"line":1087},[951,2075,2038],{"class":957},[951,2077,2078],{"class":1044}," limitBytes",[951,2080,1145],{"class":961},[951,2082,2083],{"class":1166},"1024",[951,2085,2067],{"class":961},[951,2087,2026],{"class":965},[951,2089,2048],{"class":961},[951,2091,2092,2095,2098,2100,2102],{"class":953,"line":1097},[951,2093,2094],{"class":957},"    return",[951,2096,2097],{"class":1044}," signUpHandler",[951,2099,1145],{"class":961},[951,2101,2026],{"class":965},[951,2103,2048],{"class":961},[951,2105,2106],{"class":953,"line":1134},[951,2107,2108],{"class":961},"  })\n",[951,2110,2111],{"class":953,"line":1172},[951,2112,1026],{"emptyLinePlaceholder":8},[951,2114,2115,2118,2120,2123,2125,2127,2130,2132,2134,2137],{"class":953,"line":1178},[951,2116,2117],{"class":965},"  router",[951,2119,1108],{"class":961},[951,2121,2122],{"class":1044},"post",[951,2124,1145],{"class":961},[951,2126,1128],{"class":974},[951,2128,2129],{"class":978},"\u002Fsignup",[951,2131,1128],{"class":974},[951,2133,1355],{"class":961},[951,2135,2136],{"class":965},"signUpPipeline",[951,2138,2048],{"class":961},[951,2140,2141],{"class":953,"line":1188},[951,2142,1026],{"emptyLinePlaceholder":8},[951,2144,2145,2147,2150,2152,2154,2156,2158,2160,2162,2164,2166],{"class":953,"line":1202},[951,2146,2007],{"class":1032},[951,2148,2149],{"class":1036}," loginPipeline",[951,2151,1041],{"class":1040},[951,2153,2015],{"class":1044},[951,2155,1145],{"class":961},[951,2157,2020],{"class":1032},[951,2159,2023],{"class":961},[951,2161,2026],{"class":1989},[951,2163,1160],{"class":961},[951,2165,2031],{"class":1032},[951,2167,1084],{"class":961},[951,2169,2170,2173,2175,2177,2179],{"class":953,"line":1226},[951,2171,2172],{"class":957},"      await",[951,2174,2041],{"class":1044},[951,2176,1145],{"class":961},[951,2178,2026],{"class":965},[951,2180,2048],{"class":961},[951,2182,2183,2185,2187,2189,2191,2193,2195,2197,2199],{"class":953,"line":1249},[951,2184,2172],{"class":957},[951,2186,2055],{"class":1044},[951,2188,1145],{"class":961},[951,2190,1128],{"class":974},[951,2192,2062],{"class":978},[951,2194,1128],{"class":974},[951,2196,2067],{"class":961},[951,2198,2026],{"class":965},[951,2200,2048],{"class":961},[951,2202,2203,2205,2207,2209,2211,2213,2215],{"class":953,"line":1254},[951,2204,2172],{"class":957},[951,2206,2078],{"class":1044},[951,2208,1145],{"class":961},[951,2210,2083],{"class":1166},[951,2212,2067],{"class":961},[951,2214,2026],{"class":965},[951,2216,2048],{"class":961},[951,2218,2219,2222,2225,2227,2229],{"class":953,"line":1275},[951,2220,2221],{"class":957},"      return",[951,2223,2224],{"class":1044}," loginHandler",[951,2226,1145],{"class":961},[951,2228,2026],{"class":965},[951,2230,2048],{"class":961},[951,2232,2233],{"class":953,"line":1298},[951,2234,2235],{"class":961},"  });\n",[951,2237,2238],{"class":953,"line":1304},[951,2239,1026],{"emptyLinePlaceholder":8},[951,2241,2242,2244,2246,2248,2250,2252,2255,2257,2259,2262],{"class":953,"line":1314},[951,2243,2117],{"class":965},[951,2245,1108],{"class":961},[951,2247,2122],{"class":1044},[951,2249,1145],{"class":961},[951,2251,1128],{"class":974},[951,2253,2254],{"class":978},"\u002Flogin",[951,2256,1128],{"class":974},[951,2258,1355],{"class":961},[951,2260,2261],{"class":965},"loginPipeline",[951,2263,2048],{"class":961},[951,2265,2266],{"class":953,"line":1322},[951,2267,1026],{"emptyLinePlaceholder":8},[951,2269,2270,2272,2275,2277,2279,2281,2283,2285,2287,2289,2291],{"class":953,"line":1368},[951,2271,2007],{"class":1032},[951,2273,2274],{"class":1036}," logoutPipeline",[951,2276,1041],{"class":1040},[951,2278,2015],{"class":1044},[951,2280,1145],{"class":961},[951,2282,2020],{"class":1032},[951,2284,2023],{"class":961},[951,2286,2026],{"class":1989},[951,2288,1160],{"class":961},[951,2290,2031],{"class":1032},[951,2292,1084],{"class":961},[951,2294,2295,2297,2299,2301,2303],{"class":953,"line":1373},[951,2296,2172],{"class":957},[951,2298,2041],{"class":1044},[951,2300,1145],{"class":961},[951,2302,2026],{"class":965},[951,2304,2048],{"class":961},[951,2306,2307,2309,2311,2313,2316,2318,2320],{"class":953,"line":1390},[951,2308,2172],{"class":957},[951,2310,2078],{"class":1044},[951,2312,1145],{"class":961},[951,2314,2315],{"class":1166},"0",[951,2317,2067],{"class":961},[951,2319,2026],{"class":965},[951,2321,2048],{"class":961},[951,2323,2324,2326,2329,2331,2333],{"class":953,"line":1402},[951,2325,2221],{"class":957},[951,2327,2328],{"class":1044}," logoutHandler",[951,2330,1145],{"class":961},[951,2332,2026],{"class":965},[951,2334,2048],{"class":961},[951,2336,2337],{"class":953,"line":1419},[951,2338,2108],{"class":961},[951,2340,2341],{"class":953,"line":1722},[951,2342,1026],{"emptyLinePlaceholder":8},[951,2344,2345,2347,2349,2351,2353,2355,2358,2360,2362,2365],{"class":953,"line":1738},[951,2346,2117],{"class":965},[951,2348,1108],{"class":961},[951,2350,2122],{"class":1044},[951,2352,1145],{"class":961},[951,2354,1128],{"class":974},[951,2356,2357],{"class":978},"\u002Flogout",[951,2359,1128],{"class":974},[951,2361,1355],{"class":961},[951,2363,2364],{"class":965},"logoutPipeline",[951,2366,1813],{"class":961},[951,2368,2369],{"class":953,"line":1754},[951,2370,2371],{"class":961},"}\n",[857,2373],{},[860,2375,2377],{"id":2376},"h3-v2-setup","H3 v2 setup",[942,2379,2381],{"className":944,"code":2380,"language":946,"meta":947,"style":947},"import { H3 } from 'h3'\nimport {\n  configuration,\n  httpLogger,\n  isIPValid,\n  botDetectorMiddleware,\n  generateCsrfCookie,\n  useAuthRoutes,\n  magicLinksRouter,\n  useOAuthRoutes,\n  bounceRouter,\n  getAuthStatusHandler,\n  getApiListsController,\n} from 'auth-h3client\u002Fv2'\n\nconfiguration({ \u002F* ... *\u002F })\n\n\nconst app = new H3()\napp.register(httpLogger()) \u002F\u002F v2 logger is a plugin: register directly\napp.use(isIPValid)             \u002F\u002F IP extraction and validation\napp.use(botDetectorMiddleware) \u002F\u002F Bot detection via IAM \u002Fcheck\napp.use(generateCsrfCookie)   \u002F\u002F CSRF cookie issuance\n\n\u002F\u002F Routes\nuseAuthRoutes(app);           \u002F\u002F POST \u002Flogin, \u002Fsignup, \u002Flogout\nuseOAuthRoutes(app);          \u002F\u002F GET \u002Foauth\u002F:provider, \u002Foauth\u002Fcallback\u002F:provider\nbounceRouter(app);            \u002F\u002F GET \u002Fauth\u002Fbounce\nmagicLinksRouter(app, 'api'); \u002F\u002F MFA, password reset, email change\n\n\u002F\u002F Auth status endpoint\napp.get('\u002Fauth\u002Fusers\u002FauthStatus', getAuthStatusHandler)\n\n\u002F\u002F Optional API token inventory endpoint\napp.get('\u002Fapi\u002Fauth\u002Fapi-tokens', getApiListsController)\n\n\u002F\u002F Your handlers\n\n",[852,2382,2383,2402,2408,2414,2420,2426,2432,2438,2444,2450,2456,2462,2468,2474,2486,2490,2500,2504,2508,2525,2544,2560,2576,2592,2596,2600,2613,2626,2639,2660,2664,2668,2690,2694,2698,2720,2724],{"__ignoreMap":947},[951,2384,2385,2387,2389,2392,2394,2396,2398,2400],{"class":953,"line":954},[951,2386,958],{"class":957},[951,2388,962],{"class":961},[951,2390,2391],{"class":965},"H3",[951,2393,968],{"class":961},[951,2395,971],{"class":957},[951,2397,975],{"class":974},[951,2399,1463],{"class":978},[951,2401,981],{"class":974},[951,2403,2404,2406],{"class":953,"line":984},[951,2405,958],{"class":957},[951,2407,1084],{"class":961},[951,2409,2410,2412],{"class":953,"line":1005},[951,2411,1476],{"class":965},[951,2413,1131],{"class":961},[951,2415,2416,2418],{"class":953,"line":1023},[951,2417,1483],{"class":965},[951,2419,1131],{"class":961},[951,2421,2422,2424],{"class":953,"line":1029},[951,2423,1490],{"class":965},[951,2425,1131],{"class":961},[951,2427,2428,2430],{"class":953,"line":1063},[951,2429,1497],{"class":965},[951,2431,1131],{"class":961},[951,2433,2434,2436],{"class":953,"line":1068},[951,2435,1504],{"class":965},[951,2437,1131],{"class":961},[951,2439,2440,2442],{"class":953,"line":1076},[951,2441,1511],{"class":965},[951,2443,1131],{"class":961},[951,2445,2446,2448],{"class":953,"line":1087},[951,2447,1518],{"class":965},[951,2449,1131],{"class":961},[951,2451,2452,2454],{"class":953,"line":1097},[951,2453,1525],{"class":965},[951,2455,1131],{"class":961},[951,2457,2458,2460],{"class":953,"line":1134},[951,2459,1532],{"class":965},[951,2461,1131],{"class":961},[951,2463,2464,2466],{"class":953,"line":1172},[951,2465,1539],{"class":965},[951,2467,1131],{"class":961},[951,2469,2470,2472],{"class":953,"line":1178},[951,2471,1559],{"class":965},[951,2473,1131],{"class":961},[951,2475,2476,2478,2480,2482,2484],{"class":953,"line":1188},[951,2477,1546],{"class":961},[951,2479,971],{"class":957},[951,2481,975],{"class":974},[951,2483,909],{"class":978},[951,2485,981],{"class":974},[951,2487,2488],{"class":953,"line":1202},[951,2489,1026],{"emptyLinePlaceholder":8},[951,2491,2492,2494,2496,2498],{"class":953,"line":1226},[951,2493,933],{"class":1044},[951,2495,1048],{"class":961},[951,2497,1575],{"class":1574},[951,2499,1578],{"class":961},[951,2501,2502],{"class":953,"line":1249},[951,2503,1026],{"emptyLinePlaceholder":8},[951,2505,2506],{"class":953,"line":1254},[951,2507,1026],{"emptyLinePlaceholder":8},[951,2509,2510,2512,2514,2516,2520,2523],{"class":953,"line":1275},[951,2511,1033],{"class":1032},[951,2513,1589],{"class":1036},[951,2515,1041],{"class":1040},[951,2517,2519],{"class":2518},"sakC6"," new",[951,2521,2522],{"class":1044}," H3",[951,2524,1597],{"class":961},[951,2526,2527,2529,2531,2534,2536,2538,2541],{"class":953,"line":1298},[951,2528,1617],{"class":965},[951,2530,1108],{"class":961},[951,2532,2533],{"class":1044},"register",[951,2535,1145],{"class":961},[951,2537,1611],{"class":1044},[951,2539,2540],{"class":961},"()) ",[951,2542,2543],{"class":1574},"\u002F\u002F v2 logger is a plugin: register directly\n",[951,2545,2546,2548,2550,2552,2554,2556,2558],{"class":953,"line":1304},[951,2547,1617],{"class":965},[951,2549,1108],{"class":961},[951,2551,1632],{"class":1044},[951,2553,1145],{"class":961},[951,2555,1637],{"class":965},[951,2557,1640],{"class":961},[951,2559,1643],{"class":1574},[951,2561,2562,2564,2566,2568,2570,2572,2574],{"class":953,"line":1314},[951,2563,1617],{"class":965},[951,2565,1108],{"class":961},[951,2567,1632],{"class":1044},[951,2569,1145],{"class":961},[951,2571,1656],{"class":965},[951,2573,1160],{"class":961},[951,2575,1661],{"class":1574},[951,2577,2578,2580,2582,2584,2586,2588,2590],{"class":953,"line":1322},[951,2579,1617],{"class":965},[951,2581,1108],{"class":961},[951,2583,1632],{"class":1044},[951,2585,1145],{"class":961},[951,2587,1674],{"class":965},[951,2589,1677],{"class":961},[951,2591,1680],{"class":1574},[951,2593,2594],{"class":953,"line":1368},[951,2595,1026],{"emptyLinePlaceholder":8},[951,2597,2598],{"class":953,"line":1373},[951,2599,1689],{"class":1574},[951,2601,2602,2604,2606,2608,2611],{"class":953,"line":1390},[951,2603,1708],{"class":1044},[951,2605,1145],{"class":961},[951,2607,1617],{"class":965},[951,2609,2610],{"class":961},");           ",[951,2612,1719],{"class":1574},[951,2614,2615,2617,2619,2621,2624],{"class":953,"line":1402},[951,2616,1725],{"class":1044},[951,2618,1145],{"class":961},[951,2620,1617],{"class":965},[951,2622,2623],{"class":961},");          ",[951,2625,1735],{"class":1574},[951,2627,2628,2630,2632,2634,2637],{"class":953,"line":1419},[951,2629,1741],{"class":1044},[951,2631,1145],{"class":961},[951,2633,1617],{"class":965},[951,2635,2636],{"class":961},");            ",[951,2638,1751],{"class":1574},[951,2640,2641,2643,2645,2647,2649,2651,2653,2655,2658],{"class":953,"line":1722},[951,2642,1757],{"class":1044},[951,2644,1145],{"class":961},[951,2646,1617],{"class":965},[951,2648,1355],{"class":961},[951,2650,1128],{"class":974},[951,2652,1768],{"class":978},[951,2654,1128],{"class":974},[951,2656,2657],{"class":961},"); ",[951,2659,1775],{"class":1574},[951,2661,2662],{"class":953,"line":1738},[951,2663,1026],{"emptyLinePlaceholder":8},[951,2665,2666],{"class":953,"line":1754},[951,2667,1786],{"class":1574},[951,2669,2670,2672,2674,2676,2678,2680,2682,2684,2686,2688],{"class":953,"line":1778},[951,2671,1617],{"class":965},[951,2673,1108],{"class":961},[951,2675,1796],{"class":1044},[951,2677,1145],{"class":961},[951,2679,1128],{"class":974},[951,2681,1803],{"class":978},[951,2683,1128],{"class":974},[951,2685,1355],{"class":961},[951,2687,1810],{"class":965},[951,2689,1813],{"class":961},[951,2691,2692],{"class":953,"line":1783},[951,2693,1026],{"emptyLinePlaceholder":8},[951,2695,2696],{"class":953,"line":1789},[951,2697,1824],{"class":1574},[951,2699,2700,2702,2704,2706,2708,2710,2712,2714,2716,2718],{"class":953,"line":1816},[951,2701,1617],{"class":965},[951,2703,1108],{"class":961},[951,2705,1796],{"class":1044},[951,2707,1145],{"class":961},[951,2709,1128],{"class":974},[951,2711,1840],{"class":978},[951,2713,1128],{"class":974},[951,2715,1355],{"class":961},[951,2717,1847],{"class":965},[951,2719,1813],{"class":961},[951,2721,2722],{"class":953,"line":1821},[951,2723,1026],{"emptyLinePlaceholder":8},[951,2725,2726],{"class":953,"line":1827},[951,2727,2728],{"class":1574},"\u002F\u002F Your handlers\n",[1463,2730,2732],{"id":2731},"optional-api-token-inventory-route","Optional API token inventory route",[848,2734,2735,2737,2738,2741,2742,2745],{},[852,2736,1847],{}," gives you a ready-made GET endpoint for authenticated\nAPI token inventory reads. It runs the authenticated session pipeline, calls\nIAM ",[852,2739,2740],{},"\u002Fapi\u002Fmanage\u002Flist-metadata",", and strips ",[852,2743,2744],{},"public_identifier"," out of every\ntoken before returning the payload.",[848,2747,2748,2749,2751,2752,2754,2755,2757,2758,1108],{},"If you also need write operations such as token creation, rotation, revocation,\nIP restriction updates, or privilege changes, build your POST routes with\n",[852,2750,1896],{},". For public machine-to-machine routes protected by\n",[852,2753,1890],{},", use ",[852,2756,1886],{},". Both wrappers are documented in\nthe ",[1427,2759,206],{"href":207},[1463,2761,2763],{"id":2762},"route-level-middleware-in-v2","Route-level middleware in v2",[848,2765,2766],{},"H3 v2 passes middleware as the third argument to route methods:",[942,2768,2770],{"className":944,"code":2769,"language":946,"meta":947,"style":947},"import { defineHandler } from 'h3'\nimport { verifyCsrfCookie, contentType, limitBytes, signUpHandler, loginHandler, logoutHandler } from 'auth-h3client\u002Fv2'\n\nexport function useAuthRoutes(router: H3) {\n\n  router.post('\u002Fsignup', signUpHandler,\n    { middleware: [verifyCsrfCookie, contentType('application\u002Fjson'), limitBytes(1024)] },\n  )\n  \n  router.post('\u002Flogout', logoutHandler, \n    {middleware: [verifyCsrfCookie, limitBytes(0)]}\n  )\n\n  router.post('\u002Flogin', loginHandler,\n  {middleware: [verifyCsrfCookie, contentType('application\u002Fjson'), limitBytes(1024)]}\n  )\n\n}\n\n",[852,2771,2772,2791,2829,2833,2851,2855,2877,2916,2921,2926,2949,2973,2977,2981,3003,3038,3042,3046],{"__ignoreMap":947},[951,2773,2774,2776,2778,2781,2783,2785,2787,2789],{"class":953,"line":954},[951,2775,958],{"class":957},[951,2777,962],{"class":961},[951,2779,2780],{"class":965},"defineHandler",[951,2782,968],{"class":961},[951,2784,971],{"class":957},[951,2786,975],{"class":974},[951,2788,1463],{"class":978},[951,2790,981],{"class":974},[951,2792,2793,2795,2797,2799,2801,2803,2805,2807,2809,2811,2813,2815,2817,2819,2821,2823,2825,2827],{"class":953,"line":984},[951,2794,958],{"class":957},[951,2796,962],{"class":961},[951,2798,1934],{"class":965},[951,2800,1355],{"class":961},[951,2802,1939],{"class":965},[951,2804,1355],{"class":961},[951,2806,1944],{"class":965},[951,2808,1355],{"class":961},[951,2810,1949],{"class":965},[951,2812,1355],{"class":961},[951,2814,1954],{"class":965},[951,2816,1355],{"class":961},[951,2818,1959],{"class":965},[951,2820,968],{"class":961},[951,2822,971],{"class":957},[951,2824,975],{"class":974},[951,2826,909],{"class":978},[951,2828,981],{"class":974},[951,2830,2831],{"class":953,"line":1005},[951,2832,1026],{"emptyLinePlaceholder":8},[951,2834,2835,2837,2839,2841,2843,2845,2847,2849],{"class":953,"line":1023},[951,2836,1978],{"class":957},[951,2838,1981],{"class":1032},[951,2840,1984],{"class":1044},[951,2842,1145],{"class":961},[951,2844,1713],{"class":1989},[951,2846,1055],{"class":1040},[951,2848,2522],{"class":1994},[951,2850,1998],{"class":961},[951,2852,2853],{"class":953,"line":1029},[951,2854,1026],{"emptyLinePlaceholder":8},[951,2856,2857,2859,2861,2863,2865,2867,2869,2871,2873,2875],{"class":953,"line":1063},[951,2858,2117],{"class":965},[951,2860,1108],{"class":961},[951,2862,2122],{"class":1044},[951,2864,1145],{"class":961},[951,2866,1128],{"class":974},[951,2868,2129],{"class":978},[951,2870,1128],{"class":974},[951,2872,1355],{"class":961},[951,2874,1949],{"class":965},[951,2876,1131],{"class":961},[951,2878,2879,2882,2885,2887,2890,2892,2894,2896,2898,2900,2902,2904,2907,2909,2911,2913],{"class":953,"line":1068},[951,2880,2881],{"class":961},"    { ",[951,2883,2884],{"class":965},"middleware",[951,2886,1055],{"class":1054},[951,2888,2889],{"class":961}," [",[951,2891,1934],{"class":965},[951,2893,1355],{"class":961},[951,2895,1939],{"class":1044},[951,2897,1145],{"class":961},[951,2899,1128],{"class":974},[951,2901,2062],{"class":978},[951,2903,1128],{"class":974},[951,2905,2906],{"class":961},"), ",[951,2908,1944],{"class":1044},[951,2910,1145],{"class":961},[951,2912,2083],{"class":1166},[951,2914,2915],{"class":961},")] },\n",[951,2917,2918],{"class":953,"line":1076},[951,2919,2920],{"class":961},"  )\n",[951,2922,2923],{"class":953,"line":1087},[951,2924,2925],{"class":961},"  \n",[951,2927,2928,2930,2932,2934,2936,2938,2940,2942,2944,2946],{"class":953,"line":1097},[951,2929,2117],{"class":965},[951,2931,1108],{"class":961},[951,2933,2122],{"class":1044},[951,2935,1145],{"class":961},[951,2937,1128],{"class":974},[951,2939,2357],{"class":978},[951,2941,1128],{"class":974},[951,2943,1355],{"class":961},[951,2945,1959],{"class":965},[951,2947,2948],{"class":961},", \n",[951,2950,2951,2954,2956,2958,2960,2962,2964,2966,2968,2970],{"class":953,"line":1134},[951,2952,2953],{"class":961},"    {",[951,2955,2884],{"class":965},[951,2957,1055],{"class":1054},[951,2959,2889],{"class":961},[951,2961,1934],{"class":965},[951,2963,1355],{"class":961},[951,2965,1944],{"class":1044},[951,2967,1145],{"class":961},[951,2969,2315],{"class":1166},[951,2971,2972],{"class":961},")]}\n",[951,2974,2975],{"class":953,"line":1172},[951,2976,2920],{"class":961},[951,2978,2979],{"class":953,"line":1178},[951,2980,1026],{"emptyLinePlaceholder":8},[951,2982,2983,2985,2987,2989,2991,2993,2995,2997,2999,3001],{"class":953,"line":1188},[951,2984,2117],{"class":965},[951,2986,1108],{"class":961},[951,2988,2122],{"class":1044},[951,2990,1145],{"class":961},[951,2992,1128],{"class":974},[951,2994,2254],{"class":978},[951,2996,1128],{"class":974},[951,2998,1355],{"class":961},[951,3000,1954],{"class":965},[951,3002,1131],{"class":961},[951,3004,3005,3008,3010,3012,3014,3016,3018,3020,3022,3024,3026,3028,3030,3032,3034,3036],{"class":953,"line":1202},[951,3006,3007],{"class":961},"  {",[951,3009,2884],{"class":965},[951,3011,1055],{"class":1054},[951,3013,2889],{"class":961},[951,3015,1934],{"class":965},[951,3017,1355],{"class":961},[951,3019,1939],{"class":1044},[951,3021,1145],{"class":961},[951,3023,1128],{"class":974},[951,3025,2062],{"class":978},[951,3027,1128],{"class":974},[951,3029,2906],{"class":961},[951,3031,1944],{"class":1044},[951,3033,1145],{"class":961},[951,3035,2083],{"class":1166},[951,3037,2972],{"class":961},[951,3039,3040],{"class":953,"line":1226},[951,3041,2920],{"class":961},[951,3043,3044],{"class":953,"line":1249},[951,3045,1026],{"emptyLinePlaceholder":8},[951,3047,3048],{"class":953,"line":1254},[951,3049,2371],{"class":961},[857,3051],{},[860,3053,3055],{"id":3054},"key-differences-between-v1-and-v2","Key differences between v1 and v2",[865,3057,3058,3071],{},[868,3059,3060],{},[871,3061,3062,3065,3068],{},[874,3063,3064],{},"Aspect",[874,3066,3067],{},"H3 v1",[874,3069,3070],{},"H3 v2",[884,3072,3073,3088,3105,3122,3137,3152],{},[871,3074,3075,3078,3083],{},[889,3076,3077],{},"Handler definition",[889,3079,3080],{},[852,3081,3082],{},"defineEventHandler(...)",[889,3084,3085],{},[852,3086,3087],{},"defineHandler(...)",[871,3089,3090,3093,3099],{},[889,3091,3092],{},"Route middleware",[889,3094,3095,3098],{},[852,3096,3097],{},"router.use('\u002Fpath', mw)"," chained",[889,3100,3101,3104],{},[852,3102,3103],{},"{ middleware: [mw1, mw2] }"," as third arg",[871,3106,3107,3110,3116],{},[889,3108,3109],{},"HTTP logger",[889,3111,3112,3115],{},[852,3113,3114],{},"httpLogger()(app)"," (function call)",[889,3117,3118,3121],{},[852,3119,3120],{},"app.register(httpLogger())"," (plugin)",[871,3123,3124,3127,3132],{},[889,3125,3126],{},"Redirect",[889,3128,3129],{},[852,3130,3131],{},"sendRedirect(event, url)",[889,3133,3134],{},[852,3135,3136],{},"redirect(event, url)",[871,3138,3139,3142,3147],{},[889,3140,3141],{},"Errors",[889,3143,3144],{},[852,3145,3146],{},"createError({ ... })",[889,3148,3149],{},[852,3150,3151],{},"throw new HTTPError({ ... })",[871,3153,3154,3157,3162],{},[889,3155,3156],{},"Response status",[889,3158,3159],{},[852,3160,3161],{},"setResponseStatus(event, code)",[889,3163,3164],{},[852,3165,3166],{},"event.res.status = code",[848,3168,3169,3170,1355,3173,3176],{},"The exported handler wrappers (",[852,3171,3172],{},"defineAuthenticatedEventHandler",[852,3174,3175],{},"defineVerifiedCsrfHandler",", etc.), route registrars, and utility functions have the same names and signatures in both versions.",[857,3178],{},[860,3180,3182],{"id":3181},"writing-custom-handlers","Writing custom handlers",[848,3184,3185],{},"When writing your own handlers alongside the library's built-in routes:",[1463,3187,3067],{"id":3188},"h3-v1",[942,3190,3192],{"className":944,"code":3191,"language":946,"meta":947,"style":947},"import { defineEventHandler } from 'h3'\nimport { defineAuthenticatedEventHandler } from 'auth-h3client\u002Fv1'\n\nrouter.get('\u002Fapi\u002Fprofile', defineAuthenticatedEventHandler(async (event) => {\n  const { userId, roles } = event.context.authorizedData\n  return { userId, roles }\n}))\n",[852,3193,3194,3212,3230,3234,3269,3301,3317],{"__ignoreMap":947},[951,3195,3196,3198,3200,3202,3204,3206,3208,3210],{"class":953,"line":954},[951,3197,958],{"class":957},[951,3199,962],{"class":961},[951,3201,1915],{"class":965},[951,3203,968],{"class":961},[951,3205,971],{"class":957},[951,3207,975],{"class":974},[951,3209,1463],{"class":978},[951,3211,981],{"class":974},[951,3213,3214,3216,3218,3220,3222,3224,3226,3228],{"class":953,"line":984},[951,3215,958],{"class":957},[951,3217,962],{"class":961},[951,3219,3172],{"class":965},[951,3221,968],{"class":961},[951,3223,971],{"class":957},[951,3225,975],{"class":974},[951,3227,896],{"class":978},[951,3229,981],{"class":974},[951,3231,3232],{"class":953,"line":1005},[951,3233,1026],{"emptyLinePlaceholder":8},[951,3235,3236,3238,3240,3242,3244,3246,3249,3251,3253,3255,3257,3259,3261,3263,3265,3267],{"class":953,"line":1023},[951,3237,1713],{"class":965},[951,3239,1108],{"class":961},[951,3241,1796],{"class":1044},[951,3243,1145],{"class":961},[951,3245,1128],{"class":974},[951,3247,3248],{"class":978},"\u002Fapi\u002Fprofile",[951,3250,1128],{"class":974},[951,3252,1355],{"class":961},[951,3254,3172],{"class":1044},[951,3256,1145],{"class":961},[951,3258,2020],{"class":1032},[951,3260,2023],{"class":961},[951,3262,2026],{"class":1989},[951,3264,1160],{"class":961},[951,3266,2031],{"class":1032},[951,3268,1084],{"class":961},[951,3270,3271,3273,3275,3278,3280,3283,3285,3288,3291,3293,3296,3298],{"class":953,"line":1029},[951,3272,2007],{"class":1032},[951,3274,962],{"class":961},[951,3276,3277],{"class":1036},"userId",[951,3279,1355],{"class":961},[951,3281,3282],{"class":1036},"roles",[951,3284,968],{"class":961},[951,3286,3287],{"class":1040},"=",[951,3289,3290],{"class":965}," event",[951,3292,1108],{"class":961},[951,3294,3295],{"class":965},"context",[951,3297,1108],{"class":961},[951,3299,3300],{"class":965},"authorizedData\n",[951,3302,3303,3306,3308,3310,3312,3314],{"class":953,"line":1063},[951,3304,3305],{"class":957},"  return",[951,3307,962],{"class":961},[951,3309,3277],{"class":965},[951,3311,1355],{"class":961},[951,3313,3282],{"class":965},[951,3315,3316],{"class":961}," }\n",[951,3318,3319],{"class":953,"line":1068},[951,3320,3321],{"class":961},"}))\n",[1463,3323,3070],{"id":3324},"h3-v2",[942,3326,3328],{"className":944,"code":3327,"language":946,"meta":947,"style":947},"import { defineHandler } from 'h3'\nimport { defineAuthenticatedEventHandler } from 'auth-h3client\u002Fv2'\n\nrouter.get('\u002Fapi\u002Fprofile', defineAuthenticatedEventHandler(async (event) => {\n  const { userId, roles } = event.context.authorizedData\n  return { userId, roles }\n}))\n",[852,3329,3330,3348,3366,3370,3404,3430,3444],{"__ignoreMap":947},[951,3331,3332,3334,3336,3338,3340,3342,3344,3346],{"class":953,"line":954},[951,3333,958],{"class":957},[951,3335,962],{"class":961},[951,3337,2780],{"class":965},[951,3339,968],{"class":961},[951,3341,971],{"class":957},[951,3343,975],{"class":974},[951,3345,1463],{"class":978},[951,3347,981],{"class":974},[951,3349,3350,3352,3354,3356,3358,3360,3362,3364],{"class":953,"line":984},[951,3351,958],{"class":957},[951,3353,962],{"class":961},[951,3355,3172],{"class":965},[951,3357,968],{"class":961},[951,3359,971],{"class":957},[951,3361,975],{"class":974},[951,3363,909],{"class":978},[951,3365,981],{"class":974},[951,3367,3368],{"class":953,"line":1005},[951,3369,1026],{"emptyLinePlaceholder":8},[951,3371,3372,3374,3376,3378,3380,3382,3384,3386,3388,3390,3392,3394,3396,3398,3400,3402],{"class":953,"line":1023},[951,3373,1713],{"class":965},[951,3375,1108],{"class":961},[951,3377,1796],{"class":1044},[951,3379,1145],{"class":961},[951,3381,1128],{"class":974},[951,3383,3248],{"class":978},[951,3385,1128],{"class":974},[951,3387,1355],{"class":961},[951,3389,3172],{"class":1044},[951,3391,1145],{"class":961},[951,3393,2020],{"class":1032},[951,3395,2023],{"class":961},[951,3397,2026],{"class":1989},[951,3399,1160],{"class":961},[951,3401,2031],{"class":1032},[951,3403,1084],{"class":961},[951,3405,3406,3408,3410,3412,3414,3416,3418,3420,3422,3424,3426,3428],{"class":953,"line":1029},[951,3407,2007],{"class":1032},[951,3409,962],{"class":961},[951,3411,3277],{"class":1036},[951,3413,1355],{"class":961},[951,3415,3282],{"class":1036},[951,3417,968],{"class":961},[951,3419,3287],{"class":1040},[951,3421,3290],{"class":965},[951,3423,1108],{"class":961},[951,3425,3295],{"class":965},[951,3427,1108],{"class":961},[951,3429,3300],{"class":965},[951,3431,3432,3434,3436,3438,3440,3442],{"class":953,"line":1063},[951,3433,3305],{"class":957},[951,3435,962],{"class":961},[951,3437,3277],{"class":965},[951,3439,1355],{"class":961},[951,3441,3282],{"class":965},[951,3443,3316],{"class":961},[951,3445,3446],{"class":953,"line":1068},[951,3447,3321],{"class":961},[848,3449,3450,3451,893,3453,3455],{},"The handler wrappers internally use the correct ",[852,3452,1915],{},[852,3454,2780],{}," from the version you import.",[857,3457],{},[860,3459,3461],{"id":3460},"nitro-plugin-setup","Nitro plugin setup",[848,3463,3464],{},"When using Nitro (without the full Nuxt module), configure the library in a Nitro plugin:",[942,3466,3469],{"className":944,"code":3467,"filename":3468,"language":946,"meta":947,"style":947},"import { defineNitroPlugin } from \"nitro\";\nimport { configuration, httpLogger, useAuthRoutes, useOAuthRoutes, magicLinksRouter, bounceRouter } from 'auth-h3client';\nimport { configDefaults } from 'auth-h3client\u002Fserver\u002Ftemplates'\n\nexport default defineNitroPlugin((nitro) => {\nconfiguration({\n  ...configDefaults,\n    uStorage: {\n      storage: useStorage('cache'),\n      cacheOptions: {\n          successTtl: 60 * 60 * 24 * 30, \n          rateLimitTtl: 10    \n      }\n    }\n  });\n\nhttpLogger()(nitro.h3App);\nnitro.h3App.use(isIPValid)\nnitro.h3App.use(botDetectorMiddleware)\nnitro.h3App.use(generateCsrfCookie)\n\nuseAuthRoutes(nitro.router);\nuseOAuthRoutes(nitro.router);\nbounceRouter(nitro.router);\nmagicLinksRouter(nitro.router, 'api');\n})\n","server\u002Fplugins\u002FinitAuth.ts",[852,3470,3471,3496,3536,3556,3560,3581,3587,3596,3605,3627,3636,3659,3671,3676,3681,3685,3689,3704,3722,3740,3758,3762,3776,3790,3804,3826],{"__ignoreMap":947},[951,3472,3473,3475,3477,3480,3482,3484,3487,3490,3493],{"class":953,"line":954},[951,3474,958],{"class":957},[951,3476,962],{"class":961},[951,3478,3479],{"class":965},"defineNitroPlugin",[951,3481,968],{"class":961},[951,3483,971],{"class":957},[951,3485,3486],{"class":974}," \"",[951,3488,3489],{"class":978},"nitro",[951,3491,3492],{"class":974},"\"",[951,3494,3495],{"class":961},";\n",[951,3497,3498,3500,3502,3504,3506,3508,3510,3512,3514,3516,3518,3520,3522,3524,3526,3528,3530,3532,3534],{"class":953,"line":984},[951,3499,958],{"class":957},[951,3501,962],{"class":961},[951,3503,933],{"class":965},[951,3505,1355],{"class":961},[951,3507,1611],{"class":965},[951,3509,1355],{"class":961},[951,3511,1708],{"class":965},[951,3513,1355],{"class":961},[951,3515,1725],{"class":965},[951,3517,1355],{"class":961},[951,3519,1757],{"class":965},[951,3521,1355],{"class":961},[951,3523,1741],{"class":965},[951,3525,968],{"class":961},[951,3527,971],{"class":957},[951,3529,975],{"class":974},[951,3531,854],{"class":978},[951,3533,1128],{"class":974},[951,3535,3495],{"class":961},[951,3537,3538,3540,3542,3545,3547,3549,3551,3554],{"class":953,"line":1005},[951,3539,958],{"class":957},[951,3541,962],{"class":961},[951,3543,3544],{"class":965},"configDefaults",[951,3546,968],{"class":961},[951,3548,971],{"class":957},[951,3550,975],{"class":974},[951,3552,3553],{"class":978},"auth-h3client\u002Fserver\u002Ftemplates",[951,3555,981],{"class":974},[951,3557,3558],{"class":953,"line":1023},[951,3559,1026],{"emptyLinePlaceholder":8},[951,3561,3562,3564,3567,3570,3573,3575,3577,3579],{"class":953,"line":1029},[951,3563,1978],{"class":957},[951,3565,3566],{"class":957}," default",[951,3568,3569],{"class":1044}," defineNitroPlugin",[951,3571,3572],{"class":961},"((",[951,3574,3489],{"class":1989},[951,3576,1160],{"class":961},[951,3578,2031],{"class":1032},[951,3580,1084],{"class":961},[951,3582,3583,3585],{"class":953,"line":1063},[951,3584,933],{"class":1044},[951,3586,1073],{"class":961},[951,3588,3589,3592,3594],{"class":953,"line":1068},[951,3590,3591],{"class":1040},"  ...",[951,3593,3544],{"class":965},[951,3595,1131],{"class":961},[951,3597,3598,3601,3603],{"class":953,"line":1076},[951,3599,3600],{"class":965},"    uStorage",[951,3602,1055],{"class":1054},[951,3604,1084],{"class":961},[951,3606,3607,3610,3612,3615,3617,3619,3622,3624],{"class":953,"line":1087},[951,3608,3609],{"class":965},"      storage",[951,3611,1055],{"class":1054},[951,3613,3614],{"class":1044}," useStorage",[951,3616,1145],{"class":961},[951,3618,1128],{"class":974},[951,3620,3621],{"class":978},"cache",[951,3623,1128],{"class":974},[951,3625,3626],{"class":961},"),\n",[951,3628,3629,3632,3634],{"class":953,"line":1097},[951,3630,3631],{"class":965},"      cacheOptions",[951,3633,1055],{"class":1054},[951,3635,1084],{"class":961},[951,3637,3638,3641,3643,3645,3647,3649,3651,3653,3655,3657],{"class":953,"line":1134},[951,3639,3640],{"class":965},"          successTtl",[951,3642,1055],{"class":1054},[951,3644,1337],{"class":1166},[951,3646,1340],{"class":1040},[951,3648,1337],{"class":1166},[951,3650,1340],{"class":1040},[951,3652,1347],{"class":1166},[951,3654,1340],{"class":1040},[951,3656,1352],{"class":1166},[951,3658,2948],{"class":961},[951,3660,3661,3664,3666,3668],{"class":953,"line":1172},[951,3662,3663],{"class":965},"          rateLimitTtl",[951,3665,1055],{"class":1054},[951,3667,1363],{"class":1166},[951,3669,3670],{"class":961},"    \n",[951,3672,3673],{"class":953,"line":1178},[951,3674,3675],{"class":961},"      }\n",[951,3677,3678],{"class":953,"line":1188},[951,3679,3680],{"class":961},"    }\n",[951,3682,3683],{"class":953,"line":1202},[951,3684,2235],{"class":961},[951,3686,3687],{"class":953,"line":1226},[951,3688,1026],{"emptyLinePlaceholder":8},[951,3690,3691,3693,3695,3697,3699,3702],{"class":953,"line":1249},[951,3692,1611],{"class":1044},[951,3694,1614],{"class":961},[951,3696,3489],{"class":965},[951,3698,1108],{"class":961},[951,3700,3701],{"class":965},"h3App",[951,3703,2048],{"class":961},[951,3705,3706,3708,3710,3712,3714,3716,3718,3720],{"class":953,"line":1254},[951,3707,3489],{"class":965},[951,3709,1108],{"class":961},[951,3711,3701],{"class":965},[951,3713,1108],{"class":961},[951,3715,1632],{"class":1044},[951,3717,1145],{"class":961},[951,3719,1637],{"class":965},[951,3721,1813],{"class":961},[951,3723,3724,3726,3728,3730,3732,3734,3736,3738],{"class":953,"line":1275},[951,3725,3489],{"class":965},[951,3727,1108],{"class":961},[951,3729,3701],{"class":965},[951,3731,1108],{"class":961},[951,3733,1632],{"class":1044},[951,3735,1145],{"class":961},[951,3737,1656],{"class":965},[951,3739,1813],{"class":961},[951,3741,3742,3744,3746,3748,3750,3752,3754,3756],{"class":953,"line":1298},[951,3743,3489],{"class":965},[951,3745,1108],{"class":961},[951,3747,3701],{"class":965},[951,3749,1108],{"class":961},[951,3751,1632],{"class":1044},[951,3753,1145],{"class":961},[951,3755,1674],{"class":965},[951,3757,1813],{"class":961},[951,3759,3760],{"class":953,"line":1304},[951,3761,1026],{"emptyLinePlaceholder":8},[951,3763,3764,3766,3768,3770,3772,3774],{"class":953,"line":1314},[951,3765,1708],{"class":1044},[951,3767,1145],{"class":961},[951,3769,3489],{"class":965},[951,3771,1108],{"class":961},[951,3773,1713],{"class":965},[951,3775,2048],{"class":961},[951,3777,3778,3780,3782,3784,3786,3788],{"class":953,"line":1322},[951,3779,1725],{"class":1044},[951,3781,1145],{"class":961},[951,3783,3489],{"class":965},[951,3785,1108],{"class":961},[951,3787,1713],{"class":965},[951,3789,2048],{"class":961},[951,3791,3792,3794,3796,3798,3800,3802],{"class":953,"line":1368},[951,3793,1741],{"class":1044},[951,3795,1145],{"class":961},[951,3797,3489],{"class":965},[951,3799,1108],{"class":961},[951,3801,1713],{"class":965},[951,3803,2048],{"class":961},[951,3805,3806,3808,3810,3812,3814,3816,3818,3820,3822,3824],{"class":953,"line":1373},[951,3807,1757],{"class":1044},[951,3809,1145],{"class":961},[951,3811,3489],{"class":965},[951,3813,1108],{"class":961},[951,3815,1713],{"class":965},[951,3817,1355],{"class":961},[951,3819,1128],{"class":974},[951,3821,1768],{"class":978},[951,3823,1128],{"class":974},[951,3825,2048],{"class":961},[951,3827,3828],{"class":953,"line":1390},[951,3829,1422],{"class":961},[3831,3832,3833],"caution",{},[848,3834,3835,3836],{},"When using a newer version of nitro, use the same setup above, and check if that version uses the v2 version of h3, if so, import directly from ",[852,3837,909],{},[857,3839],{},[3841,3842,3843],"note",{},[848,3844,3845,3846,3848],{},"The key point to understand here, it doesn't matter what framework (nuxt\u002Fnitro) or h3 version you use, is that ",[852,3847,933],{}," needs to be called ones, in your app entry point, the middlewares needs to be registered along side the routes in this exact order.",[860,3850,3852],{"id":3851},"what-the-nuxt-module-adds","What the Nuxt module adds",[848,3854,3855],{},"If you use the Nuxt module instead of manual setup, it provides:",[3857,3858,3859,3867,3879,3885,3891],"ul",{},[3860,3861,3862,3863,3866],"li",{},"Auto-imports of all server utilities in the ",[852,3864,3865],{},"server\u002F"," directory",[3860,3868,3869,3870,1355,3872,1355,3874,1355,3876,3878],{},"Auto-imports of client composables (",[852,3871,152],{},[852,3873,160],{},[852,3875,164],{},[852,3877,156],{},")",[3860,3880,3881,3882],{},"Automatic registration of the auth status route at the configured ",[852,3883,3884],{},"authStatusUrl",[3860,3886,3887,3888],{},"Optional registration of an API token list route at ",[852,3889,3890],{},"registerApiRoute.path",[3860,3892,3893,3894,3897],{},"The ",[852,3895,3896],{},"enableMiddleware"," option for global middleware activation only. Disabling it does not disable the auth status route or the optional API token list route.",[848,3899,1425,3900,3902],{},[1427,3901,79],{"href":80}," for the Nuxt module setup.",[3904,3905,3906],"style",{},"html pre.shiki code .sZ328, html code.shiki .sZ328{--shiki-light:#AF00DB;--shiki-default:#AF00DB;--shiki-dark:#FF79C6}html pre.shiki code .sDd4n, html code.shiki .sDd4n{--shiki-light:#000000;--shiki-default:#000000;--shiki-dark:#F8F8F2}html pre.shiki code .sjsA6, html code.shiki .sjsA6{--shiki-light:#001080;--shiki-default:#001080;--shiki-dark:#F8F8F2}html pre.shiki code .sFkSl, html code.shiki .sFkSl{--shiki-light:#A31515;--shiki-default:#A31515;--shiki-dark:#E9F284}html pre.shiki code .sFB1V, html code.shiki .sFB1V{--shiki-light:#A31515;--shiki-default:#A31515;--shiki-dark:#F1FA8C}html pre.shiki code .sl46w, html code.shiki .sl46w{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#FF79C6}html pre.shiki code .s3JHE, html code.shiki .s3JHE{--shiki-light:#0070C1;--shiki-default:#0070C1;--shiki-dark:#F8F8F2}html pre.shiki code .saOXh, html code.shiki .saOXh{--shiki-light:#000000;--shiki-default:#000000;--shiki-dark:#FF79C6}html pre.shiki code .sHOzp, html code.shiki .sHOzp{--shiki-light:#795E26;--shiki-default:#795E26;--shiki-dark:#50FA7B}html pre.shiki code .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}html pre.shiki code .spgvN, html code.shiki .spgvN{--shiki-light:#098658;--shiki-default:#098658;--shiki-dark:#BD93F9}html pre.shiki code .sjR7W, html code.shiki .sjR7W{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#BD93F9}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 .sghk6, html code.shiki .sghk6{--shiki-light:#008000;--shiki-default:#008000;--shiki-dark:#6272A4}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 .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 .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}",{"title":947,"searchDepth":984,"depth":984,"links":3908},[3909,3910,3911,3914,3918,3919,3923,3924],{"id":862,"depth":984,"text":863},{"id":933,"depth":984,"text":192},{"id":1434,"depth":984,"text":1435,"children":3912},[3913],{"id":1900,"depth":1005,"text":1901},{"id":2376,"depth":984,"text":2377,"children":3915},[3916,3917],{"id":2731,"depth":1005,"text":2732},{"id":2762,"depth":1005,"text":2763},{"id":3054,"depth":984,"text":3055},{"id":3181,"depth":984,"text":3182,"children":3920},[3921,3922],{"id":3188,"depth":1005,"text":3067},{"id":3324,"depth":1005,"text":3070},{"id":3460,"depth":984,"text":3461},{"id":3851,"depth":984,"text":3852},"How to use auth-h3client without the Nuxt module, with setup examples for both H3 v1 and H3 v2, manual route registration, and middleware wiring.","md","i-lucide-server",{},null,"---\ntitle: H3 and Nitro Setup\ndescription: How to use auth-h3client without the Nuxt module, with setup examples for both H3 v1 and H3 v2, manual route registration, and middleware wiring.\nicon: i-lucide-server\n---\n\nThe Nuxt module handles all wiring automatically, but `auth-h3client` also works as a standalone library with plain H3 or Nitro servers. The public API is identical across H3 v1 and v2: the same function names, the same configuration object, the same handler wrappers. The differences are in how H3 itself registers middleware and defines handlers.\n\n---\n\n## Import paths\n\n| Import | H3 version | Notes |\n|---|---|---|\n| `auth-h3client` or `auth-h3client\u002Fv1` | H3 v1 (1.15.x) | Default, backwards compatible |\n| `auth-h3client\u002Fv2` | H3 v2 (2.0 beta) | Opt-in for H3 v2 projects |\n| `auth-h3client\u002Fclient` | N\u002FA | Vue\u002FNuxt composables only |\n\n---\n\n## Configuration\n\nCall `configuration()` exactly once when your server starts. This sets the global configuration used by every handler and middleware in the library.\n\n```ts\nimport { configuration } from 'auth-h3client\u002Fv1'\nimport { createStorage } from 'unstorage'\nimport memoryDriver from 'unstorage\u002Fdrivers\u002Fmemory'\n\nconst storage = createStorage({ driver: memoryDriver() })\n\nconfiguration({\n  server: {\n    auth_location: {\n      serverOrDNS: process.env.AUTH_HOST || 'localhost',\n      port: Number(process.env.AUTH_PORT) || 4000,\n    },\n    hmac: {\n      enableHmac: true,\n      clientId: process.env.HMAC_CLIENT_ID!,\n      sharedSecret: process.env.HMAC_SHARED_SECRET!,\n    },\n    ssl: { enableSSL: false },\n    cryptoCookiesSecret: process.env.AUTH_CRYPTO_COOKIES!,\n  },\n  uStorage: {\n    storage,\n    cacheOptions: { successTtl: 60 * 60 * 24 * 30, rateLimitTtl: 10 },\n  },\n  onSuccessRedirect: 'https:\u002F\u002Fapp.example.com\u002Fdashboard',\n  enableFireWallBans: false,\n  logLevel: 'info',\n})\n```\n\nSee [Configuration](\u002Fdocs\u002Fauth-h3client\u002Fconfiguration) for the complete reference of all options.\n\n---\n\n## H3 v1 setup\n\n```ts\nimport { createApp, createRouter } from 'h3'\nimport {\n  configuration,\n  httpLogger,\n  isIPValid,\n  botDetectorMiddleware,\n  generateCsrfCookie,\n  useAuthRoutes,\n  magicLinksRouter,\n  useOAuthRoutes,\n  bounceRouter,\n  getAuthStatusHandler,\n} from 'auth-h3client\u002Fv1'\n  getApiListsController,\n\nconfiguration({ \u002F* ... *\u002F })\n\nconst app = createApp()\n\n\u002F\u002F Global middleware (order matters)\nhttpLogger()(app)     \u002F\u002F HTTP request logging\napp.use(isIPValid)             \u002F\u002F IP extraction and validation\napp.use(botDetectorMiddleware) \u002F\u002F Bot detection via IAM \u002Fcheck\napp.use(generateCsrfCookie)   \u002F\u002F CSRF cookie issuance\n\n\u002F\u002F Routes\nconst router = createRouter()\nuseAuthRoutes(router)           \u002F\u002F POST \u002Flogin, \u002Fsignup, \u002Flogout\nuseOAuthRoutes(router)          \u002F\u002F GET \u002Foauth\u002F:provider, \u002Foauth\u002Fcallback\u002F:provider\nbounceRouter(router)            \u002F\u002F GET \u002Fauth\u002Fbounce\nmagicLinksRouter(router, 'api') \u002F\u002F MFA, password reset, email change\n\n\u002F\u002F Auth status endpoint\nrouter.get('\u002Fauth\u002Fusers\u002FauthStatus', getAuthStatusHandler)\n\n\u002F\u002F Optional API token inventory endpoint\nrouter.get('\u002Fapi\u002Fauth\u002Fapi-tokens', getApiListsController)\n\napp.use(router)\n```\n\n::warning\nThe global `isIPValid`, `botDetectorMiddleware`, and `generateCsrfCookie`\nchain is for browser session routes. Do not mount that chain in front of\nroutes that use `defineAuthenticatePublicApi`, because repeated\nmachine-to-machine `X-API-KEY` verification traffic can hit the bot detector\nand escalate into rate limits or bans. Keep the chain for regular auth routes,\n`getApiListsController`, and `defineApiManagementHandler`, and add a path\nguard if you need both kinds of routes in the same app.\n::\n\n### Route-level middleware in v1\n\n\n```ts\nimport { defineEventHandler } from 'h3'\nimport { verifyCsrfCookie, contentType, limitBytes, signUpHandler, loginHandler, logoutHandler } from 'auth-h3client\u002Fv1'\n\nexport function useAuthRoutes(router: Router) {\n\n  const signUpPipeline = defineEventHandler(async (event) => {\n    await verifyCsrfCookie(event);\n    await contentType('application\u002Fjson')(event);\n    await limitBytes(1024)(event);\n    return signUpHandler(event);\n  })\n\n  router.post('\u002Fsignup', signUpPipeline);\n\n  const loginPipeline = defineEventHandler(async (event) => {\n      await verifyCsrfCookie(event);\n      await contentType('application\u002Fjson')(event);\n      await limitBytes(1024)(event);\n      return loginHandler(event);\n  });\n\n  router.post('\u002Flogin', loginPipeline);\n\n  const logoutPipeline = defineEventHandler(async (event) => {\n      await verifyCsrfCookie(event);\n      await limitBytes(0)(event);\n      return logoutHandler(event);\n  })\n\n  router.post('\u002Flogout', logoutPipeline)\n}\n\n```\n\n---\n\n## H3 v2 setup\n\n```ts\nimport { H3 } from 'h3'\nimport {\n  configuration,\n  httpLogger,\n  isIPValid,\n  botDetectorMiddleware,\n  generateCsrfCookie,\n  useAuthRoutes,\n  magicLinksRouter,\n  useOAuthRoutes,\n  bounceRouter,\n  getAuthStatusHandler,\n  getApiListsController,\n} from 'auth-h3client\u002Fv2'\n\nconfiguration({ \u002F* ... *\u002F })\n\n\nconst app = new H3()\napp.register(httpLogger()) \u002F\u002F v2 logger is a plugin: register directly\napp.use(isIPValid)             \u002F\u002F IP extraction and validation\napp.use(botDetectorMiddleware) \u002F\u002F Bot detection via IAM \u002Fcheck\napp.use(generateCsrfCookie)   \u002F\u002F CSRF cookie issuance\n\n\u002F\u002F Routes\nuseAuthRoutes(app);           \u002F\u002F POST \u002Flogin, \u002Fsignup, \u002Flogout\nuseOAuthRoutes(app);          \u002F\u002F GET \u002Foauth\u002F:provider, \u002Foauth\u002Fcallback\u002F:provider\nbounceRouter(app);            \u002F\u002F GET \u002Fauth\u002Fbounce\nmagicLinksRouter(app, 'api'); \u002F\u002F MFA, password reset, email change\n\n\u002F\u002F Auth status endpoint\napp.get('\u002Fauth\u002Fusers\u002FauthStatus', getAuthStatusHandler)\n\n\u002F\u002F Optional API token inventory endpoint\napp.get('\u002Fapi\u002Fauth\u002Fapi-tokens', getApiListsController)\n\n\u002F\u002F Your handlers\n\n```\n\n### Optional API token inventory route\n\n`getApiListsController` gives you a ready-made GET endpoint for authenticated\nAPI token inventory reads. It runs the authenticated session pipeline, calls\nIAM `\u002Fapi\u002Fmanage\u002Flist-metadata`, and strips `public_identifier` out of every\ntoken before returning the payload.\n\nIf you also need write operations such as token creation, rotation, revocation,\nIP restriction updates, or privilege changes, build your POST routes with\n`defineApiManagementHandler`. For public machine-to-machine routes protected by\n`X-API-KEY`, use `defineAuthenticatePublicApi`. Both wrappers are documented in\nthe [Middleware Reference](\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fmiddleware).\n\n### Route-level middleware in v2\n\nH3 v2 passes middleware as the third argument to route methods:\n\n```ts\nimport { defineHandler } from 'h3'\nimport { verifyCsrfCookie, contentType, limitBytes, signUpHandler, loginHandler, logoutHandler } from 'auth-h3client\u002Fv2'\n\nexport function useAuthRoutes(router: H3) {\n\n  router.post('\u002Fsignup', signUpHandler,\n    { middleware: [verifyCsrfCookie, contentType('application\u002Fjson'), limitBytes(1024)] },\n  )\n  \n  router.post('\u002Flogout', logoutHandler, \n    {middleware: [verifyCsrfCookie, limitBytes(0)]}\n  )\n\n  router.post('\u002Flogin', loginHandler,\n  {middleware: [verifyCsrfCookie, contentType('application\u002Fjson'), limitBytes(1024)]}\n  )\n\n}\n\n```\n\n---\n\n## Key differences between v1 and v2\n\n| Aspect | H3 v1 | H3 v2 |\n|---|---|---|\n| Handler definition | `defineEventHandler(...)` | `defineHandler(...)` |\n| Route middleware | `router.use('\u002Fpath', mw)` chained | `{ middleware: [mw1, mw2] }` as third arg |\n| HTTP logger | `httpLogger()(app)` (function call) | `app.register(httpLogger())` (plugin) |\n| Redirect | `sendRedirect(event, url)` | `redirect(event, url)` |\n| Errors | `createError({ ... })` | `throw new HTTPError({ ... })` |\n| Response status | `setResponseStatus(event, code)` | `event.res.status = code` |\n\nThe exported handler wrappers (`defineAuthenticatedEventHandler`, `defineVerifiedCsrfHandler`, etc.), route registrars, and utility functions have the same names and signatures in both versions.\n\n---\n\n## Writing custom handlers\n\nWhen writing your own handlers alongside the library's built-in routes:\n\n### H3 v1\n\n```ts\nimport { defineEventHandler } from 'h3'\nimport { defineAuthenticatedEventHandler } from 'auth-h3client\u002Fv1'\n\nrouter.get('\u002Fapi\u002Fprofile', defineAuthenticatedEventHandler(async (event) => {\n  const { userId, roles } = event.context.authorizedData\n  return { userId, roles }\n}))\n```\n\n### H3 v2\n\n```ts\nimport { defineHandler } from 'h3'\nimport { defineAuthenticatedEventHandler } from 'auth-h3client\u002Fv2'\n\nrouter.get('\u002Fapi\u002Fprofile', defineAuthenticatedEventHandler(async (event) => {\n  const { userId, roles } = event.context.authorizedData\n  return { userId, roles }\n}))\n```\n\nThe handler wrappers internally use the correct `defineEventHandler` or `defineHandler` from the version you import.\n\n---\n\n## Nitro plugin setup\n\nWhen using Nitro (without the full Nuxt module), configure the library in a Nitro plugin:\n\n```ts [server\u002Fplugins\u002FinitAuth.ts]\nimport { defineNitroPlugin } from \"nitro\";\nimport { configuration, httpLogger, useAuthRoutes, useOAuthRoutes, magicLinksRouter, bounceRouter } from 'auth-h3client';\nimport { configDefaults } from 'auth-h3client\u002Fserver\u002Ftemplates'\n\nexport default defineNitroPlugin((nitro) => {\nconfiguration({\n  ...configDefaults,\n    uStorage: {\n      storage: useStorage('cache'),\n      cacheOptions: {\n          successTtl: 60 * 60 * 24 * 30, \n          rateLimitTtl: 10    \n      }\n    }\n  });\n\nhttpLogger()(nitro.h3App);\nnitro.h3App.use(isIPValid)\nnitro.h3App.use(botDetectorMiddleware)\nnitro.h3App.use(generateCsrfCookie)\n\nuseAuthRoutes(nitro.router);\nuseOAuthRoutes(nitro.router);\nbounceRouter(nitro.router);\nmagicLinksRouter(nitro.router, 'api');\n})\n```\n\n::caution\nWhen using a newer version of nitro, use the same setup above, and check if that version uses the v2 version of h3, if so, import directly from `auth-h3client\u002Fv2`\n::\n\n---\n\n::note\nThe key point to understand here, it doesn't matter what framework (nuxt\u002Fnitro) or h3 version you use, is that `configuration` needs to be called ones, in your app entry point, the middlewares needs to be registered along side the routes in this exact order.\n::\n\n## What the Nuxt module adds\n\nIf you use the Nuxt module instead of manual setup, it provides:\n\n- Auto-imports of all server utilities in the `server\u002F` directory\n- Auto-imports of client composables (`useAuthData`, `executeRequest`, `getCsrfToken`, `useMagicLink`)\n- Automatic registration of the auth status route at the configured `authStatusUrl`\n- Optional registration of an API token list route at `registerApiRoute.path`\n- The `enableMiddleware` option for global middleware activation only. Disabling it does not disable the auth status route or the optional API token list route.\n\nSee [Nuxt Module](\u002Fdocs\u002Fauth-h3client\u002Fgetting-started\u002Fnuxt) for the Nuxt module setup.\n",{"title":176,"description":3925},"SAYwZ-773_qMZaH7Cy-sXFaH_VkhhIQ5QTtvwTcW6fI",[3934,3935],{"title":38,"path":168,"stem":169,"children":-1},{"title":180,"path":181,"stem":182,"children":-1},{"id":843,"title":176,"body":3937,"description":3925,"extension":3926,"icon":3927,"meta":6579,"module":3929,"navigation":8,"path":177,"rawbody":3930,"seo":6580,"stem":178,"__hash__":3932},{"type":845,"value":3938,"toc":6561},[3939,3943,3945,3947,3993,3995,3997,4001,4361,4365,4367,4369,4731,4749,4751,5171,5173,5175,5513,5515,5523,5533,5535,5537,5807,5809,5811,5897,5903,5905,5907,5909,5911,6033,6035,6157,6163,6165,6167,6169,6509,6515,6517,6523,6525,6527,6555,6559],[848,3940,850,3941,855],{},[852,3942,854],{},[857,3944],{},[860,3946,863],{"id":862},[865,3948,3949,3959],{},[868,3950,3951],{},[871,3952,3953,3955,3957],{},[874,3954,876],{},[874,3956,879],{},[874,3958,882],{},[884,3960,3961,3973,3983],{},[871,3962,3963,3969,3971],{},[889,3964,3965,893,3967],{},[852,3966,854],{},[852,3968,896],{},[889,3970,899],{},[889,3972,902],{},[871,3974,3975,3979,3981],{},[889,3976,3977],{},[852,3978,909],{},[889,3980,912],{},[889,3982,915],{},[871,3984,3985,3989,3991],{},[889,3986,3987],{},[852,3988,922],{},[889,3990,925],{},[889,3992,928],{},[857,3994],{},[860,3996,192],{"id":933},[848,3998,936,3999,940],{},[852,4000,939],{},[942,4002,4003],{"className":944,"code":945,"language":946,"meta":947,"style":947},[852,4004,4005,4023,4041,4055,4059,4079,4083,4089,4097,4105,4131,4159,4163,4171,4181,4201,4221,4225,4241,4261,4265,4273,4279,4315,4319,4333,4343,4357],{"__ignoreMap":947},[951,4006,4007,4009,4011,4013,4015,4017,4019,4021],{"class":953,"line":954},[951,4008,958],{"class":957},[951,4010,962],{"class":961},[951,4012,933],{"class":965},[951,4014,968],{"class":961},[951,4016,971],{"class":957},[951,4018,975],{"class":974},[951,4020,896],{"class":978},[951,4022,981],{"class":974},[951,4024,4025,4027,4029,4031,4033,4035,4037,4039],{"class":953,"line":984},[951,4026,958],{"class":957},[951,4028,962],{"class":961},[951,4030,991],{"class":965},[951,4032,968],{"class":961},[951,4034,971],{"class":957},[951,4036,975],{"class":974},[951,4038,1000],{"class":978},[951,4040,981],{"class":974},[951,4042,4043,4045,4047,4049,4051,4053],{"class":953,"line":1005},[951,4044,958],{"class":957},[951,4046,1010],{"class":965},[951,4048,1013],{"class":957},[951,4050,975],{"class":974},[951,4052,1018],{"class":978},[951,4054,981],{"class":974},[951,4056,4057],{"class":953,"line":1023},[951,4058,1026],{"emptyLinePlaceholder":8},[951,4060,4061,4063,4065,4067,4069,4071,4073,4075,4077],{"class":953,"line":1029},[951,4062,1033],{"class":1032},[951,4064,1037],{"class":1036},[951,4066,1041],{"class":1040},[951,4068,1045],{"class":1044},[951,4070,1048],{"class":961},[951,4072,1051],{"class":965},[951,4074,1055],{"class":1054},[951,4076,1010],{"class":1044},[951,4078,1060],{"class":961},[951,4080,4081],{"class":953,"line":1063},[951,4082,1026],{"emptyLinePlaceholder":8},[951,4084,4085,4087],{"class":953,"line":1068},[951,4086,933],{"class":1044},[951,4088,1073],{"class":961},[951,4090,4091,4093,4095],{"class":953,"line":1076},[951,4092,1079],{"class":965},[951,4094,1055],{"class":1054},[951,4096,1084],{"class":961},[951,4098,4099,4101,4103],{"class":953,"line":1087},[951,4100,1090],{"class":965},[951,4102,1055],{"class":1054},[951,4104,1084],{"class":961},[951,4106,4107,4109,4111,4113,4115,4117,4119,4121,4123,4125,4127,4129],{"class":953,"line":1097},[951,4108,1100],{"class":965},[951,4110,1055],{"class":1054},[951,4112,1105],{"class":965},[951,4114,1108],{"class":961},[951,4116,1111],{"class":965},[951,4118,1108],{"class":961},[951,4120,1117],{"class":1116},[951,4122,1120],{"class":1040},[951,4124,975],{"class":974},[951,4126,1125],{"class":978},[951,4128,1128],{"class":974},[951,4130,1131],{"class":961},[951,4132,4133,4135,4137,4139,4141,4143,4145,4147,4149,4151,4153,4155,4157],{"class":953,"line":1134},[951,4134,1137],{"class":965},[951,4136,1055],{"class":1054},[951,4138,1142],{"class":1044},[951,4140,1145],{"class":961},[951,4142,1148],{"class":965},[951,4144,1108],{"class":961},[951,4146,1111],{"class":965},[951,4148,1108],{"class":961},[951,4150,1157],{"class":1116},[951,4152,1160],{"class":961},[951,4154,1163],{"class":1040},[951,4156,1167],{"class":1166},[951,4158,1131],{"class":961},[951,4160,4161],{"class":953,"line":1172},[951,4162,1175],{"class":961},[951,4164,4165,4167,4169],{"class":953,"line":1178},[951,4166,1181],{"class":965},[951,4168,1055],{"class":1054},[951,4170,1084],{"class":961},[951,4172,4173,4175,4177,4179],{"class":953,"line":1188},[951,4174,1191],{"class":965},[951,4176,1055],{"class":1054},[951,4178,1197],{"class":1196},[951,4180,1131],{"class":961},[951,4182,4183,4185,4187,4189,4191,4193,4195,4197,4199],{"class":953,"line":1202},[951,4184,1205],{"class":965},[951,4186,1055],{"class":1054},[951,4188,1105],{"class":965},[951,4190,1108],{"class":961},[951,4192,1111],{"class":965},[951,4194,1108],{"class":961},[951,4196,1218],{"class":1116},[951,4198,1221],{"class":1040},[951,4200,1131],{"class":961},[951,4202,4203,4205,4207,4209,4211,4213,4215,4217,4219],{"class":953,"line":1226},[951,4204,1229],{"class":965},[951,4206,1055],{"class":1054},[951,4208,1105],{"class":965},[951,4210,1108],{"class":961},[951,4212,1111],{"class":965},[951,4214,1108],{"class":961},[951,4216,1242],{"class":1116},[951,4218,1221],{"class":1040},[951,4220,1131],{"class":961},[951,4222,4223],{"class":953,"line":1249},[951,4224,1175],{"class":961},[951,4226,4227,4229,4231,4233,4235,4237,4239],{"class":953,"line":1254},[951,4228,1257],{"class":965},[951,4230,1055],{"class":1054},[951,4232,962],{"class":961},[951,4234,1264],{"class":965},[951,4236,1055],{"class":1054},[951,4238,1269],{"class":1196},[951,4240,1272],{"class":961},[951,4242,4243,4245,4247,4249,4251,4253,4255,4257,4259],{"class":953,"line":1275},[951,4244,1278],{"class":965},[951,4246,1055],{"class":1054},[951,4248,1105],{"class":965},[951,4250,1108],{"class":961},[951,4252,1111],{"class":965},[951,4254,1108],{"class":961},[951,4256,1291],{"class":1116},[951,4258,1221],{"class":1040},[951,4260,1131],{"class":961},[951,4262,4263],{"class":953,"line":1298},[951,4264,1301],{"class":961},[951,4266,4267,4269,4271],{"class":953,"line":1304},[951,4268,1307],{"class":965},[951,4270,1055],{"class":1054},[951,4272,1084],{"class":961},[951,4274,4275,4277],{"class":953,"line":1314},[951,4276,1317],{"class":965},[951,4278,1131],{"class":961},[951,4280,4281,4283,4285,4287,4289,4291,4293,4295,4297,4299,4301,4303,4305,4307,4309,4311,4313],{"class":953,"line":1322},[951,4282,1325],{"class":965},[951,4284,1055],{"class":1054},[951,4286,962],{"class":961},[951,4288,1332],{"class":965},[951,4290,1055],{"class":1054},[951,4292,1337],{"class":1166},[951,4294,1340],{"class":1040},[951,4296,1337],{"class":1166},[951,4298,1340],{"class":1040},[951,4300,1347],{"class":1166},[951,4302,1340],{"class":1040},[951,4304,1352],{"class":1166},[951,4306,1355],{"class":961},[951,4308,1358],{"class":965},[951,4310,1055],{"class":1054},[951,4312,1363],{"class":1166},[951,4314,1272],{"class":961},[951,4316,4317],{"class":953,"line":1368},[951,4318,1301],{"class":961},[951,4320,4321,4323,4325,4327,4329,4331],{"class":953,"line":1373},[951,4322,1376],{"class":965},[951,4324,1055],{"class":1054},[951,4326,975],{"class":974},[951,4328,1383],{"class":978},[951,4330,1128],{"class":974},[951,4332,1131],{"class":961},[951,4334,4335,4337,4339,4341],{"class":953,"line":1390},[951,4336,1393],{"class":965},[951,4338,1055],{"class":1054},[951,4340,1269],{"class":1196},[951,4342,1131],{"class":961},[951,4344,4345,4347,4349,4351,4353,4355],{"class":953,"line":1402},[951,4346,1405],{"class":965},[951,4348,1055],{"class":1054},[951,4350,975],{"class":974},[951,4352,1412],{"class":978},[951,4354,1128],{"class":974},[951,4356,1131],{"class":961},[951,4358,4359],{"class":953,"line":1419},[951,4360,1422],{"class":961},[848,4362,1425,4363,1429],{},[1427,4364,192],{"href":193},[857,4366],{},[860,4368,1435],{"id":1434},[942,4370,4371],{"className":944,"code":1438,"language":946,"meta":947,"style":947},[852,4372,4373,4395,4401,4407,4413,4419,4425,4431,4437,4443,4449,4455,4461,4473,4479,4483,4493,4497,4509,4513,4517,4529,4545,4561,4577,4581,4585,4597,4609,4621,4633,4653,4657,4661,4683,4687,4691,4713,4717],{"__ignoreMap":947},[951,4374,4375,4377,4379,4381,4383,4385,4387,4389,4391,4393],{"class":953,"line":954},[951,4376,958],{"class":957},[951,4378,962],{"class":961},[951,4380,1449],{"class":965},[951,4382,1355],{"class":961},[951,4384,1454],{"class":965},[951,4386,968],{"class":961},[951,4388,971],{"class":957},[951,4390,975],{"class":974},[951,4392,1463],{"class":978},[951,4394,981],{"class":974},[951,4396,4397,4399],{"class":953,"line":984},[951,4398,958],{"class":957},[951,4400,1084],{"class":961},[951,4402,4403,4405],{"class":953,"line":1005},[951,4404,1476],{"class":965},[951,4406,1131],{"class":961},[951,4408,4409,4411],{"class":953,"line":1023},[951,4410,1483],{"class":965},[951,4412,1131],{"class":961},[951,4414,4415,4417],{"class":953,"line":1029},[951,4416,1490],{"class":965},[951,4418,1131],{"class":961},[951,4420,4421,4423],{"class":953,"line":1063},[951,4422,1497],{"class":965},[951,4424,1131],{"class":961},[951,4426,4427,4429],{"class":953,"line":1068},[951,4428,1504],{"class":965},[951,4430,1131],{"class":961},[951,4432,4433,4435],{"class":953,"line":1076},[951,4434,1511],{"class":965},[951,4436,1131],{"class":961},[951,4438,4439,4441],{"class":953,"line":1087},[951,4440,1518],{"class":965},[951,4442,1131],{"class":961},[951,4444,4445,4447],{"class":953,"line":1097},[951,4446,1525],{"class":965},[951,4448,1131],{"class":961},[951,4450,4451,4453],{"class":953,"line":1134},[951,4452,1532],{"class":965},[951,4454,1131],{"class":961},[951,4456,4457,4459],{"class":953,"line":1172},[951,4458,1539],{"class":965},[951,4460,1131],{"class":961},[951,4462,4463,4465,4467,4469,4471],{"class":953,"line":1178},[951,4464,1546],{"class":961},[951,4466,971],{"class":957},[951,4468,975],{"class":974},[951,4470,896],{"class":978},[951,4472,981],{"class":974},[951,4474,4475,4477],{"class":953,"line":1188},[951,4476,1559],{"class":965},[951,4478,1131],{"class":961},[951,4480,4481],{"class":953,"line":1202},[951,4482,1026],{"emptyLinePlaceholder":8},[951,4484,4485,4487,4489,4491],{"class":953,"line":1226},[951,4486,933],{"class":1044},[951,4488,1048],{"class":961},[951,4490,1575],{"class":1574},[951,4492,1578],{"class":961},[951,4494,4495],{"class":953,"line":1249},[951,4496,1026],{"emptyLinePlaceholder":8},[951,4498,4499,4501,4503,4505,4507],{"class":953,"line":1254},[951,4500,1033],{"class":1032},[951,4502,1589],{"class":1036},[951,4504,1041],{"class":1040},[951,4506,1594],{"class":1044},[951,4508,1597],{"class":961},[951,4510,4511],{"class":953,"line":1275},[951,4512,1026],{"emptyLinePlaceholder":8},[951,4514,4515],{"class":953,"line":1298},[951,4516,1606],{"class":1574},[951,4518,4519,4521,4523,4525,4527],{"class":953,"line":1304},[951,4520,1611],{"class":1044},[951,4522,1614],{"class":961},[951,4524,1617],{"class":965},[951,4526,1620],{"class":961},[951,4528,1623],{"class":1574},[951,4530,4531,4533,4535,4537,4539,4541,4543],{"class":953,"line":1314},[951,4532,1617],{"class":965},[951,4534,1108],{"class":961},[951,4536,1632],{"class":1044},[951,4538,1145],{"class":961},[951,4540,1637],{"class":965},[951,4542,1640],{"class":961},[951,4544,1643],{"class":1574},[951,4546,4547,4549,4551,4553,4555,4557,4559],{"class":953,"line":1322},[951,4548,1617],{"class":965},[951,4550,1108],{"class":961},[951,4552,1632],{"class":1044},[951,4554,1145],{"class":961},[951,4556,1656],{"class":965},[951,4558,1160],{"class":961},[951,4560,1661],{"class":1574},[951,4562,4563,4565,4567,4569,4571,4573,4575],{"class":953,"line":1368},[951,4564,1617],{"class":965},[951,4566,1108],{"class":961},[951,4568,1632],{"class":1044},[951,4570,1145],{"class":961},[951,4572,1674],{"class":965},[951,4574,1677],{"class":961},[951,4576,1680],{"class":1574},[951,4578,4579],{"class":953,"line":1373},[951,4580,1026],{"emptyLinePlaceholder":8},[951,4582,4583],{"class":953,"line":1390},[951,4584,1689],{"class":1574},[951,4586,4587,4589,4591,4593,4595],{"class":953,"line":1402},[951,4588,1033],{"class":1032},[951,4590,1696],{"class":1036},[951,4592,1041],{"class":1040},[951,4594,1701],{"class":1044},[951,4596,1597],{"class":961},[951,4598,4599,4601,4603,4605,4607],{"class":953,"line":1419},[951,4600,1708],{"class":1044},[951,4602,1145],{"class":961},[951,4604,1713],{"class":965},[951,4606,1716],{"class":961},[951,4608,1719],{"class":1574},[951,4610,4611,4613,4615,4617,4619],{"class":953,"line":1722},[951,4612,1725],{"class":1044},[951,4614,1145],{"class":961},[951,4616,1713],{"class":965},[951,4618,1732],{"class":961},[951,4620,1735],{"class":1574},[951,4622,4623,4625,4627,4629,4631],{"class":953,"line":1738},[951,4624,1741],{"class":1044},[951,4626,1145],{"class":961},[951,4628,1713],{"class":965},[951,4630,1748],{"class":961},[951,4632,1751],{"class":1574},[951,4634,4635,4637,4639,4641,4643,4645,4647,4649,4651],{"class":953,"line":1754},[951,4636,1757],{"class":1044},[951,4638,1145],{"class":961},[951,4640,1713],{"class":965},[951,4642,1355],{"class":961},[951,4644,1128],{"class":974},[951,4646,1768],{"class":978},[951,4648,1128],{"class":974},[951,4650,1160],{"class":961},[951,4652,1775],{"class":1574},[951,4654,4655],{"class":953,"line":1778},[951,4656,1026],{"emptyLinePlaceholder":8},[951,4658,4659],{"class":953,"line":1783},[951,4660,1786],{"class":1574},[951,4662,4663,4665,4667,4669,4671,4673,4675,4677,4679,4681],{"class":953,"line":1789},[951,4664,1713],{"class":965},[951,4666,1108],{"class":961},[951,4668,1796],{"class":1044},[951,4670,1145],{"class":961},[951,4672,1128],{"class":974},[951,4674,1803],{"class":978},[951,4676,1128],{"class":974},[951,4678,1355],{"class":961},[951,4680,1810],{"class":965},[951,4682,1813],{"class":961},[951,4684,4685],{"class":953,"line":1816},[951,4686,1026],{"emptyLinePlaceholder":8},[951,4688,4689],{"class":953,"line":1821},[951,4690,1824],{"class":1574},[951,4692,4693,4695,4697,4699,4701,4703,4705,4707,4709,4711],{"class":953,"line":1827},[951,4694,1713],{"class":965},[951,4696,1108],{"class":961},[951,4698,1796],{"class":1044},[951,4700,1145],{"class":961},[951,4702,1128],{"class":974},[951,4704,1840],{"class":978},[951,4706,1128],{"class":974},[951,4708,1355],{"class":961},[951,4710,1847],{"class":965},[951,4712,1813],{"class":961},[951,4714,4715],{"class":953,"line":1852},[951,4716,1026],{"emptyLinePlaceholder":8},[951,4718,4719,4721,4723,4725,4727,4729],{"class":953,"line":1857},[951,4720,1617],{"class":965},[951,4722,1108],{"class":961},[951,4724,1632],{"class":1044},[951,4726,1145],{"class":961},[951,4728,1713],{"class":965},[951,4730,1813],{"class":961},[1871,4732,4733],{},[848,4734,1875,4735,1355,4737,1880,4739,1883,4741,1887,4743,1891,4745,1880,4747,1897],{},[852,4736,1637],{},[852,4738,1656],{},[852,4740,1674],{},[852,4742,1886],{},[852,4744,1890],{},[852,4746,1847],{},[852,4748,1896],{},[1463,4750,1901],{"id":1900},[942,4752,4753],{"className":944,"code":1904,"language":946,"meta":947,"style":947},[852,4754,4755,4773,4811,4815,4833,4837,4861,4873,4893,4909,4921,4925,4929,4951,4955,4979,4991,5011,5027,5039,5043,5047,5069,5073,5097,5109,5125,5137,5141,5145,5167],{"__ignoreMap":947},[951,4756,4757,4759,4761,4763,4765,4767,4769,4771],{"class":953,"line":954},[951,4758,958],{"class":957},[951,4760,962],{"class":961},[951,4762,1915],{"class":965},[951,4764,968],{"class":961},[951,4766,971],{"class":957},[951,4768,975],{"class":974},[951,4770,1463],{"class":978},[951,4772,981],{"class":974},[951,4774,4775,4777,4779,4781,4783,4785,4787,4789,4791,4793,4795,4797,4799,4801,4803,4805,4807,4809],{"class":953,"line":984},[951,4776,958],{"class":957},[951,4778,962],{"class":961},[951,4780,1934],{"class":965},[951,4782,1355],{"class":961},[951,4784,1939],{"class":965},[951,4786,1355],{"class":961},[951,4788,1944],{"class":965},[951,4790,1355],{"class":961},[951,4792,1949],{"class":965},[951,4794,1355],{"class":961},[951,4796,1954],{"class":965},[951,4798,1355],{"class":961},[951,4800,1959],{"class":965},[951,4802,968],{"class":961},[951,4804,971],{"class":957},[951,4806,975],{"class":974},[951,4808,896],{"class":978},[951,4810,981],{"class":974},[951,4812,4813],{"class":953,"line":1005},[951,4814,1026],{"emptyLinePlaceholder":8},[951,4816,4817,4819,4821,4823,4825,4827,4829,4831],{"class":953,"line":1023},[951,4818,1978],{"class":957},[951,4820,1981],{"class":1032},[951,4822,1984],{"class":1044},[951,4824,1145],{"class":961},[951,4826,1713],{"class":1989},[951,4828,1055],{"class":1040},[951,4830,1995],{"class":1994},[951,4832,1998],{"class":961},[951,4834,4835],{"class":953,"line":1029},[951,4836,1026],{"emptyLinePlaceholder":8},[951,4838,4839,4841,4843,4845,4847,4849,4851,4853,4855,4857,4859],{"class":953,"line":1063},[951,4840,2007],{"class":1032},[951,4842,2010],{"class":1036},[951,4844,1041],{"class":1040},[951,4846,2015],{"class":1044},[951,4848,1145],{"class":961},[951,4850,2020],{"class":1032},[951,4852,2023],{"class":961},[951,4854,2026],{"class":1989},[951,4856,1160],{"class":961},[951,4858,2031],{"class":1032},[951,4860,1084],{"class":961},[951,4862,4863,4865,4867,4869,4871],{"class":953,"line":1068},[951,4864,2038],{"class":957},[951,4866,2041],{"class":1044},[951,4868,1145],{"class":961},[951,4870,2026],{"class":965},[951,4872,2048],{"class":961},[951,4874,4875,4877,4879,4881,4883,4885,4887,4889,4891],{"class":953,"line":1076},[951,4876,2038],{"class":957},[951,4878,2055],{"class":1044},[951,4880,1145],{"class":961},[951,4882,1128],{"class":974},[951,4884,2062],{"class":978},[951,4886,1128],{"class":974},[951,4888,2067],{"class":961},[951,4890,2026],{"class":965},[951,4892,2048],{"class":961},[951,4894,4895,4897,4899,4901,4903,4905,4907],{"class":953,"line":1087},[951,4896,2038],{"class":957},[951,4898,2078],{"class":1044},[951,4900,1145],{"class":961},[951,4902,2083],{"class":1166},[951,4904,2067],{"class":961},[951,4906,2026],{"class":965},[951,4908,2048],{"class":961},[951,4910,4911,4913,4915,4917,4919],{"class":953,"line":1097},[951,4912,2094],{"class":957},[951,4914,2097],{"class":1044},[951,4916,1145],{"class":961},[951,4918,2026],{"class":965},[951,4920,2048],{"class":961},[951,4922,4923],{"class":953,"line":1134},[951,4924,2108],{"class":961},[951,4926,4927],{"class":953,"line":1172},[951,4928,1026],{"emptyLinePlaceholder":8},[951,4930,4931,4933,4935,4937,4939,4941,4943,4945,4947,4949],{"class":953,"line":1178},[951,4932,2117],{"class":965},[951,4934,1108],{"class":961},[951,4936,2122],{"class":1044},[951,4938,1145],{"class":961},[951,4940,1128],{"class":974},[951,4942,2129],{"class":978},[951,4944,1128],{"class":974},[951,4946,1355],{"class":961},[951,4948,2136],{"class":965},[951,4950,2048],{"class":961},[951,4952,4953],{"class":953,"line":1188},[951,4954,1026],{"emptyLinePlaceholder":8},[951,4956,4957,4959,4961,4963,4965,4967,4969,4971,4973,4975,4977],{"class":953,"line":1202},[951,4958,2007],{"class":1032},[951,4960,2149],{"class":1036},[951,4962,1041],{"class":1040},[951,4964,2015],{"class":1044},[951,4966,1145],{"class":961},[951,4968,2020],{"class":1032},[951,4970,2023],{"class":961},[951,4972,2026],{"class":1989},[951,4974,1160],{"class":961},[951,4976,2031],{"class":1032},[951,4978,1084],{"class":961},[951,4980,4981,4983,4985,4987,4989],{"class":953,"line":1226},[951,4982,2172],{"class":957},[951,4984,2041],{"class":1044},[951,4986,1145],{"class":961},[951,4988,2026],{"class":965},[951,4990,2048],{"class":961},[951,4992,4993,4995,4997,4999,5001,5003,5005,5007,5009],{"class":953,"line":1249},[951,4994,2172],{"class":957},[951,4996,2055],{"class":1044},[951,4998,1145],{"class":961},[951,5000,1128],{"class":974},[951,5002,2062],{"class":978},[951,5004,1128],{"class":974},[951,5006,2067],{"class":961},[951,5008,2026],{"class":965},[951,5010,2048],{"class":961},[951,5012,5013,5015,5017,5019,5021,5023,5025],{"class":953,"line":1254},[951,5014,2172],{"class":957},[951,5016,2078],{"class":1044},[951,5018,1145],{"class":961},[951,5020,2083],{"class":1166},[951,5022,2067],{"class":961},[951,5024,2026],{"class":965},[951,5026,2048],{"class":961},[951,5028,5029,5031,5033,5035,5037],{"class":953,"line":1275},[951,5030,2221],{"class":957},[951,5032,2224],{"class":1044},[951,5034,1145],{"class":961},[951,5036,2026],{"class":965},[951,5038,2048],{"class":961},[951,5040,5041],{"class":953,"line":1298},[951,5042,2235],{"class":961},[951,5044,5045],{"class":953,"line":1304},[951,5046,1026],{"emptyLinePlaceholder":8},[951,5048,5049,5051,5053,5055,5057,5059,5061,5063,5065,5067],{"class":953,"line":1314},[951,5050,2117],{"class":965},[951,5052,1108],{"class":961},[951,5054,2122],{"class":1044},[951,5056,1145],{"class":961},[951,5058,1128],{"class":974},[951,5060,2254],{"class":978},[951,5062,1128],{"class":974},[951,5064,1355],{"class":961},[951,5066,2261],{"class":965},[951,5068,2048],{"class":961},[951,5070,5071],{"class":953,"line":1322},[951,5072,1026],{"emptyLinePlaceholder":8},[951,5074,5075,5077,5079,5081,5083,5085,5087,5089,5091,5093,5095],{"class":953,"line":1368},[951,5076,2007],{"class":1032},[951,5078,2274],{"class":1036},[951,5080,1041],{"class":1040},[951,5082,2015],{"class":1044},[951,5084,1145],{"class":961},[951,5086,2020],{"class":1032},[951,5088,2023],{"class":961},[951,5090,2026],{"class":1989},[951,5092,1160],{"class":961},[951,5094,2031],{"class":1032},[951,5096,1084],{"class":961},[951,5098,5099,5101,5103,5105,5107],{"class":953,"line":1373},[951,5100,2172],{"class":957},[951,5102,2041],{"class":1044},[951,5104,1145],{"class":961},[951,5106,2026],{"class":965},[951,5108,2048],{"class":961},[951,5110,5111,5113,5115,5117,5119,5121,5123],{"class":953,"line":1390},[951,5112,2172],{"class":957},[951,5114,2078],{"class":1044},[951,5116,1145],{"class":961},[951,5118,2315],{"class":1166},[951,5120,2067],{"class":961},[951,5122,2026],{"class":965},[951,5124,2048],{"class":961},[951,5126,5127,5129,5131,5133,5135],{"class":953,"line":1402},[951,5128,2221],{"class":957},[951,5130,2328],{"class":1044},[951,5132,1145],{"class":961},[951,5134,2026],{"class":965},[951,5136,2048],{"class":961},[951,5138,5139],{"class":953,"line":1419},[951,5140,2108],{"class":961},[951,5142,5143],{"class":953,"line":1722},[951,5144,1026],{"emptyLinePlaceholder":8},[951,5146,5147,5149,5151,5153,5155,5157,5159,5161,5163,5165],{"class":953,"line":1738},[951,5148,2117],{"class":965},[951,5150,1108],{"class":961},[951,5152,2122],{"class":1044},[951,5154,1145],{"class":961},[951,5156,1128],{"class":974},[951,5158,2357],{"class":978},[951,5160,1128],{"class":974},[951,5162,1355],{"class":961},[951,5164,2364],{"class":965},[951,5166,1813],{"class":961},[951,5168,5169],{"class":953,"line":1754},[951,5170,2371],{"class":961},[857,5172],{},[860,5174,2377],{"id":2376},[942,5176,5177],{"className":944,"code":2380,"language":946,"meta":947,"style":947},[852,5178,5179,5197,5203,5209,5215,5221,5227,5233,5239,5245,5251,5257,5263,5269,5281,5285,5295,5299,5303,5317,5333,5349,5365,5381,5385,5389,5401,5413,5425,5445,5449,5453,5475,5479,5483,5505,5509],{"__ignoreMap":947},[951,5180,5181,5183,5185,5187,5189,5191,5193,5195],{"class":953,"line":954},[951,5182,958],{"class":957},[951,5184,962],{"class":961},[951,5186,2391],{"class":965},[951,5188,968],{"class":961},[951,5190,971],{"class":957},[951,5192,975],{"class":974},[951,5194,1463],{"class":978},[951,5196,981],{"class":974},[951,5198,5199,5201],{"class":953,"line":984},[951,5200,958],{"class":957},[951,5202,1084],{"class":961},[951,5204,5205,5207],{"class":953,"line":1005},[951,5206,1476],{"class":965},[951,5208,1131],{"class":961},[951,5210,5211,5213],{"class":953,"line":1023},[951,5212,1483],{"class":965},[951,5214,1131],{"class":961},[951,5216,5217,5219],{"class":953,"line":1029},[951,5218,1490],{"class":965},[951,5220,1131],{"class":961},[951,5222,5223,5225],{"class":953,"line":1063},[951,5224,1497],{"class":965},[951,5226,1131],{"class":961},[951,5228,5229,5231],{"class":953,"line":1068},[951,5230,1504],{"class":965},[951,5232,1131],{"class":961},[951,5234,5235,5237],{"class":953,"line":1076},[951,5236,1511],{"class":965},[951,5238,1131],{"class":961},[951,5240,5241,5243],{"class":953,"line":1087},[951,5242,1518],{"class":965},[951,5244,1131],{"class":961},[951,5246,5247,5249],{"class":953,"line":1097},[951,5248,1525],{"class":965},[951,5250,1131],{"class":961},[951,5252,5253,5255],{"class":953,"line":1134},[951,5254,1532],{"class":965},[951,5256,1131],{"class":961},[951,5258,5259,5261],{"class":953,"line":1172},[951,5260,1539],{"class":965},[951,5262,1131],{"class":961},[951,5264,5265,5267],{"class":953,"line":1178},[951,5266,1559],{"class":965},[951,5268,1131],{"class":961},[951,5270,5271,5273,5275,5277,5279],{"class":953,"line":1188},[951,5272,1546],{"class":961},[951,5274,971],{"class":957},[951,5276,975],{"class":974},[951,5278,909],{"class":978},[951,5280,981],{"class":974},[951,5282,5283],{"class":953,"line":1202},[951,5284,1026],{"emptyLinePlaceholder":8},[951,5286,5287,5289,5291,5293],{"class":953,"line":1226},[951,5288,933],{"class":1044},[951,5290,1048],{"class":961},[951,5292,1575],{"class":1574},[951,5294,1578],{"class":961},[951,5296,5297],{"class":953,"line":1249},[951,5298,1026],{"emptyLinePlaceholder":8},[951,5300,5301],{"class":953,"line":1254},[951,5302,1026],{"emptyLinePlaceholder":8},[951,5304,5305,5307,5309,5311,5313,5315],{"class":953,"line":1275},[951,5306,1033],{"class":1032},[951,5308,1589],{"class":1036},[951,5310,1041],{"class":1040},[951,5312,2519],{"class":2518},[951,5314,2522],{"class":1044},[951,5316,1597],{"class":961},[951,5318,5319,5321,5323,5325,5327,5329,5331],{"class":953,"line":1298},[951,5320,1617],{"class":965},[951,5322,1108],{"class":961},[951,5324,2533],{"class":1044},[951,5326,1145],{"class":961},[951,5328,1611],{"class":1044},[951,5330,2540],{"class":961},[951,5332,2543],{"class":1574},[951,5334,5335,5337,5339,5341,5343,5345,5347],{"class":953,"line":1304},[951,5336,1617],{"class":965},[951,5338,1108],{"class":961},[951,5340,1632],{"class":1044},[951,5342,1145],{"class":961},[951,5344,1637],{"class":965},[951,5346,1640],{"class":961},[951,5348,1643],{"class":1574},[951,5350,5351,5353,5355,5357,5359,5361,5363],{"class":953,"line":1314},[951,5352,1617],{"class":965},[951,5354,1108],{"class":961},[951,5356,1632],{"class":1044},[951,5358,1145],{"class":961},[951,5360,1656],{"class":965},[951,5362,1160],{"class":961},[951,5364,1661],{"class":1574},[951,5366,5367,5369,5371,5373,5375,5377,5379],{"class":953,"line":1322},[951,5368,1617],{"class":965},[951,5370,1108],{"class":961},[951,5372,1632],{"class":1044},[951,5374,1145],{"class":961},[951,5376,1674],{"class":965},[951,5378,1677],{"class":961},[951,5380,1680],{"class":1574},[951,5382,5383],{"class":953,"line":1368},[951,5384,1026],{"emptyLinePlaceholder":8},[951,5386,5387],{"class":953,"line":1373},[951,5388,1689],{"class":1574},[951,5390,5391,5393,5395,5397,5399],{"class":953,"line":1390},[951,5392,1708],{"class":1044},[951,5394,1145],{"class":961},[951,5396,1617],{"class":965},[951,5398,2610],{"class":961},[951,5400,1719],{"class":1574},[951,5402,5403,5405,5407,5409,5411],{"class":953,"line":1402},[951,5404,1725],{"class":1044},[951,5406,1145],{"class":961},[951,5408,1617],{"class":965},[951,5410,2623],{"class":961},[951,5412,1735],{"class":1574},[951,5414,5415,5417,5419,5421,5423],{"class":953,"line":1419},[951,5416,1741],{"class":1044},[951,5418,1145],{"class":961},[951,5420,1617],{"class":965},[951,5422,2636],{"class":961},[951,5424,1751],{"class":1574},[951,5426,5427,5429,5431,5433,5435,5437,5439,5441,5443],{"class":953,"line":1722},[951,5428,1757],{"class":1044},[951,5430,1145],{"class":961},[951,5432,1617],{"class":965},[951,5434,1355],{"class":961},[951,5436,1128],{"class":974},[951,5438,1768],{"class":978},[951,5440,1128],{"class":974},[951,5442,2657],{"class":961},[951,5444,1775],{"class":1574},[951,5446,5447],{"class":953,"line":1738},[951,5448,1026],{"emptyLinePlaceholder":8},[951,5450,5451],{"class":953,"line":1754},[951,5452,1786],{"class":1574},[951,5454,5455,5457,5459,5461,5463,5465,5467,5469,5471,5473],{"class":953,"line":1778},[951,5456,1617],{"class":965},[951,5458,1108],{"class":961},[951,5460,1796],{"class":1044},[951,5462,1145],{"class":961},[951,5464,1128],{"class":974},[951,5466,1803],{"class":978},[951,5468,1128],{"class":974},[951,5470,1355],{"class":961},[951,5472,1810],{"class":965},[951,5474,1813],{"class":961},[951,5476,5477],{"class":953,"line":1783},[951,5478,1026],{"emptyLinePlaceholder":8},[951,5480,5481],{"class":953,"line":1789},[951,5482,1824],{"class":1574},[951,5484,5485,5487,5489,5491,5493,5495,5497,5499,5501,5503],{"class":953,"line":1816},[951,5486,1617],{"class":965},[951,5488,1108],{"class":961},[951,5490,1796],{"class":1044},[951,5492,1145],{"class":961},[951,5494,1128],{"class":974},[951,5496,1840],{"class":978},[951,5498,1128],{"class":974},[951,5500,1355],{"class":961},[951,5502,1847],{"class":965},[951,5504,1813],{"class":961},[951,5506,5507],{"class":953,"line":1821},[951,5508,1026],{"emptyLinePlaceholder":8},[951,5510,5511],{"class":953,"line":1827},[951,5512,2728],{"class":1574},[1463,5514,2732],{"id":2731},[848,5516,5517,2737,5519,2741,5521,2745],{},[852,5518,1847],{},[852,5520,2740],{},[852,5522,2744],{},[848,5524,2748,5525,2751,5527,2754,5529,2757,5531,1108],{},[852,5526,1896],{},[852,5528,1890],{},[852,5530,1886],{},[1427,5532,206],{"href":207},[1463,5534,2763],{"id":2762},[848,5536,2766],{},[942,5538,5539],{"className":944,"code":2769,"language":946,"meta":947,"style":947},[852,5540,5541,5559,5597,5601,5619,5623,5645,5679,5683,5687,5709,5731,5735,5739,5761,5795,5799,5803],{"__ignoreMap":947},[951,5542,5543,5545,5547,5549,5551,5553,5555,5557],{"class":953,"line":954},[951,5544,958],{"class":957},[951,5546,962],{"class":961},[951,5548,2780],{"class":965},[951,5550,968],{"class":961},[951,5552,971],{"class":957},[951,5554,975],{"class":974},[951,5556,1463],{"class":978},[951,5558,981],{"class":974},[951,5560,5561,5563,5565,5567,5569,5571,5573,5575,5577,5579,5581,5583,5585,5587,5589,5591,5593,5595],{"class":953,"line":984},[951,5562,958],{"class":957},[951,5564,962],{"class":961},[951,5566,1934],{"class":965},[951,5568,1355],{"class":961},[951,5570,1939],{"class":965},[951,5572,1355],{"class":961},[951,5574,1944],{"class":965},[951,5576,1355],{"class":961},[951,5578,1949],{"class":965},[951,5580,1355],{"class":961},[951,5582,1954],{"class":965},[951,5584,1355],{"class":961},[951,5586,1959],{"class":965},[951,5588,968],{"class":961},[951,5590,971],{"class":957},[951,5592,975],{"class":974},[951,5594,909],{"class":978},[951,5596,981],{"class":974},[951,5598,5599],{"class":953,"line":1005},[951,5600,1026],{"emptyLinePlaceholder":8},[951,5602,5603,5605,5607,5609,5611,5613,5615,5617],{"class":953,"line":1023},[951,5604,1978],{"class":957},[951,5606,1981],{"class":1032},[951,5608,1984],{"class":1044},[951,5610,1145],{"class":961},[951,5612,1713],{"class":1989},[951,5614,1055],{"class":1040},[951,5616,2522],{"class":1994},[951,5618,1998],{"class":961},[951,5620,5621],{"class":953,"line":1029},[951,5622,1026],{"emptyLinePlaceholder":8},[951,5624,5625,5627,5629,5631,5633,5635,5637,5639,5641,5643],{"class":953,"line":1063},[951,5626,2117],{"class":965},[951,5628,1108],{"class":961},[951,5630,2122],{"class":1044},[951,5632,1145],{"class":961},[951,5634,1128],{"class":974},[951,5636,2129],{"class":978},[951,5638,1128],{"class":974},[951,5640,1355],{"class":961},[951,5642,1949],{"class":965},[951,5644,1131],{"class":961},[951,5646,5647,5649,5651,5653,5655,5657,5659,5661,5663,5665,5667,5669,5671,5673,5675,5677],{"class":953,"line":1068},[951,5648,2881],{"class":961},[951,5650,2884],{"class":965},[951,5652,1055],{"class":1054},[951,5654,2889],{"class":961},[951,5656,1934],{"class":965},[951,5658,1355],{"class":961},[951,5660,1939],{"class":1044},[951,5662,1145],{"class":961},[951,5664,1128],{"class":974},[951,5666,2062],{"class":978},[951,5668,1128],{"class":974},[951,5670,2906],{"class":961},[951,5672,1944],{"class":1044},[951,5674,1145],{"class":961},[951,5676,2083],{"class":1166},[951,5678,2915],{"class":961},[951,5680,5681],{"class":953,"line":1076},[951,5682,2920],{"class":961},[951,5684,5685],{"class":953,"line":1087},[951,5686,2925],{"class":961},[951,5688,5689,5691,5693,5695,5697,5699,5701,5703,5705,5707],{"class":953,"line":1097},[951,5690,2117],{"class":965},[951,5692,1108],{"class":961},[951,5694,2122],{"class":1044},[951,5696,1145],{"class":961},[951,5698,1128],{"class":974},[951,5700,2357],{"class":978},[951,5702,1128],{"class":974},[951,5704,1355],{"class":961},[951,5706,1959],{"class":965},[951,5708,2948],{"class":961},[951,5710,5711,5713,5715,5717,5719,5721,5723,5725,5727,5729],{"class":953,"line":1134},[951,5712,2953],{"class":961},[951,5714,2884],{"class":965},[951,5716,1055],{"class":1054},[951,5718,2889],{"class":961},[951,5720,1934],{"class":965},[951,5722,1355],{"class":961},[951,5724,1944],{"class":1044},[951,5726,1145],{"class":961},[951,5728,2315],{"class":1166},[951,5730,2972],{"class":961},[951,5732,5733],{"class":953,"line":1172},[951,5734,2920],{"class":961},[951,5736,5737],{"class":953,"line":1178},[951,5738,1026],{"emptyLinePlaceholder":8},[951,5740,5741,5743,5745,5747,5749,5751,5753,5755,5757,5759],{"class":953,"line":1188},[951,5742,2117],{"class":965},[951,5744,1108],{"class":961},[951,5746,2122],{"class":1044},[951,5748,1145],{"class":961},[951,5750,1128],{"class":974},[951,5752,2254],{"class":978},[951,5754,1128],{"class":974},[951,5756,1355],{"class":961},[951,5758,1954],{"class":965},[951,5760,1131],{"class":961},[951,5762,5763,5765,5767,5769,5771,5773,5775,5777,5779,5781,5783,5785,5787,5789,5791,5793],{"class":953,"line":1202},[951,5764,3007],{"class":961},[951,5766,2884],{"class":965},[951,5768,1055],{"class":1054},[951,5770,2889],{"class":961},[951,5772,1934],{"class":965},[951,5774,1355],{"class":961},[951,5776,1939],{"class":1044},[951,5778,1145],{"class":961},[951,5780,1128],{"class":974},[951,5782,2062],{"class":978},[951,5784,1128],{"class":974},[951,5786,2906],{"class":961},[951,5788,1944],{"class":1044},[951,5790,1145],{"class":961},[951,5792,2083],{"class":1166},[951,5794,2972],{"class":961},[951,5796,5797],{"class":953,"line":1226},[951,5798,2920],{"class":961},[951,5800,5801],{"class":953,"line":1249},[951,5802,1026],{"emptyLinePlaceholder":8},[951,5804,5805],{"class":953,"line":1254},[951,5806,2371],{"class":961},[857,5808],{},[860,5810,3055],{"id":3054},[865,5812,5813,5823],{},[868,5814,5815],{},[871,5816,5817,5819,5821],{},[874,5818,3064],{},[874,5820,3067],{},[874,5822,3070],{},[884,5824,5825,5837,5849,5861,5873,5885],{},[871,5826,5827,5829,5833],{},[889,5828,3077],{},[889,5830,5831],{},[852,5832,3082],{},[889,5834,5835],{},[852,5836,3087],{},[871,5838,5839,5841,5845],{},[889,5840,3092],{},[889,5842,5843,3098],{},[852,5844,3097],{},[889,5846,5847,3104],{},[852,5848,3103],{},[871,5850,5851,5853,5857],{},[889,5852,3109],{},[889,5854,5855,3115],{},[852,5856,3114],{},[889,5858,5859,3121],{},[852,5860,3120],{},[871,5862,5863,5865,5869],{},[889,5864,3126],{},[889,5866,5867],{},[852,5868,3131],{},[889,5870,5871],{},[852,5872,3136],{},[871,5874,5875,5877,5881],{},[889,5876,3141],{},[889,5878,5879],{},[852,5880,3146],{},[889,5882,5883],{},[852,5884,3151],{},[871,5886,5887,5889,5893],{},[889,5888,3156],{},[889,5890,5891],{},[852,5892,3161],{},[889,5894,5895],{},[852,5896,3166],{},[848,5898,3169,5899,1355,5901,3176],{},[852,5900,3172],{},[852,5902,3175],{},[857,5904],{},[860,5906,3182],{"id":3181},[848,5908,3185],{},[1463,5910,3067],{"id":3188},[942,5912,5913],{"className":944,"code":3191,"language":946,"meta":947,"style":947},[852,5914,5915,5933,5951,5955,5989,6015,6029],{"__ignoreMap":947},[951,5916,5917,5919,5921,5923,5925,5927,5929,5931],{"class":953,"line":954},[951,5918,958],{"class":957},[951,5920,962],{"class":961},[951,5922,1915],{"class":965},[951,5924,968],{"class":961},[951,5926,971],{"class":957},[951,5928,975],{"class":974},[951,5930,1463],{"class":978},[951,5932,981],{"class":974},[951,5934,5935,5937,5939,5941,5943,5945,5947,5949],{"class":953,"line":984},[951,5936,958],{"class":957},[951,5938,962],{"class":961},[951,5940,3172],{"class":965},[951,5942,968],{"class":961},[951,5944,971],{"class":957},[951,5946,975],{"class":974},[951,5948,896],{"class":978},[951,5950,981],{"class":974},[951,5952,5953],{"class":953,"line":1005},[951,5954,1026],{"emptyLinePlaceholder":8},[951,5956,5957,5959,5961,5963,5965,5967,5969,5971,5973,5975,5977,5979,5981,5983,5985,5987],{"class":953,"line":1023},[951,5958,1713],{"class":965},[951,5960,1108],{"class":961},[951,5962,1796],{"class":1044},[951,5964,1145],{"class":961},[951,5966,1128],{"class":974},[951,5968,3248],{"class":978},[951,5970,1128],{"class":974},[951,5972,1355],{"class":961},[951,5974,3172],{"class":1044},[951,5976,1145],{"class":961},[951,5978,2020],{"class":1032},[951,5980,2023],{"class":961},[951,5982,2026],{"class":1989},[951,5984,1160],{"class":961},[951,5986,2031],{"class":1032},[951,5988,1084],{"class":961},[951,5990,5991,5993,5995,5997,5999,6001,6003,6005,6007,6009,6011,6013],{"class":953,"line":1029},[951,5992,2007],{"class":1032},[951,5994,962],{"class":961},[951,5996,3277],{"class":1036},[951,5998,1355],{"class":961},[951,6000,3282],{"class":1036},[951,6002,968],{"class":961},[951,6004,3287],{"class":1040},[951,6006,3290],{"class":965},[951,6008,1108],{"class":961},[951,6010,3295],{"class":965},[951,6012,1108],{"class":961},[951,6014,3300],{"class":965},[951,6016,6017,6019,6021,6023,6025,6027],{"class":953,"line":1063},[951,6018,3305],{"class":957},[951,6020,962],{"class":961},[951,6022,3277],{"class":965},[951,6024,1355],{"class":961},[951,6026,3282],{"class":965},[951,6028,3316],{"class":961},[951,6030,6031],{"class":953,"line":1068},[951,6032,3321],{"class":961},[1463,6034,3070],{"id":3324},[942,6036,6037],{"className":944,"code":3327,"language":946,"meta":947,"style":947},[852,6038,6039,6057,6075,6079,6113,6139,6153],{"__ignoreMap":947},[951,6040,6041,6043,6045,6047,6049,6051,6053,6055],{"class":953,"line":954},[951,6042,958],{"class":957},[951,6044,962],{"class":961},[951,6046,2780],{"class":965},[951,6048,968],{"class":961},[951,6050,971],{"class":957},[951,6052,975],{"class":974},[951,6054,1463],{"class":978},[951,6056,981],{"class":974},[951,6058,6059,6061,6063,6065,6067,6069,6071,6073],{"class":953,"line":984},[951,6060,958],{"class":957},[951,6062,962],{"class":961},[951,6064,3172],{"class":965},[951,6066,968],{"class":961},[951,6068,971],{"class":957},[951,6070,975],{"class":974},[951,6072,909],{"class":978},[951,6074,981],{"class":974},[951,6076,6077],{"class":953,"line":1005},[951,6078,1026],{"emptyLinePlaceholder":8},[951,6080,6081,6083,6085,6087,6089,6091,6093,6095,6097,6099,6101,6103,6105,6107,6109,6111],{"class":953,"line":1023},[951,6082,1713],{"class":965},[951,6084,1108],{"class":961},[951,6086,1796],{"class":1044},[951,6088,1145],{"class":961},[951,6090,1128],{"class":974},[951,6092,3248],{"class":978},[951,6094,1128],{"class":974},[951,6096,1355],{"class":961},[951,6098,3172],{"class":1044},[951,6100,1145],{"class":961},[951,6102,2020],{"class":1032},[951,6104,2023],{"class":961},[951,6106,2026],{"class":1989},[951,6108,1160],{"class":961},[951,6110,2031],{"class":1032},[951,6112,1084],{"class":961},[951,6114,6115,6117,6119,6121,6123,6125,6127,6129,6131,6133,6135,6137],{"class":953,"line":1029},[951,6116,2007],{"class":1032},[951,6118,962],{"class":961},[951,6120,3277],{"class":1036},[951,6122,1355],{"class":961},[951,6124,3282],{"class":1036},[951,6126,968],{"class":961},[951,6128,3287],{"class":1040},[951,6130,3290],{"class":965},[951,6132,1108],{"class":961},[951,6134,3295],{"class":965},[951,6136,1108],{"class":961},[951,6138,3300],{"class":965},[951,6140,6141,6143,6145,6147,6149,6151],{"class":953,"line":1063},[951,6142,3305],{"class":957},[951,6144,962],{"class":961},[951,6146,3277],{"class":965},[951,6148,1355],{"class":961},[951,6150,3282],{"class":965},[951,6152,3316],{"class":961},[951,6154,6155],{"class":953,"line":1068},[951,6156,3321],{"class":961},[848,6158,3450,6159,893,6161,3455],{},[852,6160,1915],{},[852,6162,2780],{},[857,6164],{},[860,6166,3461],{"id":3460},[848,6168,3464],{},[942,6170,6171],{"className":944,"code":3467,"filename":3468,"language":946,"meta":947,"style":947},[852,6172,6173,6193,6233,6251,6255,6273,6279,6287,6295,6313,6321,6343,6353,6357,6361,6365,6369,6383,6401,6419,6437,6441,6455,6469,6483,6505],{"__ignoreMap":947},[951,6174,6175,6177,6179,6181,6183,6185,6187,6189,6191],{"class":953,"line":954},[951,6176,958],{"class":957},[951,6178,962],{"class":961},[951,6180,3479],{"class":965},[951,6182,968],{"class":961},[951,6184,971],{"class":957},[951,6186,3486],{"class":974},[951,6188,3489],{"class":978},[951,6190,3492],{"class":974},[951,6192,3495],{"class":961},[951,6194,6195,6197,6199,6201,6203,6205,6207,6209,6211,6213,6215,6217,6219,6221,6223,6225,6227,6229,6231],{"class":953,"line":984},[951,6196,958],{"class":957},[951,6198,962],{"class":961},[951,6200,933],{"class":965},[951,6202,1355],{"class":961},[951,6204,1611],{"class":965},[951,6206,1355],{"class":961},[951,6208,1708],{"class":965},[951,6210,1355],{"class":961},[951,6212,1725],{"class":965},[951,6214,1355],{"class":961},[951,6216,1757],{"class":965},[951,6218,1355],{"class":961},[951,6220,1741],{"class":965},[951,6222,968],{"class":961},[951,6224,971],{"class":957},[951,6226,975],{"class":974},[951,6228,854],{"class":978},[951,6230,1128],{"class":974},[951,6232,3495],{"class":961},[951,6234,6235,6237,6239,6241,6243,6245,6247,6249],{"class":953,"line":1005},[951,6236,958],{"class":957},[951,6238,962],{"class":961},[951,6240,3544],{"class":965},[951,6242,968],{"class":961},[951,6244,971],{"class":957},[951,6246,975],{"class":974},[951,6248,3553],{"class":978},[951,6250,981],{"class":974},[951,6252,6253],{"class":953,"line":1023},[951,6254,1026],{"emptyLinePlaceholder":8},[951,6256,6257,6259,6261,6263,6265,6267,6269,6271],{"class":953,"line":1029},[951,6258,1978],{"class":957},[951,6260,3566],{"class":957},[951,6262,3569],{"class":1044},[951,6264,3572],{"class":961},[951,6266,3489],{"class":1989},[951,6268,1160],{"class":961},[951,6270,2031],{"class":1032},[951,6272,1084],{"class":961},[951,6274,6275,6277],{"class":953,"line":1063},[951,6276,933],{"class":1044},[951,6278,1073],{"class":961},[951,6280,6281,6283,6285],{"class":953,"line":1068},[951,6282,3591],{"class":1040},[951,6284,3544],{"class":965},[951,6286,1131],{"class":961},[951,6288,6289,6291,6293],{"class":953,"line":1076},[951,6290,3600],{"class":965},[951,6292,1055],{"class":1054},[951,6294,1084],{"class":961},[951,6296,6297,6299,6301,6303,6305,6307,6309,6311],{"class":953,"line":1087},[951,6298,3609],{"class":965},[951,6300,1055],{"class":1054},[951,6302,3614],{"class":1044},[951,6304,1145],{"class":961},[951,6306,1128],{"class":974},[951,6308,3621],{"class":978},[951,6310,1128],{"class":974},[951,6312,3626],{"class":961},[951,6314,6315,6317,6319],{"class":953,"line":1097},[951,6316,3631],{"class":965},[951,6318,1055],{"class":1054},[951,6320,1084],{"class":961},[951,6322,6323,6325,6327,6329,6331,6333,6335,6337,6339,6341],{"class":953,"line":1134},[951,6324,3640],{"class":965},[951,6326,1055],{"class":1054},[951,6328,1337],{"class":1166},[951,6330,1340],{"class":1040},[951,6332,1337],{"class":1166},[951,6334,1340],{"class":1040},[951,6336,1347],{"class":1166},[951,6338,1340],{"class":1040},[951,6340,1352],{"class":1166},[951,6342,2948],{"class":961},[951,6344,6345,6347,6349,6351],{"class":953,"line":1172},[951,6346,3663],{"class":965},[951,6348,1055],{"class":1054},[951,6350,1363],{"class":1166},[951,6352,3670],{"class":961},[951,6354,6355],{"class":953,"line":1178},[951,6356,3675],{"class":961},[951,6358,6359],{"class":953,"line":1188},[951,6360,3680],{"class":961},[951,6362,6363],{"class":953,"line":1202},[951,6364,2235],{"class":961},[951,6366,6367],{"class":953,"line":1226},[951,6368,1026],{"emptyLinePlaceholder":8},[951,6370,6371,6373,6375,6377,6379,6381],{"class":953,"line":1249},[951,6372,1611],{"class":1044},[951,6374,1614],{"class":961},[951,6376,3489],{"class":965},[951,6378,1108],{"class":961},[951,6380,3701],{"class":965},[951,6382,2048],{"class":961},[951,6384,6385,6387,6389,6391,6393,6395,6397,6399],{"class":953,"line":1254},[951,6386,3489],{"class":965},[951,6388,1108],{"class":961},[951,6390,3701],{"class":965},[951,6392,1108],{"class":961},[951,6394,1632],{"class":1044},[951,6396,1145],{"class":961},[951,6398,1637],{"class":965},[951,6400,1813],{"class":961},[951,6402,6403,6405,6407,6409,6411,6413,6415,6417],{"class":953,"line":1275},[951,6404,3489],{"class":965},[951,6406,1108],{"class":961},[951,6408,3701],{"class":965},[951,6410,1108],{"class":961},[951,6412,1632],{"class":1044},[951,6414,1145],{"class":961},[951,6416,1656],{"class":965},[951,6418,1813],{"class":961},[951,6420,6421,6423,6425,6427,6429,6431,6433,6435],{"class":953,"line":1298},[951,6422,3489],{"class":965},[951,6424,1108],{"class":961},[951,6426,3701],{"class":965},[951,6428,1108],{"class":961},[951,6430,1632],{"class":1044},[951,6432,1145],{"class":961},[951,6434,1674],{"class":965},[951,6436,1813],{"class":961},[951,6438,6439],{"class":953,"line":1304},[951,6440,1026],{"emptyLinePlaceholder":8},[951,6442,6443,6445,6447,6449,6451,6453],{"class":953,"line":1314},[951,6444,1708],{"class":1044},[951,6446,1145],{"class":961},[951,6448,3489],{"class":965},[951,6450,1108],{"class":961},[951,6452,1713],{"class":965},[951,6454,2048],{"class":961},[951,6456,6457,6459,6461,6463,6465,6467],{"class":953,"line":1322},[951,6458,1725],{"class":1044},[951,6460,1145],{"class":961},[951,6462,3489],{"class":965},[951,6464,1108],{"class":961},[951,6466,1713],{"class":965},[951,6468,2048],{"class":961},[951,6470,6471,6473,6475,6477,6479,6481],{"class":953,"line":1368},[951,6472,1741],{"class":1044},[951,6474,1145],{"class":961},[951,6476,3489],{"class":965},[951,6478,1108],{"class":961},[951,6480,1713],{"class":965},[951,6482,2048],{"class":961},[951,6484,6485,6487,6489,6491,6493,6495,6497,6499,6501,6503],{"class":953,"line":1373},[951,6486,1757],{"class":1044},[951,6488,1145],{"class":961},[951,6490,3489],{"class":965},[951,6492,1108],{"class":961},[951,6494,1713],{"class":965},[951,6496,1355],{"class":961},[951,6498,1128],{"class":974},[951,6500,1768],{"class":978},[951,6502,1128],{"class":974},[951,6504,2048],{"class":961},[951,6506,6507],{"class":953,"line":1390},[951,6508,1422],{"class":961},[3831,6510,6511],{},[848,6512,3835,6513],{},[852,6514,909],{},[857,6516],{},[3841,6518,6519],{},[848,6520,3845,6521,3848],{},[852,6522,933],{},[860,6524,3852],{"id":3851},[848,6526,3855],{},[3857,6528,6529,6533,6543,6547,6551],{},[3860,6530,3862,6531,3866],{},[852,6532,3865],{},[3860,6534,3869,6535,1355,6537,1355,6539,1355,6541,3878],{},[852,6536,152],{},[852,6538,160],{},[852,6540,164],{},[852,6542,156],{},[3860,6544,3881,6545],{},[852,6546,3884],{},[3860,6548,3887,6549],{},[852,6550,3890],{},[3860,6552,3893,6553,3897],{},[852,6554,3896],{},[848,6556,1425,6557,3902],{},[1427,6558,79],{"href":80},[3904,6560,3906],{},{"title":947,"searchDepth":984,"depth":984,"links":6562},[6563,6564,6565,6568,6572,6573,6577,6578],{"id":862,"depth":984,"text":863},{"id":933,"depth":984,"text":192},{"id":1434,"depth":984,"text":1435,"children":6566},[6567],{"id":1900,"depth":1005,"text":1901},{"id":2376,"depth":984,"text":2377,"children":6569},[6570,6571],{"id":2731,"depth":1005,"text":2732},{"id":2762,"depth":1005,"text":2763},{"id":3054,"depth":984,"text":3055},{"id":3181,"depth":984,"text":3182,"children":6574},[6575,6576],{"id":3188,"depth":1005,"text":3067},{"id":3324,"depth":1005,"text":3070},{"id":3460,"depth":984,"text":3461},{"id":3851,"depth":984,"text":3852},{},{"title":176,"description":3925},1780436278694]