[{"data":1,"prerenderedAt":4745},["ShallowReactive",2],{"navLinks":3,"sidebar_docs_navigation_\u002Fdocs\u002Fauth-h3client":64,"navigation":217,"navLinks_footer":829,"\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fcustom-flow_page":842,"\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fcustom-flow_surround":2962,"\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fcustom-flow":2965},{"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":138,"body":844,"description":2954,"extension":2955,"icon":2956,"meta":2957,"module":2958,"navigation":8,"path":139,"rawbody":2959,"seo":2960,"stem":140,"__hash__":2961},"docs\u002Fdocs\u002Fauth-h3client\u002F02.mfa\u002F04.custom-flow.md",{"type":845,"value":846,"toc":2940},"minimark",[847,856,859,864,867,902,905,907,911,932,1756,1772,1780,1783,1812,1825,1829,1832,1868,1874,1991,1993,1997,2003,2279,2282,2330,2340,2342,2346,2352,2693,2695,2749,2753,2756,2822,2824,2828,2831,2849,2852,2854,2858,2870,2911,2923,2930,2936],[848,849,850,851,855],"p",{},"Custom MFA flows let you require email-based verification for any sensitive action in your application. Unlike the ",[852,853,854],"a",{"href":127},"built-in MFA flow"," that is triggered automatically by anomaly detection, custom flows are initiated by your server code when the user attempts an action you want to protect.",[857,858],"hr",{},[860,861,863],"h2",{"id":862},"overview","Overview",[848,865,866],{},"A custom MFA flow has three parts:",[868,869,870,883,893],"ol",{},[871,872,873,877,878,882],"li",{},[874,875,876],"strong",{},"Initiation endpoint",": your authenticated handler generates a cryptographic buffer, calls ",[879,880,881],"code",{},"askForMfaFlow",", and tells the client to check their email.",[871,884,885,888,889,892],{},[874,886,887],{},"Verification endpoint (GET)",": wraps your handler with ",[879,890,891],{},"defineVerifiedMagicLinkGetHandler"," to verify the magic link when the user clicks it.",[871,894,895,888,898,901],{},[874,896,897],{},"Verification endpoint (POST)",[879,899,900],{},"defineMfaCodeVerifierHandler"," to verify the 7-digit code and rotate tokens before executing your action.",[848,903,904],{},"You can implement either or both verification methods depending on your needs.",[857,906],{},[860,908,910],{"id":909},"initiating-the-flow","Initiating the flow",[848,912,913,914,916,917,920,921,920,924,927,928,931],{},"Create an authenticated endpoint that calls ",[879,915,881],{},". This function requires the current session cookies (",[879,918,919],{},"canary_id",", ",[879,922,923],{},"session",[879,925,926],{},"__Secure-a","), a reason string, and a ",[879,929,930],{},"Buffer"," of cryptographic random data.",[933,934,935,1279,1534],"code-group",{},[936,937,943],"pre",{"className":938,"code":939,"filename":940,"language":941,"meta":942,"style":942},"language-ts shiki shiki-themes light-plus light-plus dracula","import { randomBytes } from 'node:crypto'\nimport { defineAuthenticatedEventHandler, askForMfaFlow, getLogger } from 'auth-h3client\u002Fv1'\n\nexport default defineAuthenticatedEventHandler(async (event) => {\n  const log = getLogger().child({ service: 'api', action: 'delete-account' })\n  const random = randomBytes(128)\n\n  const result = await askForMfaFlow(event, log, 'delete_account', random)\n\n  if (!result.ok) {\n    throw createError({ statusCode: 400, message: result.reason })\n  }\n\n  return { message: result.data }\n})\n","H3 v1","ts","",[879,944,945,979,1009,1015,1051,1109,1131,1136,1177,1182,1205,1240,1246,1251,1273],{"__ignoreMap":942},[946,947,950,954,958,962,965,968,972,976],"span",{"class":948,"line":949},"line",1,[946,951,953],{"class":952},"sZ328","import",[946,955,957],{"class":956},"sDd4n"," { ",[946,959,961],{"class":960},"sjsA6","randomBytes",[946,963,964],{"class":956}," } ",[946,966,967],{"class":952},"from",[946,969,971],{"class":970},"sFkSl"," '",[946,973,975],{"class":974},"sFB1V","node:crypto",[946,977,978],{"class":970},"'\n",[946,980,982,984,986,989,991,993,995,998,1000,1002,1004,1007],{"class":948,"line":981},2,[946,983,953],{"class":952},[946,985,957],{"class":956},[946,987,988],{"class":960},"defineAuthenticatedEventHandler",[946,990,920],{"class":956},[946,992,881],{"class":960},[946,994,920],{"class":956},[946,996,997],{"class":960},"getLogger",[946,999,964],{"class":956},[946,1001,967],{"class":952},[946,1003,971],{"class":970},[946,1005,1006],{"class":974},"auth-h3client\u002Fv1",[946,1008,978],{"class":970},[946,1010,1012],{"class":948,"line":1011},3,[946,1013,1014],{"emptyLinePlaceholder":8},"\n",[946,1016,1018,1021,1024,1028,1031,1035,1038,1042,1045,1048],{"class":948,"line":1017},4,[946,1019,1020],{"class":952},"export",[946,1022,1023],{"class":952}," default",[946,1025,1027],{"class":1026},"sHOzp"," defineAuthenticatedEventHandler",[946,1029,1030],{"class":956},"(",[946,1032,1034],{"class":1033},"sl46w","async",[946,1036,1037],{"class":956}," (",[946,1039,1041],{"class":1040},"sygFZ","event",[946,1043,1044],{"class":956},") ",[946,1046,1047],{"class":1033},"=>",[946,1049,1050],{"class":956}," {\n",[946,1052,1054,1057,1061,1065,1068,1071,1074,1077,1080,1084,1086,1089,1092,1094,1097,1099,1101,1104,1106],{"class":948,"line":1053},5,[946,1055,1056],{"class":1033},"  const",[946,1058,1060],{"class":1059},"s3JHE"," log",[946,1062,1064],{"class":1063},"saOXh"," =",[946,1066,1067],{"class":1026}," getLogger",[946,1069,1070],{"class":956},"().",[946,1072,1073],{"class":1026},"child",[946,1075,1076],{"class":956},"({ ",[946,1078,1079],{"class":960},"service",[946,1081,1083],{"class":1082},"s34zl",":",[946,1085,971],{"class":970},[946,1087,1088],{"class":974},"api",[946,1090,1091],{"class":970},"'",[946,1093,920],{"class":956},[946,1095,1096],{"class":960},"action",[946,1098,1083],{"class":1082},[946,1100,971],{"class":970},[946,1102,1103],{"class":974},"delete-account",[946,1105,1091],{"class":970},[946,1107,1108],{"class":956}," })\n",[946,1110,1112,1114,1117,1119,1122,1124,1128],{"class":948,"line":1111},6,[946,1113,1056],{"class":1033},[946,1115,1116],{"class":1059}," random",[946,1118,1064],{"class":1063},[946,1120,1121],{"class":1026}," randomBytes",[946,1123,1030],{"class":956},[946,1125,1127],{"class":1126},"spgvN","128",[946,1129,1130],{"class":956},")\n",[946,1132,1134],{"class":948,"line":1133},7,[946,1135,1014],{"emptyLinePlaceholder":8},[946,1137,1139,1141,1144,1146,1149,1152,1154,1156,1158,1161,1163,1165,1168,1170,1172,1175],{"class":948,"line":1138},8,[946,1140,1056],{"class":1033},[946,1142,1143],{"class":1059}," result",[946,1145,1064],{"class":1063},[946,1147,1148],{"class":952}," await",[946,1150,1151],{"class":1026}," askForMfaFlow",[946,1153,1030],{"class":956},[946,1155,1041],{"class":960},[946,1157,920],{"class":956},[946,1159,1160],{"class":960},"log",[946,1162,920],{"class":956},[946,1164,1091],{"class":970},[946,1166,1167],{"class":974},"delete_account",[946,1169,1091],{"class":970},[946,1171,920],{"class":956},[946,1173,1174],{"class":960},"random",[946,1176,1130],{"class":956},[946,1178,1180],{"class":948,"line":1179},9,[946,1181,1014],{"emptyLinePlaceholder":8},[946,1183,1185,1188,1190,1193,1196,1199,1202],{"class":948,"line":1184},10,[946,1186,1187],{"class":952},"  if",[946,1189,1037],{"class":956},[946,1191,1192],{"class":1063},"!",[946,1194,1195],{"class":960},"result",[946,1197,1198],{"class":956},".",[946,1200,1201],{"class":960},"ok",[946,1203,1204],{"class":956},") {\n",[946,1206,1208,1211,1214,1216,1219,1221,1224,1226,1229,1231,1233,1235,1238],{"class":948,"line":1207},11,[946,1209,1210],{"class":952},"    throw",[946,1212,1213],{"class":1026}," createError",[946,1215,1076],{"class":956},[946,1217,1218],{"class":960},"statusCode",[946,1220,1083],{"class":1082},[946,1222,1223],{"class":1126}," 400",[946,1225,920],{"class":956},[946,1227,1228],{"class":960},"message",[946,1230,1083],{"class":1082},[946,1232,1143],{"class":960},[946,1234,1198],{"class":956},[946,1236,1237],{"class":960},"reason",[946,1239,1108],{"class":956},[946,1241,1243],{"class":948,"line":1242},12,[946,1244,1245],{"class":956},"  }\n",[946,1247,1249],{"class":948,"line":1248},13,[946,1250,1014],{"emptyLinePlaceholder":8},[946,1252,1254,1257,1259,1261,1263,1265,1267,1270],{"class":948,"line":1253},14,[946,1255,1256],{"class":952},"  return",[946,1258,957],{"class":956},[946,1260,1228],{"class":960},[946,1262,1083],{"class":1082},[946,1264,1143],{"class":960},[946,1266,1198],{"class":956},[946,1268,1269],{"class":960},"data",[946,1271,1272],{"class":956}," }\n",[946,1274,1276],{"class":948,"line":1275},15,[946,1277,1278],{"class":956},"})\n",[936,1280,1283],{"className":938,"code":1281,"filename":1282,"language":941,"meta":942,"style":942},"import { randomBytes } from 'node:crypto'\nimport { defineAuthenticatedEventHandler, askForMfaFlow, getLogger } from 'auth-h3client\u002Fv2'\n\nexport default defineAuthenticatedEventHandler(async (event) => {\n  const log = getLogger().child({ service: 'api', action: 'delete-account' })\n  const random = randomBytes(128)\n\n  const result = await askForMfaFlow(event, log, 'delete_account', random)\n\n  if (!result.ok) {\n    throw new HTTPError({ status: 400, message: result.reason })\n  }\n\n  return { message: result.data }\n})\n","H3 v2",[879,1284,1285,1303,1330,1334,1356,1396,1412,1416,1450,1454,1470,1504,1508,1512,1530],{"__ignoreMap":942},[946,1286,1287,1289,1291,1293,1295,1297,1299,1301],{"class":948,"line":949},[946,1288,953],{"class":952},[946,1290,957],{"class":956},[946,1292,961],{"class":960},[946,1294,964],{"class":956},[946,1296,967],{"class":952},[946,1298,971],{"class":970},[946,1300,975],{"class":974},[946,1302,978],{"class":970},[946,1304,1305,1307,1309,1311,1313,1315,1317,1319,1321,1323,1325,1328],{"class":948,"line":981},[946,1306,953],{"class":952},[946,1308,957],{"class":956},[946,1310,988],{"class":960},[946,1312,920],{"class":956},[946,1314,881],{"class":960},[946,1316,920],{"class":956},[946,1318,997],{"class":960},[946,1320,964],{"class":956},[946,1322,967],{"class":952},[946,1324,971],{"class":970},[946,1326,1327],{"class":974},"auth-h3client\u002Fv2",[946,1329,978],{"class":970},[946,1331,1332],{"class":948,"line":1011},[946,1333,1014],{"emptyLinePlaceholder":8},[946,1335,1336,1338,1340,1342,1344,1346,1348,1350,1352,1354],{"class":948,"line":1017},[946,1337,1020],{"class":952},[946,1339,1023],{"class":952},[946,1341,1027],{"class":1026},[946,1343,1030],{"class":956},[946,1345,1034],{"class":1033},[946,1347,1037],{"class":956},[946,1349,1041],{"class":1040},[946,1351,1044],{"class":956},[946,1353,1047],{"class":1033},[946,1355,1050],{"class":956},[946,1357,1358,1360,1362,1364,1366,1368,1370,1372,1374,1376,1378,1380,1382,1384,1386,1388,1390,1392,1394],{"class":948,"line":1053},[946,1359,1056],{"class":1033},[946,1361,1060],{"class":1059},[946,1363,1064],{"class":1063},[946,1365,1067],{"class":1026},[946,1367,1070],{"class":956},[946,1369,1073],{"class":1026},[946,1371,1076],{"class":956},[946,1373,1079],{"class":960},[946,1375,1083],{"class":1082},[946,1377,971],{"class":970},[946,1379,1088],{"class":974},[946,1381,1091],{"class":970},[946,1383,920],{"class":956},[946,1385,1096],{"class":960},[946,1387,1083],{"class":1082},[946,1389,971],{"class":970},[946,1391,1103],{"class":974},[946,1393,1091],{"class":970},[946,1395,1108],{"class":956},[946,1397,1398,1400,1402,1404,1406,1408,1410],{"class":948,"line":1111},[946,1399,1056],{"class":1033},[946,1401,1116],{"class":1059},[946,1403,1064],{"class":1063},[946,1405,1121],{"class":1026},[946,1407,1030],{"class":956},[946,1409,1127],{"class":1126},[946,1411,1130],{"class":956},[946,1413,1414],{"class":948,"line":1133},[946,1415,1014],{"emptyLinePlaceholder":8},[946,1417,1418,1420,1422,1424,1426,1428,1430,1432,1434,1436,1438,1440,1442,1444,1446,1448],{"class":948,"line":1138},[946,1419,1056],{"class":1033},[946,1421,1143],{"class":1059},[946,1423,1064],{"class":1063},[946,1425,1148],{"class":952},[946,1427,1151],{"class":1026},[946,1429,1030],{"class":956},[946,1431,1041],{"class":960},[946,1433,920],{"class":956},[946,1435,1160],{"class":960},[946,1437,920],{"class":956},[946,1439,1091],{"class":970},[946,1441,1167],{"class":974},[946,1443,1091],{"class":970},[946,1445,920],{"class":956},[946,1447,1174],{"class":960},[946,1449,1130],{"class":956},[946,1451,1452],{"class":948,"line":1179},[946,1453,1014],{"emptyLinePlaceholder":8},[946,1455,1456,1458,1460,1462,1464,1466,1468],{"class":948,"line":1184},[946,1457,1187],{"class":952},[946,1459,1037],{"class":956},[946,1461,1192],{"class":1063},[946,1463,1195],{"class":960},[946,1465,1198],{"class":956},[946,1467,1201],{"class":960},[946,1469,1204],{"class":956},[946,1471,1472,1474,1478,1481,1483,1486,1488,1490,1492,1494,1496,1498,1500,1502],{"class":948,"line":1207},[946,1473,1210],{"class":952},[946,1475,1477],{"class":1476},"sakC6"," new",[946,1479,1480],{"class":1026}," HTTPError",[946,1482,1076],{"class":956},[946,1484,1485],{"class":960},"status",[946,1487,1083],{"class":1082},[946,1489,1223],{"class":1126},[946,1491,920],{"class":956},[946,1493,1228],{"class":960},[946,1495,1083],{"class":1082},[946,1497,1143],{"class":960},[946,1499,1198],{"class":956},[946,1501,1237],{"class":960},[946,1503,1108],{"class":956},[946,1505,1506],{"class":948,"line":1242},[946,1507,1245],{"class":956},[946,1509,1510],{"class":948,"line":1248},[946,1511,1014],{"emptyLinePlaceholder":8},[946,1513,1514,1516,1518,1520,1522,1524,1526,1528],{"class":948,"line":1253},[946,1515,1256],{"class":952},[946,1517,957],{"class":956},[946,1519,1228],{"class":960},[946,1521,1083],{"class":1082},[946,1523,1143],{"class":960},[946,1525,1198],{"class":956},[946,1527,1269],{"class":960},[946,1529,1272],{"class":956},[946,1531,1532],{"class":948,"line":1275},[946,1533,1278],{"class":956},[936,1535,1538],{"className":938,"code":1536,"filename":1537,"language":941,"meta":942,"style":942},"import { randomBytes } from 'node:crypto'\n\nexport default defineAuthenticatedEventHandler(async (event) => {\n  const log = getLogger().child({ service: 'api', action: 'delete-account' })\n  const random = randomBytes(128)\n\n  const result = await askForMfaFlow(event, log, 'delete_account', random)\n\n  if (!result.ok) {\n    throw createError({ statusCode: 400, message: result.reason })\n  }\n\n  return { message: result.data }\n})\n","Nuxt server\u002Fapi\u002Faccount\u002Fdelete.post.ts",[879,1539,1540,1558,1562,1584,1624,1640,1644,1678,1682,1698,1726,1730,1734,1752],{"__ignoreMap":942},[946,1541,1542,1544,1546,1548,1550,1552,1554,1556],{"class":948,"line":949},[946,1543,953],{"class":952},[946,1545,957],{"class":956},[946,1547,961],{"class":960},[946,1549,964],{"class":956},[946,1551,967],{"class":952},[946,1553,971],{"class":970},[946,1555,975],{"class":974},[946,1557,978],{"class":970},[946,1559,1560],{"class":948,"line":981},[946,1561,1014],{"emptyLinePlaceholder":8},[946,1563,1564,1566,1568,1570,1572,1574,1576,1578,1580,1582],{"class":948,"line":1011},[946,1565,1020],{"class":952},[946,1567,1023],{"class":952},[946,1569,1027],{"class":1026},[946,1571,1030],{"class":956},[946,1573,1034],{"class":1033},[946,1575,1037],{"class":956},[946,1577,1041],{"class":1040},[946,1579,1044],{"class":956},[946,1581,1047],{"class":1033},[946,1583,1050],{"class":956},[946,1585,1586,1588,1590,1592,1594,1596,1598,1600,1602,1604,1606,1608,1610,1612,1614,1616,1618,1620,1622],{"class":948,"line":1017},[946,1587,1056],{"class":1033},[946,1589,1060],{"class":1059},[946,1591,1064],{"class":1063},[946,1593,1067],{"class":1026},[946,1595,1070],{"class":956},[946,1597,1073],{"class":1026},[946,1599,1076],{"class":956},[946,1601,1079],{"class":960},[946,1603,1083],{"class":1082},[946,1605,971],{"class":970},[946,1607,1088],{"class":974},[946,1609,1091],{"class":970},[946,1611,920],{"class":956},[946,1613,1096],{"class":960},[946,1615,1083],{"class":1082},[946,1617,971],{"class":970},[946,1619,1103],{"class":974},[946,1621,1091],{"class":970},[946,1623,1108],{"class":956},[946,1625,1626,1628,1630,1632,1634,1636,1638],{"class":948,"line":1053},[946,1627,1056],{"class":1033},[946,1629,1116],{"class":1059},[946,1631,1064],{"class":1063},[946,1633,1121],{"class":1026},[946,1635,1030],{"class":956},[946,1637,1127],{"class":1126},[946,1639,1130],{"class":956},[946,1641,1642],{"class":948,"line":1111},[946,1643,1014],{"emptyLinePlaceholder":8},[946,1645,1646,1648,1650,1652,1654,1656,1658,1660,1662,1664,1666,1668,1670,1672,1674,1676],{"class":948,"line":1133},[946,1647,1056],{"class":1033},[946,1649,1143],{"class":1059},[946,1651,1064],{"class":1063},[946,1653,1148],{"class":952},[946,1655,1151],{"class":1026},[946,1657,1030],{"class":956},[946,1659,1041],{"class":960},[946,1661,920],{"class":956},[946,1663,1160],{"class":960},[946,1665,920],{"class":956},[946,1667,1091],{"class":970},[946,1669,1167],{"class":974},[946,1671,1091],{"class":970},[946,1673,920],{"class":956},[946,1675,1174],{"class":960},[946,1677,1130],{"class":956},[946,1679,1680],{"class":948,"line":1138},[946,1681,1014],{"emptyLinePlaceholder":8},[946,1683,1684,1686,1688,1690,1692,1694,1696],{"class":948,"line":1179},[946,1685,1187],{"class":952},[946,1687,1037],{"class":956},[946,1689,1192],{"class":1063},[946,1691,1195],{"class":960},[946,1693,1198],{"class":956},[946,1695,1201],{"class":960},[946,1697,1204],{"class":956},[946,1699,1700,1702,1704,1706,1708,1710,1712,1714,1716,1718,1720,1722,1724],{"class":948,"line":1184},[946,1701,1210],{"class":952},[946,1703,1213],{"class":1026},[946,1705,1076],{"class":956},[946,1707,1218],{"class":960},[946,1709,1083],{"class":1082},[946,1711,1223],{"class":1126},[946,1713,920],{"class":956},[946,1715,1228],{"class":960},[946,1717,1083],{"class":1082},[946,1719,1143],{"class":960},[946,1721,1198],{"class":956},[946,1723,1237],{"class":960},[946,1725,1108],{"class":956},[946,1727,1728],{"class":948,"line":1207},[946,1729,1245],{"class":956},[946,1731,1732],{"class":948,"line":1242},[946,1733,1014],{"emptyLinePlaceholder":8},[946,1735,1736,1738,1740,1742,1744,1746,1748,1750],{"class":948,"line":1248},[946,1737,1256],{"class":952},[946,1739,957],{"class":956},[946,1741,1228],{"class":960},[946,1743,1083],{"class":1082},[946,1745,1143],{"class":960},[946,1747,1198],{"class":956},[946,1749,1269],{"class":960},[946,1751,1272],{"class":956},[946,1753,1754],{"class":948,"line":1253},[946,1755,1278],{"class":956},[1757,1758,1759],"warning",{},[848,1760,1761,1762,1764,1765,1767,1768,1771],{},"The ",[879,1763,1174],{}," parameter must be a ",[879,1766,930],{},". The function converts it to hex internally and validates that the hex string is between 254 and 500 characters long. A ",[879,1769,1770],{},"randomBytes(128)"," call produces a 256-character hex string, which fits within this range.",[1773,1774,1776,1777,1779],"h3",{"id":1775},"how-askformfaflow-works","How ",[879,1778,881],{}," works",[848,1781,1782],{},"The function:",[868,1784,1785,1796,1802,1809],{},[871,1786,1787,1788,920,1790,1792,1793,1795],{},"Reads ",[879,1789,919],{},[879,1791,923],{},", and ",[879,1794,926],{}," cookies from the request.",[871,1797,1798,1799,1801],{},"Validates the ",[879,1800,930],{}," length and reason string length (max 100 characters).",[871,1803,1804,1805,1808],{},"Sends ",[879,1806,1807],{},"POST \u002Fcustom\u002Fmfa\u002F{reason}?random={hex}"," to the IAM service with the session cookies and access token.",[871,1810,1811],{},"The IAM service generates a magic link and 7-digit code, sends both to the user's email, and returns success.",[848,1813,1814,1815,1818,1819,1821,1822,1824],{},"The request is deduplicated with ",[879,1816,1817],{},"lockAsyncAction"," keyed on ",[879,1820,919],{}," and ",[879,1823,1237],{}," to prevent concurrent calls for the same session.",[1773,1826,1828],{"id":1827},"response","Response",[848,1830,1831],{},"On success:",[936,1833,1835],{"className":938,"code":1834,"language":941,"meta":942,"style":942},"{ ok: true, date: '...', data: 'Please check your email to complete the action.' }\n",[879,1836,1837],{"__ignoreMap":942},[946,1838,1839,1842,1846,1849,1851,1854,1856,1859,1861,1864,1866],{"class":948,"line":949},[946,1840,1841],{"class":956},"{ ok: ",[946,1843,1845],{"class":1844},"sjR7W","true",[946,1847,1848],{"class":956},", date: ",[946,1850,1091],{"class":970},[946,1852,1853],{"class":974},"...",[946,1855,1091],{"class":970},[946,1857,1858],{"class":956},", data: ",[946,1860,1091],{"class":970},[946,1862,1863],{"class":974},"Please check your email to complete the action.",[946,1865,1091],{"class":970},[946,1867,1272],{"class":956},[848,1869,1870,1871,1873],{},"On failure, the ",[879,1872,879],{}," field identifies the error:",[1875,1876,1877,1890],"table",{},[1878,1879,1880],"thead",{},[1881,1882,1883,1887],"tr",{},[1884,1885,1886],"th",{},"Code",[1884,1888,1889],{},"Meaning",[1891,1892,1893,1904,1917,1927,1937,1947,1961,1971,1981],"tbody",{},[1881,1894,1895,1901],{},[1896,1897,1898],"td",{},[879,1899,1900],{},"INVALID_CREDENTIALS",[1896,1902,1903],{},"Missing session cookies or IAM rejected the request",[1881,1905,1906,1911],{},[1896,1907,1908],{},[879,1909,1910],{},"HASH",[1896,1912,1913,1914,1916],{},"Buffer is not a ",[879,1915,930],{}," type, or hex length is not between 254 and 500 characters",[1881,1918,1919,1924],{},[1896,1920,1921],{},[879,1922,1923],{},"REASON",[1896,1925,1926],{},"Reason string exceeds 100 characters",[1881,1928,1929,1934],{},[1896,1930,1931],{},[879,1932,1933],{},"MFA_REQUIRED",[1896,1935,1936],{},"The current session has an anomaly: the user must complete the standard MFA flow first",[1881,1938,1939,1944],{},[1896,1940,1941],{},[879,1942,1943],{},"FORBIDDEN",[1896,1945,1946],{},"User is banned or blacklisted",[1881,1948,1949,1954],{},[1896,1950,1951],{},[879,1952,1953],{},"RATE_LIMIT",[1896,1955,1956,1957,1960],{},"Too many requests. ",[879,1958,1959],{},"retryAfter"," contains the seconds to wait",[1881,1962,1963,1968],{},[1896,1964,1965],{},[879,1966,1967],{},"AUTH_SERVER_ERROR",[1896,1969,1970],{},"IAM service returned 500 or an unexpected response",[1881,1972,1973,1978],{},[1896,1974,1975],{},[879,1976,1977],{},"AUTH_REJECTED",[1896,1979,1980],{},"IAM service returned success but the result indicates rejection",[1881,1982,1983,1988],{},[1896,1984,1985],{},[879,1986,1987],{},"UNEXPECTED_ERROR",[1896,1989,1990],{},"Unhandled exception",[857,1992],{},[860,1994,1996],{"id":1995},"magic-link-verification","Magic link verification",[848,1998,1999,2000,2002],{},"Wrap a GET handler with ",[879,2001,891],{}," to verify the magic link when the user clicks it from their email.",[933,2004,2005,2110,2207],{},[936,2006,2008],{"className":938,"code":2007,"filename":940,"language":941,"meta":942,"style":942},"import { defineVerifiedMagicLinkGetHandler } from 'auth-h3client\u002Fv1'\n\nexport const deleteVerifyGet = defineVerifiedMagicLinkGetHandler(async (event) => {\n  const { link, reason } = event.context\n  return { ok: true, reason }\n})\n",[879,2009,2010,2028,2032,2061,2087,2106],{"__ignoreMap":942},[946,2011,2012,2014,2016,2018,2020,2022,2024,2026],{"class":948,"line":949},[946,2013,953],{"class":952},[946,2015,957],{"class":956},[946,2017,891],{"class":960},[946,2019,964],{"class":956},[946,2021,967],{"class":952},[946,2023,971],{"class":970},[946,2025,1006],{"class":974},[946,2027,978],{"class":970},[946,2029,2030],{"class":948,"line":981},[946,2031,1014],{"emptyLinePlaceholder":8},[946,2033,2034,2036,2039,2042,2044,2047,2049,2051,2053,2055,2057,2059],{"class":948,"line":1011},[946,2035,1020],{"class":952},[946,2037,2038],{"class":1033}," const",[946,2040,2041],{"class":1059}," deleteVerifyGet",[946,2043,1064],{"class":1063},[946,2045,2046],{"class":1026}," defineVerifiedMagicLinkGetHandler",[946,2048,1030],{"class":956},[946,2050,1034],{"class":1033},[946,2052,1037],{"class":956},[946,2054,1041],{"class":1040},[946,2056,1044],{"class":956},[946,2058,1047],{"class":1033},[946,2060,1050],{"class":956},[946,2062,2063,2065,2067,2070,2072,2074,2076,2079,2082,2084],{"class":948,"line":1017},[946,2064,1056],{"class":1033},[946,2066,957],{"class":956},[946,2068,2069],{"class":1059},"link",[946,2071,920],{"class":956},[946,2073,1237],{"class":1059},[946,2075,964],{"class":956},[946,2077,2078],{"class":1063},"=",[946,2080,2081],{"class":960}," event",[946,2083,1198],{"class":956},[946,2085,2086],{"class":960},"context\n",[946,2088,2089,2091,2093,2095,2097,2100,2102,2104],{"class":948,"line":1053},[946,2090,1256],{"class":952},[946,2092,957],{"class":956},[946,2094,1201],{"class":960},[946,2096,1083],{"class":1082},[946,2098,2099],{"class":1844}," true",[946,2101,920],{"class":956},[946,2103,1237],{"class":960},[946,2105,1272],{"class":956},[946,2107,2108],{"class":948,"line":1111},[946,2109,1278],{"class":956},[936,2111,2113],{"className":938,"code":2112,"filename":1282,"language":941,"meta":942,"style":942},"import { defineVerifiedMagicLinkGetHandler } from 'auth-h3client\u002Fv2'\n\nexport const deleteVerifyGet = defineVerifiedMagicLinkGetHandler(async (event) => {\n  const { link, reason } = event.context\n  return { ok: true, reason }\n})\n",[879,2114,2115,2133,2137,2163,2185,2203],{"__ignoreMap":942},[946,2116,2117,2119,2121,2123,2125,2127,2129,2131],{"class":948,"line":949},[946,2118,953],{"class":952},[946,2120,957],{"class":956},[946,2122,891],{"class":960},[946,2124,964],{"class":956},[946,2126,967],{"class":952},[946,2128,971],{"class":970},[946,2130,1327],{"class":974},[946,2132,978],{"class":970},[946,2134,2135],{"class":948,"line":981},[946,2136,1014],{"emptyLinePlaceholder":8},[946,2138,2139,2141,2143,2145,2147,2149,2151,2153,2155,2157,2159,2161],{"class":948,"line":1011},[946,2140,1020],{"class":952},[946,2142,2038],{"class":1033},[946,2144,2041],{"class":1059},[946,2146,1064],{"class":1063},[946,2148,2046],{"class":1026},[946,2150,1030],{"class":956},[946,2152,1034],{"class":1033},[946,2154,1037],{"class":956},[946,2156,1041],{"class":1040},[946,2158,1044],{"class":956},[946,2160,1047],{"class":1033},[946,2162,1050],{"class":956},[946,2164,2165,2167,2169,2171,2173,2175,2177,2179,2181,2183],{"class":948,"line":1017},[946,2166,1056],{"class":1033},[946,2168,957],{"class":956},[946,2170,2069],{"class":1059},[946,2172,920],{"class":956},[946,2174,1237],{"class":1059},[946,2176,964],{"class":956},[946,2178,2078],{"class":1063},[946,2180,2081],{"class":960},[946,2182,1198],{"class":956},[946,2184,2086],{"class":960},[946,2186,2187,2189,2191,2193,2195,2197,2199,2201],{"class":948,"line":1053},[946,2188,1256],{"class":952},[946,2190,957],{"class":956},[946,2192,1201],{"class":960},[946,2194,1083],{"class":1082},[946,2196,2099],{"class":1844},[946,2198,920],{"class":956},[946,2200,1237],{"class":960},[946,2202,1272],{"class":956},[946,2204,2205],{"class":948,"line":1111},[946,2206,1278],{"class":956},[936,2208,2211],{"className":938,"code":2209,"filename":2210,"language":941,"meta":942,"style":942},"export default defineVerifiedMagicLinkGetHandler(async (event) => {\n  const { link, reason } = event.context\n  return { ok: true, reason }\n})\n","Nuxt server\u002Fapi\u002Faccount\u002Fdelete-verify.get.ts",[879,2212,2213,2235,2257,2275],{"__ignoreMap":942},[946,2214,2215,2217,2219,2221,2223,2225,2227,2229,2231,2233],{"class":948,"line":949},[946,2216,1020],{"class":952},[946,2218,1023],{"class":952},[946,2220,2046],{"class":1026},[946,2222,1030],{"class":956},[946,2224,1034],{"class":1033},[946,2226,1037],{"class":956},[946,2228,1041],{"class":1040},[946,2230,1044],{"class":956},[946,2232,1047],{"class":1033},[946,2234,1050],{"class":956},[946,2236,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255],{"class":948,"line":981},[946,2238,1056],{"class":1033},[946,2240,957],{"class":956},[946,2242,2069],{"class":1059},[946,2244,920],{"class":956},[946,2246,1237],{"class":1059},[946,2248,964],{"class":956},[946,2250,2078],{"class":1063},[946,2252,2081],{"class":960},[946,2254,1198],{"class":956},[946,2256,2086],{"class":960},[946,2258,2259,2261,2263,2265,2267,2269,2271,2273],{"class":948,"line":1011},[946,2260,1256],{"class":952},[946,2262,957],{"class":956},[946,2264,1201],{"class":960},[946,2266,1083],{"class":1082},[946,2268,2099],{"class":1844},[946,2270,920],{"class":956},[946,2272,1237],{"class":960},[946,2274,1272],{"class":956},[946,2276,2277],{"class":948,"line":1017},[946,2278,1278],{"class":956},[848,2280,2281],{},"The wrapper performs these checks before your handler runs:",[868,2283,2284,2287,2297,2314,2320],{},[871,2285,2286],{},"Asserts the request method is GET.",[871,2288,2289,2290,920,2292,1792,2294,2296],{},"Validates that ",[879,2291,919],{},[879,2293,923],{},[879,2295,926],{}," cookies are present.",[871,2298,2299,2300,920,2303,920,2306,920,2308,2310,2311,1198],{},"Validates the query parameters (",[879,2301,2302],{},"visitor",[879,2304,2305],{},"token",[879,2307,1174],{},[879,2309,1237],{},") against the ",[879,2312,2313],{},"VerificationLinkSchema",[871,2315,1804,2316,2319],{},[879,2317,2318],{},"GET \u002Fauth\u002Fverify-custom-mfa\u002F?visitor={}&token={}&random={}&reason={}"," to the IAM service.",[871,2321,2322,2323,1821,2326,2329],{},"On success, sets ",[879,2324,2325],{},"event.context.link",[879,2327,2328],{},"event.context.reason"," and executes your handler.",[2331,2332,2333],"note",{},[848,2334,2335,2336,2339],{},"This wrapper does not verify a CSRF token because it handles GET requests arriving from an email link, where the ",[879,2337,2338],{},"__Host-csrf"," cookie may not be present yet.",[857,2341],{},[860,2343,2345],{"id":2344},"code-verification","Code verification",[848,2347,2348,2349,2351],{},"Wrap a POST handler with ",[879,2350,900],{}," to verify the 7-digit code and rotate tokens before executing your sensitive action.",[933,2353,2354,2484,2601],{},[936,2355,2357],{"className":938,"code":2356,"filename":940,"language":941,"meta":942,"style":942},"import { defineMfaCodeVerifierHandler } from 'auth-h3client\u002Fv1'\n\nexport const deleteVerifyPost = defineMfaCodeVerifierHandler(async (event) => {\n  \u002F\u002F CSRF verified, code verified, tokens rotated\n  const { limitedMetaData } = event.context\n  await deleteAccount(limitedMetaData.userId)\n  return { ok: true, message: 'Account deleted' }\n})\n",[879,2358,2359,2377,2381,2409,2415,2434,2453,2480],{"__ignoreMap":942},[946,2360,2361,2363,2365,2367,2369,2371,2373,2375],{"class":948,"line":949},[946,2362,953],{"class":952},[946,2364,957],{"class":956},[946,2366,900],{"class":960},[946,2368,964],{"class":956},[946,2370,967],{"class":952},[946,2372,971],{"class":970},[946,2374,1006],{"class":974},[946,2376,978],{"class":970},[946,2378,2379],{"class":948,"line":981},[946,2380,1014],{"emptyLinePlaceholder":8},[946,2382,2383,2385,2387,2390,2392,2395,2397,2399,2401,2403,2405,2407],{"class":948,"line":1011},[946,2384,1020],{"class":952},[946,2386,2038],{"class":1033},[946,2388,2389],{"class":1059}," deleteVerifyPost",[946,2391,1064],{"class":1063},[946,2393,2394],{"class":1026}," defineMfaCodeVerifierHandler",[946,2396,1030],{"class":956},[946,2398,1034],{"class":1033},[946,2400,1037],{"class":956},[946,2402,1041],{"class":1040},[946,2404,1044],{"class":956},[946,2406,1047],{"class":1033},[946,2408,1050],{"class":956},[946,2410,2411],{"class":948,"line":1017},[946,2412,2414],{"class":2413},"sghk6","  \u002F\u002F CSRF verified, code verified, tokens rotated\n",[946,2416,2417,2419,2421,2424,2426,2428,2430,2432],{"class":948,"line":1053},[946,2418,1056],{"class":1033},[946,2420,957],{"class":956},[946,2422,2423],{"class":1059},"limitedMetaData",[946,2425,964],{"class":956},[946,2427,2078],{"class":1063},[946,2429,2081],{"class":960},[946,2431,1198],{"class":956},[946,2433,2086],{"class":960},[946,2435,2436,2439,2442,2444,2446,2448,2451],{"class":948,"line":1111},[946,2437,2438],{"class":952},"  await",[946,2440,2441],{"class":1026}," deleteAccount",[946,2443,1030],{"class":956},[946,2445,2423],{"class":960},[946,2447,1198],{"class":956},[946,2449,2450],{"class":960},"userId",[946,2452,1130],{"class":956},[946,2454,2455,2457,2459,2461,2463,2465,2467,2469,2471,2473,2476,2478],{"class":948,"line":1133},[946,2456,1256],{"class":952},[946,2458,957],{"class":956},[946,2460,1201],{"class":960},[946,2462,1083],{"class":1082},[946,2464,2099],{"class":1844},[946,2466,920],{"class":956},[946,2468,1228],{"class":960},[946,2470,1083],{"class":1082},[946,2472,971],{"class":970},[946,2474,2475],{"class":974},"Account deleted",[946,2477,1091],{"class":970},[946,2479,1272],{"class":956},[946,2481,2482],{"class":948,"line":1138},[946,2483,1278],{"class":956},[936,2485,2487],{"className":938,"code":2486,"filename":1282,"language":941,"meta":942,"style":942},"import { defineMfaCodeVerifierHandler } from 'auth-h3client\u002Fv2'\n\nexport const deleteVerifyPost = defineMfaCodeVerifierHandler(async (event) => {\n  const { limitedMetaData } = event.context\n  await deleteAccount(limitedMetaData.userId)\n  return { ok: true, message: 'Account deleted' }\n})\n",[879,2488,2489,2507,2511,2537,2555,2571,2597],{"__ignoreMap":942},[946,2490,2491,2493,2495,2497,2499,2501,2503,2505],{"class":948,"line":949},[946,2492,953],{"class":952},[946,2494,957],{"class":956},[946,2496,900],{"class":960},[946,2498,964],{"class":956},[946,2500,967],{"class":952},[946,2502,971],{"class":970},[946,2504,1327],{"class":974},[946,2506,978],{"class":970},[946,2508,2509],{"class":948,"line":981},[946,2510,1014],{"emptyLinePlaceholder":8},[946,2512,2513,2515,2517,2519,2521,2523,2525,2527,2529,2531,2533,2535],{"class":948,"line":1011},[946,2514,1020],{"class":952},[946,2516,2038],{"class":1033},[946,2518,2389],{"class":1059},[946,2520,1064],{"class":1063},[946,2522,2394],{"class":1026},[946,2524,1030],{"class":956},[946,2526,1034],{"class":1033},[946,2528,1037],{"class":956},[946,2530,1041],{"class":1040},[946,2532,1044],{"class":956},[946,2534,1047],{"class":1033},[946,2536,1050],{"class":956},[946,2538,2539,2541,2543,2545,2547,2549,2551,2553],{"class":948,"line":1017},[946,2540,1056],{"class":1033},[946,2542,957],{"class":956},[946,2544,2423],{"class":1059},[946,2546,964],{"class":956},[946,2548,2078],{"class":1063},[946,2550,2081],{"class":960},[946,2552,1198],{"class":956},[946,2554,2086],{"class":960},[946,2556,2557,2559,2561,2563,2565,2567,2569],{"class":948,"line":1053},[946,2558,2438],{"class":952},[946,2560,2441],{"class":1026},[946,2562,1030],{"class":956},[946,2564,2423],{"class":960},[946,2566,1198],{"class":956},[946,2568,2450],{"class":960},[946,2570,1130],{"class":956},[946,2572,2573,2575,2577,2579,2581,2583,2585,2587,2589,2591,2593,2595],{"class":948,"line":1111},[946,2574,1256],{"class":952},[946,2576,957],{"class":956},[946,2578,1201],{"class":960},[946,2580,1083],{"class":1082},[946,2582,2099],{"class":1844},[946,2584,920],{"class":956},[946,2586,1228],{"class":960},[946,2588,1083],{"class":1082},[946,2590,971],{"class":970},[946,2592,2475],{"class":974},[946,2594,1091],{"class":970},[946,2596,1272],{"class":956},[946,2598,2599],{"class":948,"line":1133},[946,2600,1278],{"class":956},[936,2602,2605],{"className":938,"code":2603,"filename":2604,"language":941,"meta":942,"style":942},"export default defineMfaCodeVerifierHandler(async (event) => {\n  const { limitedMetaData } = event.context\n  await deleteAccount(limitedMetaData.userId)\n  return { ok: true, message: 'Account deleted' }\n})\n","Nuxt server\u002Fapi\u002Faccount\u002Fdelete-verify.post.ts",[879,2606,2607,2629,2647,2663,2689],{"__ignoreMap":942},[946,2608,2609,2611,2613,2615,2617,2619,2621,2623,2625,2627],{"class":948,"line":949},[946,2610,1020],{"class":952},[946,2612,1023],{"class":952},[946,2614,2394],{"class":1026},[946,2616,1030],{"class":956},[946,2618,1034],{"class":1033},[946,2620,1037],{"class":956},[946,2622,1041],{"class":1040},[946,2624,1044],{"class":956},[946,2626,1047],{"class":1033},[946,2628,1050],{"class":956},[946,2630,2631,2633,2635,2637,2639,2641,2643,2645],{"class":948,"line":981},[946,2632,1056],{"class":1033},[946,2634,957],{"class":956},[946,2636,2423],{"class":1059},[946,2638,964],{"class":956},[946,2640,2078],{"class":1063},[946,2642,2081],{"class":960},[946,2644,1198],{"class":956},[946,2646,2086],{"class":960},[946,2648,2649,2651,2653,2655,2657,2659,2661],{"class":948,"line":1011},[946,2650,2438],{"class":952},[946,2652,2441],{"class":1026},[946,2654,1030],{"class":956},[946,2656,2423],{"class":960},[946,2658,1198],{"class":956},[946,2660,2450],{"class":960},[946,2662,1130],{"class":956},[946,2664,2665,2667,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687],{"class":948,"line":1017},[946,2666,1256],{"class":952},[946,2668,957],{"class":956},[946,2670,1201],{"class":960},[946,2672,1083],{"class":1082},[946,2674,2099],{"class":1844},[946,2676,920],{"class":956},[946,2678,1228],{"class":960},[946,2680,1083],{"class":1082},[946,2682,971],{"class":970},[946,2684,2475],{"class":974},[946,2686,1091],{"class":970},[946,2688,1272],{"class":956},[946,2690,2691],{"class":948,"line":1053},[946,2692,1278],{"class":956},[848,2694,2281],{},[868,2696,2697,2704,2707,2710,2718,2723,2729,2735,2746],{},[871,2698,2699,2700,2703],{},"Verifies the CSRF token (wraps with ",[879,2701,2702],{},"defineVerifiedCsrfHandler",").",[871,2705,2706],{},"Asserts the request method is POST.",[871,2708,2709],{},"Limits the request body to 8 MB.",[871,2711,2712,2713,1821,2715,2717],{},"Validates ",[879,2714,919],{},[879,2716,923],{}," cookies.",[871,2719,2720,2721,1198],{},"Validates the query parameters against the ",[879,2722,2313],{},[871,2724,2712,2725,2728],{},[879,2726,2727],{},"event.context.body.code"," as a 7-digit numeric string.",[871,2730,1804,2731,2734],{},[879,2732,2733],{},"POST \u002Fauth\u002Fverify-custom-mfa"," to the IAM service with the code and link parameters.",[871,2736,2737,2738,2742,2743,1198],{},"On success, applies ",[852,2739,2741],{"href":2740},"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fsession#token-rotation","token rotation"," and sets ",[879,2744,2745],{},"event.context.limitedMetaData",[871,2747,2748],{},"Executes your handler.",[1773,2750,2752],{"id":2751},"request-format","Request format",[848,2754,2755],{},"The client sends the code in the request body and the link parameters as query string values:",[936,2757,2761],{"className":2758,"code":2759,"language":2760,"meta":942,"style":942},"language-http shiki shiki-themes light-plus light-plus dracula","POST \u002Fapi\u002Faccount\u002Fdelete-verify?visitor=123&token=abc&random=def&reason=delete_account\nContent-Type: application\u002Fjson\nX-CSRF-Token: \u003Ctoken>\n\n{ \"code\": \"1234567\" }\n","http",[879,2762,2763,2771,2782,2792,2796],{"__ignoreMap":942},[946,2764,2765,2768],{"class":948,"line":949},[946,2766,2767],{"class":952},"POST",[946,2769,2770],{"class":956}," \u002Fapi\u002Faccount\u002Fdelete-verify?visitor=123&token=abc&random=def&reason=delete_account\n",[946,2772,2773,2777,2779],{"class":948,"line":981},[946,2774,2776],{"class":2775},"scd-l","Content-Type",[946,2778,1083],{"class":1033},[946,2780,2781],{"class":974}," application\u002Fjson\n",[946,2783,2784,2787,2789],{"class":948,"line":1011},[946,2785,2786],{"class":2775},"X-CSRF-Token",[946,2788,1083],{"class":1033},[946,2790,2791],{"class":974}," \u003Ctoken>\n",[946,2793,2794],{"class":948,"line":1017},[946,2795,1014],{"emptyLinePlaceholder":8},[946,2797,2798,2801,2805,2808,2810,2812,2815,2818,2820],{"class":948,"line":1053},[946,2799,2800],{"class":956},"{ ",[946,2802,2804],{"class":2803},"saJyd","\"",[946,2806,879],{"class":2807},"s_W10",[946,2809,2804],{"class":2803},[946,2811,1083],{"class":1063},[946,2813,2814],{"class":970}," \"",[946,2816,2817],{"class":974},"1234567",[946,2819,2804],{"class":970},[946,2821,1272],{"class":956},[857,2823],{},[860,2825,2827],{"id":2826},"reserved-reasons","Reserved reasons",[848,2829,2830],{},"The IAM service rejects custom MFA requests that use reserved reason strings. These are used internally by the built-in flows:",[2832,2833,2834,2839,2844],"ul",{},[871,2835,2836],{},[879,2837,2838],{},"MAGIC_LINK_MFA_CHECKS",[871,2840,2841],{},[879,2842,2843],{},"PASSWORD_RESET",[871,2845,2846],{},[879,2847,2848],{},"change_email",[848,2850,2851],{},"Use a different reason string for your custom flows.",[857,2853],{},[860,2855,2857],{"id":2856},"client-side-integration","Client-side integration",[848,2859,1761,2860,2862,2863,2866,2867,2869],{},[879,2861,156],{}," composable (Nuxt) accepts a ",[879,2864,2865],{},"path"," parameter for custom flows. When the ",[879,2868,1237],{}," query parameter does not match any built-in reason, it uses the provided path to validate the link:",[936,2871,2873],{"className":938,"code":2872,"language":941,"meta":942,"style":942},"\u002F\u002F The reason is 'delete_account', which is not a built-in reason.\n\u002F\u002F useMagicLink falls back to the provided path.\nconst data = await useMagicLink('\u002Fapi\u002Faccount\u002Fdelete-verify')\n",[879,2874,2875,2880,2885],{"__ignoreMap":942},[946,2876,2877],{"class":948,"line":949},[946,2878,2879],{"class":2413},"\u002F\u002F The reason is 'delete_account', which is not a built-in reason.\n",[946,2881,2882],{"class":948,"line":981},[946,2883,2884],{"class":2413},"\u002F\u002F useMagicLink falls back to the provided path.\n",[946,2886,2887,2890,2893,2895,2897,2900,2902,2904,2907,2909],{"class":948,"line":1011},[946,2888,2889],{"class":1033},"const",[946,2891,2892],{"class":1059}," data",[946,2894,1064],{"class":1063},[946,2896,1148],{"class":952},[946,2898,2899],{"class":1026}," useMagicLink",[946,2901,1030],{"class":956},[946,2903,1091],{"class":970},[946,2905,2906],{"class":974},"\u002Fapi\u002Faccount\u002Fdelete-verify",[946,2908,1091],{"class":970},[946,2910,1130],{"class":956},[848,2912,2913,2914,920,2916,920,2918,1792,2920,2922],{},"For H3 or Nitro setups without the Nuxt module, read the ",[879,2915,2305],{},[879,2917,1174],{},[879,2919,1237],{},[879,2921,2302],{}," query parameters from the request directly and call your GET verification endpoint with them before presenting the code input.",[848,2924,2925,2926,2929],{},"Your verification page renders the appropriate UI based on ",[879,2927,2928],{},"data.reason"," and submits the code to your POST endpoint.",[848,2931,2932,2933,2935],{},"See ",[852,2934,142],{"href":143}," for the full client-side implementation.",[2937,2938,2939],"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 .sHOzp, html code.shiki .sHOzp{--shiki-light:#795E26;--shiki-default:#795E26;--shiki-dark:#50FA7B}html pre.shiki code .sl46w, html code.shiki .sl46w{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#FF79C6}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 .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 .s34zl, html code.shiki .s34zl{--shiki-light:#001080;--shiki-default:#001080;--shiki-dark:#FF79C6}html pre.shiki code .spgvN, html code.shiki .spgvN{--shiki-light:#098658;--shiki-default:#098658;--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 .sakC6, html code.shiki .sakC6{--shiki-light:#0000FF;--shiki-light-font-weight:inherit;--shiki-default:#0000FF;--shiki-default-font-weight:inherit;--shiki-dark:#FF79C6;--shiki-dark-font-weight:bold}html pre.shiki code .sjR7W, html code.shiki .sjR7W{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#BD93F9}html pre.shiki code .sghk6, html code.shiki .sghk6{--shiki-light:#008000;--shiki-default:#008000;--shiki-dark:#6272A4}html pre.shiki code .scd-l, html code.shiki .scd-l{--shiki-light:#800000;--shiki-default:#800000;--shiki-dark:#FF79C6}html pre.shiki code .saJyd, html code.shiki .saJyd{--shiki-light:#0451A5;--shiki-default:#0451A5;--shiki-dark:#8BE9FE}html pre.shiki code .s_W10, html code.shiki .s_W10{--shiki-light:#0451A5;--shiki-default:#0451A5;--shiki-dark:#8BE9FD}",{"title":942,"searchDepth":981,"depth":981,"links":2941},[2942,2943,2948,2949,2952,2953],{"id":862,"depth":981,"text":863},{"id":909,"depth":981,"text":910,"children":2944},[2945,2947],{"id":1775,"depth":1011,"text":2946},"How askForMfaFlow works",{"id":1827,"depth":1011,"text":1828},{"id":1995,"depth":981,"text":1996},{"id":2344,"depth":981,"text":2345,"children":2950},[2951],{"id":2751,"depth":1011,"text":2752},{"id":2826,"depth":981,"text":2827},{"id":2856,"depth":981,"text":2857},"How to implement step-up MFA verification for sensitive actions like account deletion, using askForMfaFlow to initiate and handler wrappers to verify.","md","i-lucide-shield-plus",{},null,"---\ntitle: Custom MFA Flow\ndescription: How to implement step-up MFA verification for sensitive actions like account deletion, using askForMfaFlow to initiate and handler wrappers to verify.\nicon: i-lucide-shield-plus\n---\n\nCustom MFA flows let you require email-based verification for any sensitive action in your application. Unlike the [built-in MFA flow](\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fbuilt-in-flow) that is triggered automatically by anomaly detection, custom flows are initiated by your server code when the user attempts an action you want to protect.\n\n---\n\n## Overview\n\nA custom MFA flow has three parts:\n\n1. **Initiation endpoint**: your authenticated handler generates a cryptographic buffer, calls `askForMfaFlow`, and tells the client to check their email.\n2. **Verification endpoint (GET)**: wraps your handler with `defineVerifiedMagicLinkGetHandler` to verify the magic link when the user clicks it.\n3. **Verification endpoint (POST)**: wraps your handler with `defineMfaCodeVerifierHandler` to verify the 7-digit code and rotate tokens before executing your action.\n\nYou can implement either or both verification methods depending on your needs.\n\n---\n\n## Initiating the flow\n\nCreate an authenticated endpoint that calls `askForMfaFlow`. This function requires the current session cookies (`canary_id`, `session`, `__Secure-a`), a reason string, and a `Buffer` of cryptographic random data.\n\n::code-group\n\n```ts [H3 v1]\nimport { randomBytes } from 'node:crypto'\nimport { defineAuthenticatedEventHandler, askForMfaFlow, getLogger } from 'auth-h3client\u002Fv1'\n\nexport default defineAuthenticatedEventHandler(async (event) => {\n  const log = getLogger().child({ service: 'api', action: 'delete-account' })\n  const random = randomBytes(128)\n\n  const result = await askForMfaFlow(event, log, 'delete_account', random)\n\n  if (!result.ok) {\n    throw createError({ statusCode: 400, message: result.reason })\n  }\n\n  return { message: result.data }\n})\n```\n\n```ts [H3 v2]\nimport { randomBytes } from 'node:crypto'\nimport { defineAuthenticatedEventHandler, askForMfaFlow, getLogger } from 'auth-h3client\u002Fv2'\n\nexport default defineAuthenticatedEventHandler(async (event) => {\n  const log = getLogger().child({ service: 'api', action: 'delete-account' })\n  const random = randomBytes(128)\n\n  const result = await askForMfaFlow(event, log, 'delete_account', random)\n\n  if (!result.ok) {\n    throw new HTTPError({ status: 400, message: result.reason })\n  }\n\n  return { message: result.data }\n})\n```\n\n```ts [Nuxt server\u002Fapi\u002Faccount\u002Fdelete.post.ts]\nimport { randomBytes } from 'node:crypto'\n\nexport default defineAuthenticatedEventHandler(async (event) => {\n  const log = getLogger().child({ service: 'api', action: 'delete-account' })\n  const random = randomBytes(128)\n\n  const result = await askForMfaFlow(event, log, 'delete_account', random)\n\n  if (!result.ok) {\n    throw createError({ statusCode: 400, message: result.reason })\n  }\n\n  return { message: result.data }\n})\n```\n\n::\n\n::warning\nThe `random` parameter must be a `Buffer`. The function converts it to hex internally and validates that the hex string is between 254 and 500 characters long. A `randomBytes(128)` call produces a 256-character hex string, which fits within this range.\n::\n\n### How `askForMfaFlow` works\n\nThe function:\n\n1. Reads `canary_id`, `session`, and `__Secure-a` cookies from the request.\n2. Validates the `Buffer` length and reason string length (max 100 characters).\n3. Sends `POST \u002Fcustom\u002Fmfa\u002F{reason}?random={hex}` to the IAM service with the session cookies and access token.\n4. The IAM service generates a magic link and 7-digit code, sends both to the user's email, and returns success.\n\nThe request is deduplicated with `lockAsyncAction` keyed on `canary_id` and `reason` to prevent concurrent calls for the same session.\n\n### Response\n\nOn success:\n\n```ts\n{ ok: true, date: '...', data: 'Please check your email to complete the action.' }\n```\n\nOn failure, the `code` field identifies the error:\n\n| Code | Meaning |\n|---|---|\n| `INVALID_CREDENTIALS` | Missing session cookies or IAM rejected the request |\n| `HASH` | Buffer is not a `Buffer` type, or hex length is not between 254 and 500 characters |\n| `REASON` | Reason string exceeds 100 characters |\n| `MFA_REQUIRED` | The current session has an anomaly: the user must complete the standard MFA flow first |\n| `FORBIDDEN` | User is banned or blacklisted |\n| `RATE_LIMIT` | Too many requests. `retryAfter` contains the seconds to wait |\n| `AUTH_SERVER_ERROR` | IAM service returned 500 or an unexpected response |\n| `AUTH_REJECTED` | IAM service returned success but the result indicates rejection |\n| `UNEXPECTED_ERROR` | Unhandled exception |\n\n---\n\n## Magic link verification\n\nWrap a GET handler with `defineVerifiedMagicLinkGetHandler` to verify the magic link when the user clicks it from their email.\n\n::code-group\n\n```ts [H3 v1]\nimport { defineVerifiedMagicLinkGetHandler } from 'auth-h3client\u002Fv1'\n\nexport const deleteVerifyGet = defineVerifiedMagicLinkGetHandler(async (event) => {\n  const { link, reason } = event.context\n  return { ok: true, reason }\n})\n```\n\n```ts [H3 v2]\nimport { defineVerifiedMagicLinkGetHandler } from 'auth-h3client\u002Fv2'\n\nexport const deleteVerifyGet = defineVerifiedMagicLinkGetHandler(async (event) => {\n  const { link, reason } = event.context\n  return { ok: true, reason }\n})\n```\n\n```ts [Nuxt server\u002Fapi\u002Faccount\u002Fdelete-verify.get.ts]\nexport default defineVerifiedMagicLinkGetHandler(async (event) => {\n  const { link, reason } = event.context\n  return { ok: true, reason }\n})\n```\n\n::\n\nThe wrapper performs these checks before your handler runs:\n\n1. Asserts the request method is GET.\n2. Validates that `canary_id`, `session`, and `__Secure-a` cookies are present.\n3. Validates the query parameters (`visitor`, `token`, `random`, `reason`) against the `VerificationLinkSchema`.\n4. Sends `GET \u002Fauth\u002Fverify-custom-mfa\u002F?visitor={}&token={}&random={}&reason={}` to the IAM service.\n5. On success, sets `event.context.link` and `event.context.reason` and executes your handler.\n\n::note\nThis wrapper does not verify a CSRF token because it handles GET requests arriving from an email link, where the `__Host-csrf` cookie may not be present yet.\n::\n\n---\n\n## Code verification\n\nWrap a POST handler with `defineMfaCodeVerifierHandler` to verify the 7-digit code and rotate tokens before executing your sensitive action.\n\n::code-group\n\n```ts [H3 v1]\nimport { defineMfaCodeVerifierHandler } from 'auth-h3client\u002Fv1'\n\nexport const deleteVerifyPost = defineMfaCodeVerifierHandler(async (event) => {\n  \u002F\u002F CSRF verified, code verified, tokens rotated\n  const { limitedMetaData } = event.context\n  await deleteAccount(limitedMetaData.userId)\n  return { ok: true, message: 'Account deleted' }\n})\n```\n\n```ts [H3 v2]\nimport { defineMfaCodeVerifierHandler } from 'auth-h3client\u002Fv2'\n\nexport const deleteVerifyPost = defineMfaCodeVerifierHandler(async (event) => {\n  const { limitedMetaData } = event.context\n  await deleteAccount(limitedMetaData.userId)\n  return { ok: true, message: 'Account deleted' }\n})\n```\n\n```ts [Nuxt server\u002Fapi\u002Faccount\u002Fdelete-verify.post.ts]\nexport default defineMfaCodeVerifierHandler(async (event) => {\n  const { limitedMetaData } = event.context\n  await deleteAccount(limitedMetaData.userId)\n  return { ok: true, message: 'Account deleted' }\n})\n```\n\n::\n\nThe wrapper performs these checks before your handler runs:\n\n1. Verifies the CSRF token (wraps with `defineVerifiedCsrfHandler`).\n2. Asserts the request method is POST.\n3. Limits the request body to 8 MB.\n4. Validates `canary_id` and `session` cookies.\n5. Validates the query parameters against the `VerificationLinkSchema`.\n6. Validates `event.context.body.code` as a 7-digit numeric string.\n7. Sends `POST \u002Fauth\u002Fverify-custom-mfa` to the IAM service with the code and link parameters.\n8. On success, applies [token rotation](\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fsession#token-rotation) and sets `event.context.limitedMetaData`.\n9. Executes your handler.\n\n### Request format\n\nThe client sends the code in the request body and the link parameters as query string values:\n\n```http\nPOST \u002Fapi\u002Faccount\u002Fdelete-verify?visitor=123&token=abc&random=def&reason=delete_account\nContent-Type: application\u002Fjson\nX-CSRF-Token: \u003Ctoken>\n\n{ \"code\": \"1234567\" }\n```\n\n---\n\n## Reserved reasons\n\nThe IAM service rejects custom MFA requests that use reserved reason strings. These are used internally by the built-in flows:\n\n- `MAGIC_LINK_MFA_CHECKS`\n- `PASSWORD_RESET`\n- `change_email`\n\nUse a different reason string for your custom flows.\n\n---\n\n## Client-side integration\n\nThe `useMagicLink` composable (Nuxt) accepts a `path` parameter for custom flows. When the `reason` query parameter does not match any built-in reason, it uses the provided path to validate the link:\n\n```ts\n\u002F\u002F The reason is 'delete_account', which is not a built-in reason.\n\u002F\u002F useMagicLink falls back to the provided path.\nconst data = await useMagicLink('\u002Fapi\u002Faccount\u002Fdelete-verify')\n```\n\nFor H3 or Nitro setups without the Nuxt module, read the `token`, `random`, `reason`, and `visitor` query parameters from the request directly and call your GET verification endpoint with them before presenting the code input.\n\nYour verification page renders the appropriate UI based on `data.reason` and submits the code to your POST endpoint.\n\nSee [Client-Side MFA](\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fclient-side) for the full client-side implementation.\n",{"title":138,"description":2954},"JRdQEQc5fQ5sFxqPq-xiXIgyOExdv3xatskqYsvNE94",[2963,2964],{"title":134,"path":135,"stem":136,"children":-1},{"title":142,"path":143,"stem":144,"children":-1},{"id":843,"title":138,"body":2966,"description":2954,"extension":2955,"icon":2956,"meta":4743,"module":2958,"navigation":8,"path":139,"rawbody":2959,"seo":4744,"stem":140,"__hash__":2961},{"type":845,"value":2967,"toc":4730},[2968,2972,2974,2976,2978,2998,3000,3002,3004,3016,3732,3742,3746,3748,3768,3776,3778,3780,3808,3812,3900,3902,3904,3908,4172,4174,4208,4214,4216,4218,4222,4550,4552,4588,4590,4592,4642,4644,4646,4648,4662,4664,4666,4668,4676,4710,4720,4724,4728],[848,2969,850,2970,855],{},[852,2971,854],{"href":127},[857,2973],{},[860,2975,863],{"id":862},[848,2977,866],{},[868,2979,2980,2986,2992],{},[871,2981,2982,877,2984,882],{},[874,2983,876],{},[879,2985,881],{},[871,2987,2988,888,2990,892],{},[874,2989,887],{},[879,2991,891],{},[871,2993,2994,888,2996,901],{},[874,2995,897],{},[879,2997,900],{},[848,2999,904],{},[857,3001],{},[860,3003,910],{"id":909},[848,3005,913,3006,916,3008,920,3010,920,3012,927,3014,931],{},[879,3007,881],{},[879,3009,919],{},[879,3011,923],{},[879,3013,926],{},[879,3015,930],{},[933,3017,3018,3264,3512],{},[936,3019,3020],{"className":938,"code":939,"filename":940,"language":941,"meta":942,"style":942},[879,3021,3022,3040,3066,3070,3092,3132,3148,3152,3186,3190,3206,3234,3238,3242,3260],{"__ignoreMap":942},[946,3023,3024,3026,3028,3030,3032,3034,3036,3038],{"class":948,"line":949},[946,3025,953],{"class":952},[946,3027,957],{"class":956},[946,3029,961],{"class":960},[946,3031,964],{"class":956},[946,3033,967],{"class":952},[946,3035,971],{"class":970},[946,3037,975],{"class":974},[946,3039,978],{"class":970},[946,3041,3042,3044,3046,3048,3050,3052,3054,3056,3058,3060,3062,3064],{"class":948,"line":981},[946,3043,953],{"class":952},[946,3045,957],{"class":956},[946,3047,988],{"class":960},[946,3049,920],{"class":956},[946,3051,881],{"class":960},[946,3053,920],{"class":956},[946,3055,997],{"class":960},[946,3057,964],{"class":956},[946,3059,967],{"class":952},[946,3061,971],{"class":970},[946,3063,1006],{"class":974},[946,3065,978],{"class":970},[946,3067,3068],{"class":948,"line":1011},[946,3069,1014],{"emptyLinePlaceholder":8},[946,3071,3072,3074,3076,3078,3080,3082,3084,3086,3088,3090],{"class":948,"line":1017},[946,3073,1020],{"class":952},[946,3075,1023],{"class":952},[946,3077,1027],{"class":1026},[946,3079,1030],{"class":956},[946,3081,1034],{"class":1033},[946,3083,1037],{"class":956},[946,3085,1041],{"class":1040},[946,3087,1044],{"class":956},[946,3089,1047],{"class":1033},[946,3091,1050],{"class":956},[946,3093,3094,3096,3098,3100,3102,3104,3106,3108,3110,3112,3114,3116,3118,3120,3122,3124,3126,3128,3130],{"class":948,"line":1053},[946,3095,1056],{"class":1033},[946,3097,1060],{"class":1059},[946,3099,1064],{"class":1063},[946,3101,1067],{"class":1026},[946,3103,1070],{"class":956},[946,3105,1073],{"class":1026},[946,3107,1076],{"class":956},[946,3109,1079],{"class":960},[946,3111,1083],{"class":1082},[946,3113,971],{"class":970},[946,3115,1088],{"class":974},[946,3117,1091],{"class":970},[946,3119,920],{"class":956},[946,3121,1096],{"class":960},[946,3123,1083],{"class":1082},[946,3125,971],{"class":970},[946,3127,1103],{"class":974},[946,3129,1091],{"class":970},[946,3131,1108],{"class":956},[946,3133,3134,3136,3138,3140,3142,3144,3146],{"class":948,"line":1111},[946,3135,1056],{"class":1033},[946,3137,1116],{"class":1059},[946,3139,1064],{"class":1063},[946,3141,1121],{"class":1026},[946,3143,1030],{"class":956},[946,3145,1127],{"class":1126},[946,3147,1130],{"class":956},[946,3149,3150],{"class":948,"line":1133},[946,3151,1014],{"emptyLinePlaceholder":8},[946,3153,3154,3156,3158,3160,3162,3164,3166,3168,3170,3172,3174,3176,3178,3180,3182,3184],{"class":948,"line":1138},[946,3155,1056],{"class":1033},[946,3157,1143],{"class":1059},[946,3159,1064],{"class":1063},[946,3161,1148],{"class":952},[946,3163,1151],{"class":1026},[946,3165,1030],{"class":956},[946,3167,1041],{"class":960},[946,3169,920],{"class":956},[946,3171,1160],{"class":960},[946,3173,920],{"class":956},[946,3175,1091],{"class":970},[946,3177,1167],{"class":974},[946,3179,1091],{"class":970},[946,3181,920],{"class":956},[946,3183,1174],{"class":960},[946,3185,1130],{"class":956},[946,3187,3188],{"class":948,"line":1179},[946,3189,1014],{"emptyLinePlaceholder":8},[946,3191,3192,3194,3196,3198,3200,3202,3204],{"class":948,"line":1184},[946,3193,1187],{"class":952},[946,3195,1037],{"class":956},[946,3197,1192],{"class":1063},[946,3199,1195],{"class":960},[946,3201,1198],{"class":956},[946,3203,1201],{"class":960},[946,3205,1204],{"class":956},[946,3207,3208,3210,3212,3214,3216,3218,3220,3222,3224,3226,3228,3230,3232],{"class":948,"line":1207},[946,3209,1210],{"class":952},[946,3211,1213],{"class":1026},[946,3213,1076],{"class":956},[946,3215,1218],{"class":960},[946,3217,1083],{"class":1082},[946,3219,1223],{"class":1126},[946,3221,920],{"class":956},[946,3223,1228],{"class":960},[946,3225,1083],{"class":1082},[946,3227,1143],{"class":960},[946,3229,1198],{"class":956},[946,3231,1237],{"class":960},[946,3233,1108],{"class":956},[946,3235,3236],{"class":948,"line":1242},[946,3237,1245],{"class":956},[946,3239,3240],{"class":948,"line":1248},[946,3241,1014],{"emptyLinePlaceholder":8},[946,3243,3244,3246,3248,3250,3252,3254,3256,3258],{"class":948,"line":1253},[946,3245,1256],{"class":952},[946,3247,957],{"class":956},[946,3249,1228],{"class":960},[946,3251,1083],{"class":1082},[946,3253,1143],{"class":960},[946,3255,1198],{"class":956},[946,3257,1269],{"class":960},[946,3259,1272],{"class":956},[946,3261,3262],{"class":948,"line":1275},[946,3263,1278],{"class":956},[936,3265,3266],{"className":938,"code":1281,"filename":1282,"language":941,"meta":942,"style":942},[879,3267,3268,3286,3312,3316,3338,3378,3394,3398,3432,3436,3452,3482,3486,3490,3508],{"__ignoreMap":942},[946,3269,3270,3272,3274,3276,3278,3280,3282,3284],{"class":948,"line":949},[946,3271,953],{"class":952},[946,3273,957],{"class":956},[946,3275,961],{"class":960},[946,3277,964],{"class":956},[946,3279,967],{"class":952},[946,3281,971],{"class":970},[946,3283,975],{"class":974},[946,3285,978],{"class":970},[946,3287,3288,3290,3292,3294,3296,3298,3300,3302,3304,3306,3308,3310],{"class":948,"line":981},[946,3289,953],{"class":952},[946,3291,957],{"class":956},[946,3293,988],{"class":960},[946,3295,920],{"class":956},[946,3297,881],{"class":960},[946,3299,920],{"class":956},[946,3301,997],{"class":960},[946,3303,964],{"class":956},[946,3305,967],{"class":952},[946,3307,971],{"class":970},[946,3309,1327],{"class":974},[946,3311,978],{"class":970},[946,3313,3314],{"class":948,"line":1011},[946,3315,1014],{"emptyLinePlaceholder":8},[946,3317,3318,3320,3322,3324,3326,3328,3330,3332,3334,3336],{"class":948,"line":1017},[946,3319,1020],{"class":952},[946,3321,1023],{"class":952},[946,3323,1027],{"class":1026},[946,3325,1030],{"class":956},[946,3327,1034],{"class":1033},[946,3329,1037],{"class":956},[946,3331,1041],{"class":1040},[946,3333,1044],{"class":956},[946,3335,1047],{"class":1033},[946,3337,1050],{"class":956},[946,3339,3340,3342,3344,3346,3348,3350,3352,3354,3356,3358,3360,3362,3364,3366,3368,3370,3372,3374,3376],{"class":948,"line":1053},[946,3341,1056],{"class":1033},[946,3343,1060],{"class":1059},[946,3345,1064],{"class":1063},[946,3347,1067],{"class":1026},[946,3349,1070],{"class":956},[946,3351,1073],{"class":1026},[946,3353,1076],{"class":956},[946,3355,1079],{"class":960},[946,3357,1083],{"class":1082},[946,3359,971],{"class":970},[946,3361,1088],{"class":974},[946,3363,1091],{"class":970},[946,3365,920],{"class":956},[946,3367,1096],{"class":960},[946,3369,1083],{"class":1082},[946,3371,971],{"class":970},[946,3373,1103],{"class":974},[946,3375,1091],{"class":970},[946,3377,1108],{"class":956},[946,3379,3380,3382,3384,3386,3388,3390,3392],{"class":948,"line":1111},[946,3381,1056],{"class":1033},[946,3383,1116],{"class":1059},[946,3385,1064],{"class":1063},[946,3387,1121],{"class":1026},[946,3389,1030],{"class":956},[946,3391,1127],{"class":1126},[946,3393,1130],{"class":956},[946,3395,3396],{"class":948,"line":1133},[946,3397,1014],{"emptyLinePlaceholder":8},[946,3399,3400,3402,3404,3406,3408,3410,3412,3414,3416,3418,3420,3422,3424,3426,3428,3430],{"class":948,"line":1138},[946,3401,1056],{"class":1033},[946,3403,1143],{"class":1059},[946,3405,1064],{"class":1063},[946,3407,1148],{"class":952},[946,3409,1151],{"class":1026},[946,3411,1030],{"class":956},[946,3413,1041],{"class":960},[946,3415,920],{"class":956},[946,3417,1160],{"class":960},[946,3419,920],{"class":956},[946,3421,1091],{"class":970},[946,3423,1167],{"class":974},[946,3425,1091],{"class":970},[946,3427,920],{"class":956},[946,3429,1174],{"class":960},[946,3431,1130],{"class":956},[946,3433,3434],{"class":948,"line":1179},[946,3435,1014],{"emptyLinePlaceholder":8},[946,3437,3438,3440,3442,3444,3446,3448,3450],{"class":948,"line":1184},[946,3439,1187],{"class":952},[946,3441,1037],{"class":956},[946,3443,1192],{"class":1063},[946,3445,1195],{"class":960},[946,3447,1198],{"class":956},[946,3449,1201],{"class":960},[946,3451,1204],{"class":956},[946,3453,3454,3456,3458,3460,3462,3464,3466,3468,3470,3472,3474,3476,3478,3480],{"class":948,"line":1207},[946,3455,1210],{"class":952},[946,3457,1477],{"class":1476},[946,3459,1480],{"class":1026},[946,3461,1076],{"class":956},[946,3463,1485],{"class":960},[946,3465,1083],{"class":1082},[946,3467,1223],{"class":1126},[946,3469,920],{"class":956},[946,3471,1228],{"class":960},[946,3473,1083],{"class":1082},[946,3475,1143],{"class":960},[946,3477,1198],{"class":956},[946,3479,1237],{"class":960},[946,3481,1108],{"class":956},[946,3483,3484],{"class":948,"line":1242},[946,3485,1245],{"class":956},[946,3487,3488],{"class":948,"line":1248},[946,3489,1014],{"emptyLinePlaceholder":8},[946,3491,3492,3494,3496,3498,3500,3502,3504,3506],{"class":948,"line":1253},[946,3493,1256],{"class":952},[946,3495,957],{"class":956},[946,3497,1228],{"class":960},[946,3499,1083],{"class":1082},[946,3501,1143],{"class":960},[946,3503,1198],{"class":956},[946,3505,1269],{"class":960},[946,3507,1272],{"class":956},[946,3509,3510],{"class":948,"line":1275},[946,3511,1278],{"class":956},[936,3513,3514],{"className":938,"code":1536,"filename":1537,"language":941,"meta":942,"style":942},[879,3515,3516,3534,3538,3560,3600,3616,3620,3654,3658,3674,3702,3706,3710,3728],{"__ignoreMap":942},[946,3517,3518,3520,3522,3524,3526,3528,3530,3532],{"class":948,"line":949},[946,3519,953],{"class":952},[946,3521,957],{"class":956},[946,3523,961],{"class":960},[946,3525,964],{"class":956},[946,3527,967],{"class":952},[946,3529,971],{"class":970},[946,3531,975],{"class":974},[946,3533,978],{"class":970},[946,3535,3536],{"class":948,"line":981},[946,3537,1014],{"emptyLinePlaceholder":8},[946,3539,3540,3542,3544,3546,3548,3550,3552,3554,3556,3558],{"class":948,"line":1011},[946,3541,1020],{"class":952},[946,3543,1023],{"class":952},[946,3545,1027],{"class":1026},[946,3547,1030],{"class":956},[946,3549,1034],{"class":1033},[946,3551,1037],{"class":956},[946,3553,1041],{"class":1040},[946,3555,1044],{"class":956},[946,3557,1047],{"class":1033},[946,3559,1050],{"class":956},[946,3561,3562,3564,3566,3568,3570,3572,3574,3576,3578,3580,3582,3584,3586,3588,3590,3592,3594,3596,3598],{"class":948,"line":1017},[946,3563,1056],{"class":1033},[946,3565,1060],{"class":1059},[946,3567,1064],{"class":1063},[946,3569,1067],{"class":1026},[946,3571,1070],{"class":956},[946,3573,1073],{"class":1026},[946,3575,1076],{"class":956},[946,3577,1079],{"class":960},[946,3579,1083],{"class":1082},[946,3581,971],{"class":970},[946,3583,1088],{"class":974},[946,3585,1091],{"class":970},[946,3587,920],{"class":956},[946,3589,1096],{"class":960},[946,3591,1083],{"class":1082},[946,3593,971],{"class":970},[946,3595,1103],{"class":974},[946,3597,1091],{"class":970},[946,3599,1108],{"class":956},[946,3601,3602,3604,3606,3608,3610,3612,3614],{"class":948,"line":1053},[946,3603,1056],{"class":1033},[946,3605,1116],{"class":1059},[946,3607,1064],{"class":1063},[946,3609,1121],{"class":1026},[946,3611,1030],{"class":956},[946,3613,1127],{"class":1126},[946,3615,1130],{"class":956},[946,3617,3618],{"class":948,"line":1111},[946,3619,1014],{"emptyLinePlaceholder":8},[946,3621,3622,3624,3626,3628,3630,3632,3634,3636,3638,3640,3642,3644,3646,3648,3650,3652],{"class":948,"line":1133},[946,3623,1056],{"class":1033},[946,3625,1143],{"class":1059},[946,3627,1064],{"class":1063},[946,3629,1148],{"class":952},[946,3631,1151],{"class":1026},[946,3633,1030],{"class":956},[946,3635,1041],{"class":960},[946,3637,920],{"class":956},[946,3639,1160],{"class":960},[946,3641,920],{"class":956},[946,3643,1091],{"class":970},[946,3645,1167],{"class":974},[946,3647,1091],{"class":970},[946,3649,920],{"class":956},[946,3651,1174],{"class":960},[946,3653,1130],{"class":956},[946,3655,3656],{"class":948,"line":1138},[946,3657,1014],{"emptyLinePlaceholder":8},[946,3659,3660,3662,3664,3666,3668,3670,3672],{"class":948,"line":1179},[946,3661,1187],{"class":952},[946,3663,1037],{"class":956},[946,3665,1192],{"class":1063},[946,3667,1195],{"class":960},[946,3669,1198],{"class":956},[946,3671,1201],{"class":960},[946,3673,1204],{"class":956},[946,3675,3676,3678,3680,3682,3684,3686,3688,3690,3692,3694,3696,3698,3700],{"class":948,"line":1184},[946,3677,1210],{"class":952},[946,3679,1213],{"class":1026},[946,3681,1076],{"class":956},[946,3683,1218],{"class":960},[946,3685,1083],{"class":1082},[946,3687,1223],{"class":1126},[946,3689,920],{"class":956},[946,3691,1228],{"class":960},[946,3693,1083],{"class":1082},[946,3695,1143],{"class":960},[946,3697,1198],{"class":956},[946,3699,1237],{"class":960},[946,3701,1108],{"class":956},[946,3703,3704],{"class":948,"line":1207},[946,3705,1245],{"class":956},[946,3707,3708],{"class":948,"line":1242},[946,3709,1014],{"emptyLinePlaceholder":8},[946,3711,3712,3714,3716,3718,3720,3722,3724,3726],{"class":948,"line":1248},[946,3713,1256],{"class":952},[946,3715,957],{"class":956},[946,3717,1228],{"class":960},[946,3719,1083],{"class":1082},[946,3721,1143],{"class":960},[946,3723,1198],{"class":956},[946,3725,1269],{"class":960},[946,3727,1272],{"class":956},[946,3729,3730],{"class":948,"line":1253},[946,3731,1278],{"class":956},[1757,3733,3734],{},[848,3735,1761,3736,1764,3738,1767,3740,1771],{},[879,3737,1174],{},[879,3739,930],{},[879,3741,1770],{},[1773,3743,1776,3744,1779],{"id":1775},[879,3745,881],{},[848,3747,1782],{},[868,3749,3750,3758,3762,3766],{},[871,3751,1787,3752,920,3754,1792,3756,1795],{},[879,3753,919],{},[879,3755,923],{},[879,3757,926],{},[871,3759,1798,3760,1801],{},[879,3761,930],{},[871,3763,1804,3764,1808],{},[879,3765,1807],{},[871,3767,1811],{},[848,3769,1814,3770,1818,3772,1821,3774,1824],{},[879,3771,1817],{},[879,3773,919],{},[879,3775,1237],{},[1773,3777,1828],{"id":1827},[848,3779,1831],{},[936,3781,3782],{"className":938,"code":1834,"language":941,"meta":942,"style":942},[879,3783,3784],{"__ignoreMap":942},[946,3785,3786,3788,3790,3792,3794,3796,3798,3800,3802,3804,3806],{"class":948,"line":949},[946,3787,1841],{"class":956},[946,3789,1845],{"class":1844},[946,3791,1848],{"class":956},[946,3793,1091],{"class":970},[946,3795,1853],{"class":974},[946,3797,1091],{"class":970},[946,3799,1858],{"class":956},[946,3801,1091],{"class":970},[946,3803,1863],{"class":974},[946,3805,1091],{"class":970},[946,3807,1272],{"class":956},[848,3809,1870,3810,1873],{},[879,3811,879],{},[1875,3813,3814,3822],{},[1878,3815,3816],{},[1881,3817,3818,3820],{},[1884,3819,1886],{},[1884,3821,1889],{},[1891,3823,3824,3832,3842,3850,3858,3866,3876,3884,3892],{},[1881,3825,3826,3830],{},[1896,3827,3828],{},[879,3829,1900],{},[1896,3831,1903],{},[1881,3833,3834,3838],{},[1896,3835,3836],{},[879,3837,1910],{},[1896,3839,1913,3840,1916],{},[879,3841,930],{},[1881,3843,3844,3848],{},[1896,3845,3846],{},[879,3847,1923],{},[1896,3849,1926],{},[1881,3851,3852,3856],{},[1896,3853,3854],{},[879,3855,1933],{},[1896,3857,1936],{},[1881,3859,3860,3864],{},[1896,3861,3862],{},[879,3863,1943],{},[1896,3865,1946],{},[1881,3867,3868,3872],{},[1896,3869,3870],{},[879,3871,1953],{},[1896,3873,1956,3874,1960],{},[879,3875,1959],{},[1881,3877,3878,3882],{},[1896,3879,3880],{},[879,3881,1967],{},[1896,3883,1970],{},[1881,3885,3886,3890],{},[1896,3887,3888],{},[879,3889,1977],{},[1896,3891,1980],{},[1881,3893,3894,3898],{},[1896,3895,3896],{},[879,3897,1987],{},[1896,3899,1990],{},[857,3901],{},[860,3903,1996],{"id":1995},[848,3905,1999,3906,2002],{},[879,3907,891],{},[933,3909,3910,4006,4102],{},[936,3911,3912],{"className":938,"code":2007,"filename":940,"language":941,"meta":942,"style":942},[879,3913,3914,3932,3936,3962,3984,4002],{"__ignoreMap":942},[946,3915,3916,3918,3920,3922,3924,3926,3928,3930],{"class":948,"line":949},[946,3917,953],{"class":952},[946,3919,957],{"class":956},[946,3921,891],{"class":960},[946,3923,964],{"class":956},[946,3925,967],{"class":952},[946,3927,971],{"class":970},[946,3929,1006],{"class":974},[946,3931,978],{"class":970},[946,3933,3934],{"class":948,"line":981},[946,3935,1014],{"emptyLinePlaceholder":8},[946,3937,3938,3940,3942,3944,3946,3948,3950,3952,3954,3956,3958,3960],{"class":948,"line":1011},[946,3939,1020],{"class":952},[946,3941,2038],{"class":1033},[946,3943,2041],{"class":1059},[946,3945,1064],{"class":1063},[946,3947,2046],{"class":1026},[946,3949,1030],{"class":956},[946,3951,1034],{"class":1033},[946,3953,1037],{"class":956},[946,3955,1041],{"class":1040},[946,3957,1044],{"class":956},[946,3959,1047],{"class":1033},[946,3961,1050],{"class":956},[946,3963,3964,3966,3968,3970,3972,3974,3976,3978,3980,3982],{"class":948,"line":1017},[946,3965,1056],{"class":1033},[946,3967,957],{"class":956},[946,3969,2069],{"class":1059},[946,3971,920],{"class":956},[946,3973,1237],{"class":1059},[946,3975,964],{"class":956},[946,3977,2078],{"class":1063},[946,3979,2081],{"class":960},[946,3981,1198],{"class":956},[946,3983,2086],{"class":960},[946,3985,3986,3988,3990,3992,3994,3996,3998,4000],{"class":948,"line":1053},[946,3987,1256],{"class":952},[946,3989,957],{"class":956},[946,3991,1201],{"class":960},[946,3993,1083],{"class":1082},[946,3995,2099],{"class":1844},[946,3997,920],{"class":956},[946,3999,1237],{"class":960},[946,4001,1272],{"class":956},[946,4003,4004],{"class":948,"line":1111},[946,4005,1278],{"class":956},[936,4007,4008],{"className":938,"code":2112,"filename":1282,"language":941,"meta":942,"style":942},[879,4009,4010,4028,4032,4058,4080,4098],{"__ignoreMap":942},[946,4011,4012,4014,4016,4018,4020,4022,4024,4026],{"class":948,"line":949},[946,4013,953],{"class":952},[946,4015,957],{"class":956},[946,4017,891],{"class":960},[946,4019,964],{"class":956},[946,4021,967],{"class":952},[946,4023,971],{"class":970},[946,4025,1327],{"class":974},[946,4027,978],{"class":970},[946,4029,4030],{"class":948,"line":981},[946,4031,1014],{"emptyLinePlaceholder":8},[946,4033,4034,4036,4038,4040,4042,4044,4046,4048,4050,4052,4054,4056],{"class":948,"line":1011},[946,4035,1020],{"class":952},[946,4037,2038],{"class":1033},[946,4039,2041],{"class":1059},[946,4041,1064],{"class":1063},[946,4043,2046],{"class":1026},[946,4045,1030],{"class":956},[946,4047,1034],{"class":1033},[946,4049,1037],{"class":956},[946,4051,1041],{"class":1040},[946,4053,1044],{"class":956},[946,4055,1047],{"class":1033},[946,4057,1050],{"class":956},[946,4059,4060,4062,4064,4066,4068,4070,4072,4074,4076,4078],{"class":948,"line":1017},[946,4061,1056],{"class":1033},[946,4063,957],{"class":956},[946,4065,2069],{"class":1059},[946,4067,920],{"class":956},[946,4069,1237],{"class":1059},[946,4071,964],{"class":956},[946,4073,2078],{"class":1063},[946,4075,2081],{"class":960},[946,4077,1198],{"class":956},[946,4079,2086],{"class":960},[946,4081,4082,4084,4086,4088,4090,4092,4094,4096],{"class":948,"line":1053},[946,4083,1256],{"class":952},[946,4085,957],{"class":956},[946,4087,1201],{"class":960},[946,4089,1083],{"class":1082},[946,4091,2099],{"class":1844},[946,4093,920],{"class":956},[946,4095,1237],{"class":960},[946,4097,1272],{"class":956},[946,4099,4100],{"class":948,"line":1111},[946,4101,1278],{"class":956},[936,4103,4104],{"className":938,"code":2209,"filename":2210,"language":941,"meta":942,"style":942},[879,4105,4106,4128,4150,4168],{"__ignoreMap":942},[946,4107,4108,4110,4112,4114,4116,4118,4120,4122,4124,4126],{"class":948,"line":949},[946,4109,1020],{"class":952},[946,4111,1023],{"class":952},[946,4113,2046],{"class":1026},[946,4115,1030],{"class":956},[946,4117,1034],{"class":1033},[946,4119,1037],{"class":956},[946,4121,1041],{"class":1040},[946,4123,1044],{"class":956},[946,4125,1047],{"class":1033},[946,4127,1050],{"class":956},[946,4129,4130,4132,4134,4136,4138,4140,4142,4144,4146,4148],{"class":948,"line":981},[946,4131,1056],{"class":1033},[946,4133,957],{"class":956},[946,4135,2069],{"class":1059},[946,4137,920],{"class":956},[946,4139,1237],{"class":1059},[946,4141,964],{"class":956},[946,4143,2078],{"class":1063},[946,4145,2081],{"class":960},[946,4147,1198],{"class":956},[946,4149,2086],{"class":960},[946,4151,4152,4154,4156,4158,4160,4162,4164,4166],{"class":948,"line":1011},[946,4153,1256],{"class":952},[946,4155,957],{"class":956},[946,4157,1201],{"class":960},[946,4159,1083],{"class":1082},[946,4161,2099],{"class":1844},[946,4163,920],{"class":956},[946,4165,1237],{"class":960},[946,4167,1272],{"class":956},[946,4169,4170],{"class":948,"line":1017},[946,4171,1278],{"class":956},[848,4173,2281],{},[868,4175,4176,4178,4186,4198,4202],{},[871,4177,2286],{},[871,4179,2289,4180,920,4182,1792,4184,2296],{},[879,4181,919],{},[879,4183,923],{},[879,4185,926],{},[871,4187,2299,4188,920,4190,920,4192,920,4194,2310,4196,1198],{},[879,4189,2302],{},[879,4191,2305],{},[879,4193,1174],{},[879,4195,1237],{},[879,4197,2313],{},[871,4199,1804,4200,2319],{},[879,4201,2318],{},[871,4203,2322,4204,1821,4206,2329],{},[879,4205,2325],{},[879,4207,2328],{},[2331,4209,4210],{},[848,4211,2335,4212,2339],{},[879,4213,2338],{},[857,4215],{},[860,4217,2345],{"id":2344},[848,4219,2348,4220,2351],{},[879,4221,900],{},[933,4223,4224,4344,4460],{},[936,4225,4226],{"className":938,"code":2356,"filename":940,"language":941,"meta":942,"style":942},[879,4227,4228,4246,4250,4276,4280,4298,4314,4340],{"__ignoreMap":942},[946,4229,4230,4232,4234,4236,4238,4240,4242,4244],{"class":948,"line":949},[946,4231,953],{"class":952},[946,4233,957],{"class":956},[946,4235,900],{"class":960},[946,4237,964],{"class":956},[946,4239,967],{"class":952},[946,4241,971],{"class":970},[946,4243,1006],{"class":974},[946,4245,978],{"class":970},[946,4247,4248],{"class":948,"line":981},[946,4249,1014],{"emptyLinePlaceholder":8},[946,4251,4252,4254,4256,4258,4260,4262,4264,4266,4268,4270,4272,4274],{"class":948,"line":1011},[946,4253,1020],{"class":952},[946,4255,2038],{"class":1033},[946,4257,2389],{"class":1059},[946,4259,1064],{"class":1063},[946,4261,2394],{"class":1026},[946,4263,1030],{"class":956},[946,4265,1034],{"class":1033},[946,4267,1037],{"class":956},[946,4269,1041],{"class":1040},[946,4271,1044],{"class":956},[946,4273,1047],{"class":1033},[946,4275,1050],{"class":956},[946,4277,4278],{"class":948,"line":1017},[946,4279,2414],{"class":2413},[946,4281,4282,4284,4286,4288,4290,4292,4294,4296],{"class":948,"line":1053},[946,4283,1056],{"class":1033},[946,4285,957],{"class":956},[946,4287,2423],{"class":1059},[946,4289,964],{"class":956},[946,4291,2078],{"class":1063},[946,4293,2081],{"class":960},[946,4295,1198],{"class":956},[946,4297,2086],{"class":960},[946,4299,4300,4302,4304,4306,4308,4310,4312],{"class":948,"line":1111},[946,4301,2438],{"class":952},[946,4303,2441],{"class":1026},[946,4305,1030],{"class":956},[946,4307,2423],{"class":960},[946,4309,1198],{"class":956},[946,4311,2450],{"class":960},[946,4313,1130],{"class":956},[946,4315,4316,4318,4320,4322,4324,4326,4328,4330,4332,4334,4336,4338],{"class":948,"line":1133},[946,4317,1256],{"class":952},[946,4319,957],{"class":956},[946,4321,1201],{"class":960},[946,4323,1083],{"class":1082},[946,4325,2099],{"class":1844},[946,4327,920],{"class":956},[946,4329,1228],{"class":960},[946,4331,1083],{"class":1082},[946,4333,971],{"class":970},[946,4335,2475],{"class":974},[946,4337,1091],{"class":970},[946,4339,1272],{"class":956},[946,4341,4342],{"class":948,"line":1138},[946,4343,1278],{"class":956},[936,4345,4346],{"className":938,"code":2486,"filename":1282,"language":941,"meta":942,"style":942},[879,4347,4348,4366,4370,4396,4414,4430,4456],{"__ignoreMap":942},[946,4349,4350,4352,4354,4356,4358,4360,4362,4364],{"class":948,"line":949},[946,4351,953],{"class":952},[946,4353,957],{"class":956},[946,4355,900],{"class":960},[946,4357,964],{"class":956},[946,4359,967],{"class":952},[946,4361,971],{"class":970},[946,4363,1327],{"class":974},[946,4365,978],{"class":970},[946,4367,4368],{"class":948,"line":981},[946,4369,1014],{"emptyLinePlaceholder":8},[946,4371,4372,4374,4376,4378,4380,4382,4384,4386,4388,4390,4392,4394],{"class":948,"line":1011},[946,4373,1020],{"class":952},[946,4375,2038],{"class":1033},[946,4377,2389],{"class":1059},[946,4379,1064],{"class":1063},[946,4381,2394],{"class":1026},[946,4383,1030],{"class":956},[946,4385,1034],{"class":1033},[946,4387,1037],{"class":956},[946,4389,1041],{"class":1040},[946,4391,1044],{"class":956},[946,4393,1047],{"class":1033},[946,4395,1050],{"class":956},[946,4397,4398,4400,4402,4404,4406,4408,4410,4412],{"class":948,"line":1017},[946,4399,1056],{"class":1033},[946,4401,957],{"class":956},[946,4403,2423],{"class":1059},[946,4405,964],{"class":956},[946,4407,2078],{"class":1063},[946,4409,2081],{"class":960},[946,4411,1198],{"class":956},[946,4413,2086],{"class":960},[946,4415,4416,4418,4420,4422,4424,4426,4428],{"class":948,"line":1053},[946,4417,2438],{"class":952},[946,4419,2441],{"class":1026},[946,4421,1030],{"class":956},[946,4423,2423],{"class":960},[946,4425,1198],{"class":956},[946,4427,2450],{"class":960},[946,4429,1130],{"class":956},[946,4431,4432,4434,4436,4438,4440,4442,4444,4446,4448,4450,4452,4454],{"class":948,"line":1111},[946,4433,1256],{"class":952},[946,4435,957],{"class":956},[946,4437,1201],{"class":960},[946,4439,1083],{"class":1082},[946,4441,2099],{"class":1844},[946,4443,920],{"class":956},[946,4445,1228],{"class":960},[946,4447,1083],{"class":1082},[946,4449,971],{"class":970},[946,4451,2475],{"class":974},[946,4453,1091],{"class":970},[946,4455,1272],{"class":956},[946,4457,4458],{"class":948,"line":1133},[946,4459,1278],{"class":956},[936,4461,4462],{"className":938,"code":2603,"filename":2604,"language":941,"meta":942,"style":942},[879,4463,4464,4486,4504,4520,4546],{"__ignoreMap":942},[946,4465,4466,4468,4470,4472,4474,4476,4478,4480,4482,4484],{"class":948,"line":949},[946,4467,1020],{"class":952},[946,4469,1023],{"class":952},[946,4471,2394],{"class":1026},[946,4473,1030],{"class":956},[946,4475,1034],{"class":1033},[946,4477,1037],{"class":956},[946,4479,1041],{"class":1040},[946,4481,1044],{"class":956},[946,4483,1047],{"class":1033},[946,4485,1050],{"class":956},[946,4487,4488,4490,4492,4494,4496,4498,4500,4502],{"class":948,"line":981},[946,4489,1056],{"class":1033},[946,4491,957],{"class":956},[946,4493,2423],{"class":1059},[946,4495,964],{"class":956},[946,4497,2078],{"class":1063},[946,4499,2081],{"class":960},[946,4501,1198],{"class":956},[946,4503,2086],{"class":960},[946,4505,4506,4508,4510,4512,4514,4516,4518],{"class":948,"line":1011},[946,4507,2438],{"class":952},[946,4509,2441],{"class":1026},[946,4511,1030],{"class":956},[946,4513,2423],{"class":960},[946,4515,1198],{"class":956},[946,4517,2450],{"class":960},[946,4519,1130],{"class":956},[946,4521,4522,4524,4526,4528,4530,4532,4534,4536,4538,4540,4542,4544],{"class":948,"line":1017},[946,4523,1256],{"class":952},[946,4525,957],{"class":956},[946,4527,1201],{"class":960},[946,4529,1083],{"class":1082},[946,4531,2099],{"class":1844},[946,4533,920],{"class":956},[946,4535,1228],{"class":960},[946,4537,1083],{"class":1082},[946,4539,971],{"class":970},[946,4541,2475],{"class":974},[946,4543,1091],{"class":970},[946,4545,1272],{"class":956},[946,4547,4548],{"class":948,"line":1053},[946,4549,1278],{"class":956},[848,4551,2281],{},[868,4553,4554,4558,4560,4562,4568,4572,4576,4580,4586],{},[871,4555,2699,4556,2703],{},[879,4557,2702],{},[871,4559,2706],{},[871,4561,2709],{},[871,4563,2712,4564,1821,4566,2717],{},[879,4565,919],{},[879,4567,923],{},[871,4569,2720,4570,1198],{},[879,4571,2313],{},[871,4573,2712,4574,2728],{},[879,4575,2727],{},[871,4577,1804,4578,2734],{},[879,4579,2733],{},[871,4581,2737,4582,2742,4584,1198],{},[852,4583,2741],{"href":2740},[879,4585,2745],{},[871,4587,2748],{},[1773,4589,2752],{"id":2751},[848,4591,2755],{},[936,4593,4594],{"className":2758,"code":2759,"language":2760,"meta":942,"style":942},[879,4595,4596,4602,4610,4618,4622],{"__ignoreMap":942},[946,4597,4598,4600],{"class":948,"line":949},[946,4599,2767],{"class":952},[946,4601,2770],{"class":956},[946,4603,4604,4606,4608],{"class":948,"line":981},[946,4605,2776],{"class":2775},[946,4607,1083],{"class":1033},[946,4609,2781],{"class":974},[946,4611,4612,4614,4616],{"class":948,"line":1011},[946,4613,2786],{"class":2775},[946,4615,1083],{"class":1033},[946,4617,2791],{"class":974},[946,4619,4620],{"class":948,"line":1017},[946,4621,1014],{"emptyLinePlaceholder":8},[946,4623,4624,4626,4628,4630,4632,4634,4636,4638,4640],{"class":948,"line":1053},[946,4625,2800],{"class":956},[946,4627,2804],{"class":2803},[946,4629,879],{"class":2807},[946,4631,2804],{"class":2803},[946,4633,1083],{"class":1063},[946,4635,2814],{"class":970},[946,4637,2817],{"class":974},[946,4639,2804],{"class":970},[946,4641,1272],{"class":956},[857,4643],{},[860,4645,2827],{"id":2826},[848,4647,2830],{},[2832,4649,4650,4654,4658],{},[871,4651,4652],{},[879,4653,2838],{},[871,4655,4656],{},[879,4657,2843],{},[871,4659,4660],{},[879,4661,2848],{},[848,4663,2851],{},[857,4665],{},[860,4667,2857],{"id":2856},[848,4669,1761,4670,2862,4672,2866,4674,2869],{},[879,4671,156],{},[879,4673,2865],{},[879,4675,1237],{},[936,4677,4678],{"className":938,"code":2872,"language":941,"meta":942,"style":942},[879,4679,4680,4684,4688],{"__ignoreMap":942},[946,4681,4682],{"class":948,"line":949},[946,4683,2879],{"class":2413},[946,4685,4686],{"class":948,"line":981},[946,4687,2884],{"class":2413},[946,4689,4690,4692,4694,4696,4698,4700,4702,4704,4706,4708],{"class":948,"line":1011},[946,4691,2889],{"class":1033},[946,4693,2892],{"class":1059},[946,4695,1064],{"class":1063},[946,4697,1148],{"class":952},[946,4699,2899],{"class":1026},[946,4701,1030],{"class":956},[946,4703,1091],{"class":970},[946,4705,2906],{"class":974},[946,4707,1091],{"class":970},[946,4709,1130],{"class":956},[848,4711,2913,4712,920,4714,920,4716,1792,4718,2922],{},[879,4713,2305],{},[879,4715,1174],{},[879,4717,1237],{},[879,4719,2302],{},[848,4721,2925,4722,2929],{},[879,4723,2928],{},[848,4725,2932,4726,2935],{},[852,4727,142],{"href":143},[2937,4729,2939],{},{"title":942,"searchDepth":981,"depth":981,"links":4731},[4732,4733,4737,4738,4741,4742],{"id":862,"depth":981,"text":863},{"id":909,"depth":981,"text":910,"children":4734},[4735,4736],{"id":1775,"depth":1011,"text":2946},{"id":1827,"depth":1011,"text":1828},{"id":1995,"depth":981,"text":1996},{"id":2344,"depth":981,"text":2345,"children":4739},[4740],{"id":2751,"depth":1011,"text":2752},{"id":2826,"depth":981,"text":2827},{"id":2856,"depth":981,"text":2857},{},{"title":138,"description":2954},1780436291883]