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