[{"data":1,"prerenderedAt":7521},["ShallowReactive",2],{"navLinks":3,"sidebar_docs_navigation_\u002Fdocs\u002Fauth-h3client":64,"navigation":217,"navLinks_footer":829,"\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Futilities_page":842,"\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Futilities_surround":4564,"\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Futilities":4566},{"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":214,"body":844,"description":4557,"extension":4558,"icon":47,"meta":4559,"module":4560,"navigation":8,"path":215,"rawbody":4561,"seo":4562,"stem":216,"__hash__":4563},"docs\u002Fdocs\u002Fauth-h3client\u002F07.api\u002F03.utilities.md",{"type":845,"value":846,"toc":4490},"minimark",[847,864,867,872,879,886,1002,1008,1045,1047,1053,1066,1124,1127,1129,1133,1139,1146,1191,1193,1199,1206,1316,1325,1327,1333,1343,1345,1351,1365,1367,1373,1395,1447,1452,1496,1498,1504,1566,1568,1572,1578,1593,1747,1763,1765,1771,1774,1776,1782,1785,1791,1827,1829,1835,1848,1850,1852,1858,1861,1863,1869,1880,1882,1888,1894,1896,1906,1909,1911,1917,1920,1922,1926,1932,1938,1940,1946,1962,1964,1970,1977,1979,1985,1995,1997,2003,2033,2035,2041,2052,2054,2060,2067,2069,2073,2079,2089,2096,2098,2104,2111,2238,2240,2246,2256,2258,2264,2270,2272,2278,2284,2286,2290,2296,2317,2319,2323,2329,2332,2488,2490,2496,2499,2568,2570,2576,2579,2581,2587,2598,2600,2606,2616,2618,2624,2630,2632,2638,2645,2647,2653,2674,2676,2680,2692,2698,2708,2824,2830,2833,2948,2967,2971,2974,3276,3284,3288,3300,4054,4078,4084,4094,4189,4195,4201,4261,4267,4273,4411,4417,4425,4486],[848,849,850,851,855,856,859,860,863],"p",{},"All utilities are exported from ",[852,853,854],"code",{},"auth-h3client\u002Fv1"," and ",[852,857,858],{},"auth-h3client\u002Fv2",". When using the Nuxt module, they are auto-imported inside the ",[852,861,862],{},"server\u002F"," directory.",[865,866],"hr",{},[868,869,871],"h2",{"id":870},"configuration-access","Configuration access",[873,874,876],"h3",{"id":875},"configurationconfig",[852,877,878],{},"configuration(config)",[848,880,881,882,885],{},"Validates the provided configuration object against the internal Zod schema, freezes it with ",[852,883,884],{},"Object.freeze",", and stores it as the module-level singleton. Must be called exactly once at startup before any middleware or handler runs. Throws a formatted validation error if the schema check fails.",[887,888,893],"pre",{"className":889,"code":890,"language":891,"meta":892,"style":892},"language-ts shiki shiki-themes light-plus light-plus dracula","import { configuration } from 'auth-h3client\u002Fv2'\n\nconfiguration({\n  server: { auth_location: 'https:\u002F\u002Fiam.example.com' },\n  logLevel: 'info',\n  \u002F\u002F ...\n})\n","ts","",[852,894,895,928,934,943,971,989,996],{"__ignoreMap":892},[896,897,900,904,908,912,915,918,922,925],"span",{"class":898,"line":899},"line",1,[896,901,903],{"class":902},"sZ328","import",[896,905,907],{"class":906},"sDd4n"," { ",[896,909,911],{"class":910},"sjsA6","configuration",[896,913,914],{"class":906}," } ",[896,916,917],{"class":902},"from",[896,919,921],{"class":920},"sFkSl"," '",[896,923,858],{"class":924},"sFB1V",[896,926,927],{"class":920},"'\n",[896,929,931],{"class":898,"line":930},2,[896,932,933],{"emptyLinePlaceholder":8},"\n",[896,935,937,940],{"class":898,"line":936},3,[896,938,911],{"class":939},"sHOzp",[896,941,942],{"class":906},"({\n",[896,944,946,949,953,955,958,960,962,965,968],{"class":898,"line":945},4,[896,947,948],{"class":910},"  server",[896,950,952],{"class":951},"s34zl",":",[896,954,907],{"class":906},[896,956,957],{"class":910},"auth_location",[896,959,952],{"class":951},[896,961,921],{"class":920},[896,963,964],{"class":924},"https:\u002F\u002Fiam.example.com",[896,966,967],{"class":920},"'",[896,969,970],{"class":906}," },\n",[896,972,974,977,979,981,984,986],{"class":898,"line":973},5,[896,975,976],{"class":910},"  logLevel",[896,978,952],{"class":951},[896,980,921],{"class":920},[896,982,983],{"class":924},"info",[896,985,967],{"class":920},[896,987,988],{"class":906},",\n",[896,990,992],{"class":898,"line":991},6,[896,993,995],{"class":994},"sghk6","  \u002F\u002F ...\n",[896,997,999],{"class":898,"line":998},7,[896,1000,1001],{"class":906},"})\n",[848,1003,1004],{},[1005,1006,1007],"strong",{},"Parameters",[1009,1010,1011,1027],"table",{},[1012,1013,1014],"thead",{},[1015,1016,1017,1021,1024],"tr",{},[1018,1019,1020],"th",{},"Parameter",[1018,1022,1023],{},"Type",[1018,1025,1026],{},"Description",[1028,1029,1030],"tbody",{},[1015,1031,1032,1038,1042],{},[1033,1034,1035],"td",{},[852,1036,1037],{},"config",[1033,1039,1040],{},[852,1041,192],{},[1033,1043,1044],{},"The full configuration object. Validated against a Zod schema before being frozen",[865,1046],{},[873,1048,1050],{"id":1049},"getconfiguration",[852,1051,1052],{},"getConfiguration()",[848,1054,1055,1056,1058,1059,1062,1063,1065],{},"Returns the active ",[852,1057,192],{}," object that was passed to ",[852,1060,1061],{},"configuration(...)"," at startup. The object is frozen, so its values cannot be mutated at runtime. Throws if called before ",[852,1064,1061],{}," has run.",[887,1067,1069],{"className":889,"code":1068,"language":891,"meta":892,"style":892},"import { getConfiguration } from 'auth-h3client\u002Fv2'\n\nconst { server, enableFireWallBans } = getConfiguration()\n",[852,1070,1071,1090,1094],{"__ignoreMap":892},[896,1072,1073,1075,1077,1080,1082,1084,1086,1088],{"class":898,"line":899},[896,1074,903],{"class":902},[896,1076,907],{"class":906},[896,1078,1079],{"class":910},"getConfiguration",[896,1081,914],{"class":906},[896,1083,917],{"class":902},[896,1085,921],{"class":920},[896,1087,858],{"class":924},[896,1089,927],{"class":920},[896,1091,1092],{"class":898,"line":930},[896,1093,933],{"emptyLinePlaceholder":8},[896,1095,1096,1100,1102,1106,1109,1112,1114,1118,1121],{"class":898,"line":936},[896,1097,1099],{"class":1098},"sl46w","const",[896,1101,907],{"class":906},[896,1103,1105],{"class":1104},"s3JHE","server",[896,1107,1108],{"class":906},", ",[896,1110,1111],{"class":1104},"enableFireWallBans",[896,1113,914],{"class":906},[896,1115,1117],{"class":1116},"saOXh","=",[896,1119,1120],{"class":939}," getConfiguration",[896,1122,1123],{"class":906},"()\n",[848,1125,1126],{},"Use this inside custom handlers or middleware when you need direct access to configuration values such as the IAM server address, HMAC settings, or feature flags.",[865,1128],{},[868,1130,1132],{"id":1131},"token-and-session","Token and session",[873,1134,1136],{"id":1135},"getaccesstokenmetadataevent",[852,1137,1138],{},"getAccessTokenMetaData(event)",[848,1140,1141,1142,1145],{},"Reads the ",[852,1143,1144],{},"__Secure-a"," access token from the request cookies, checks the local LRU metadata cache, and returns expiry and rotation state without calling the IAM service. Falls back to a rotation call if the cache misses.",[887,1147,1149],{"className":889,"code":1148,"language":891,"meta":892,"style":892},"const meta = await getAccessTokenMetaData(event)\n\u002F\u002F meta.msUntilExp: ms until expiry\n\u002F\u002F meta.shouldRotate: true when threshold is reached\n\u002F\u002F meta.authorized: false when token is invalid\n",[852,1150,1151,1176,1181,1186],{"__ignoreMap":892},[896,1152,1153,1155,1158,1161,1164,1167,1170,1173],{"class":898,"line":899},[896,1154,1099],{"class":1098},[896,1156,1157],{"class":1104}," meta",[896,1159,1160],{"class":1116}," =",[896,1162,1163],{"class":902}," await",[896,1165,1166],{"class":939}," getAccessTokenMetaData",[896,1168,1169],{"class":906},"(",[896,1171,1172],{"class":910},"event",[896,1174,1175],{"class":906},")\n",[896,1177,1178],{"class":898,"line":930},[896,1179,1180],{"class":994},"\u002F\u002F meta.msUntilExp: ms until expiry\n",[896,1182,1183],{"class":898,"line":936},[896,1184,1185],{"class":994},"\u002F\u002F meta.shouldRotate: true when threshold is reached\n",[896,1187,1188],{"class":898,"line":945},[896,1189,1190],{"class":994},"\u002F\u002F meta.authorized: false when token is invalid\n",[865,1192],{},[873,1194,1196],{"id":1195},"getcacheduserdataevent-cookies-token-storage-cacheoptions",[852,1197,1198],{},"getCachedUserData(event, cookies, token, storage, cacheOptions?)",[848,1200,1201,1202,1205],{},"Calls the IAM ",[852,1203,1204],{},"\u002Fsecret\u002Fdata"," endpoint and caches the result using a SHA-256 hash of the session identifiers as the key. Returns cached data on subsequent calls within the TTL.",[887,1207,1209],{"className":889,"code":1208,"language":891,"meta":892,"style":892},"const result = await getCachedUserData(event, cookies, token, storage)\n\nif (result.type === 'SUCCESS') {\n  const { userId, roles } = result.data\n}\n\u002F\u002F result.type === 'ERROR' with reason: 'UNAUTHORIZED' | 'MFA' | 'RATE_LIMIT' | 'SERVER_ERROR' | ...\n",[852,1210,1211,1246,1250,1280,1306,1311],{"__ignoreMap":892},[896,1212,1213,1215,1218,1220,1222,1225,1227,1229,1231,1234,1236,1239,1241,1244],{"class":898,"line":899},[896,1214,1099],{"class":1098},[896,1216,1217],{"class":1104}," result",[896,1219,1160],{"class":1116},[896,1221,1163],{"class":902},[896,1223,1224],{"class":939}," getCachedUserData",[896,1226,1169],{"class":906},[896,1228,1172],{"class":910},[896,1230,1108],{"class":906},[896,1232,1233],{"class":910},"cookies",[896,1235,1108],{"class":906},[896,1237,1238],{"class":910},"token",[896,1240,1108],{"class":906},[896,1242,1243],{"class":910},"storage",[896,1245,1175],{"class":906},[896,1247,1248],{"class":898,"line":930},[896,1249,933],{"emptyLinePlaceholder":8},[896,1251,1252,1255,1258,1261,1264,1267,1270,1272,1275,1277],{"class":898,"line":936},[896,1253,1254],{"class":902},"if",[896,1256,1257],{"class":906}," (",[896,1259,1260],{"class":910},"result",[896,1262,1263],{"class":906},".",[896,1265,1266],{"class":910},"type",[896,1268,1269],{"class":1116}," ===",[896,1271,921],{"class":920},[896,1273,1274],{"class":924},"SUCCESS",[896,1276,967],{"class":920},[896,1278,1279],{"class":906},") {\n",[896,1281,1282,1285,1287,1290,1292,1295,1297,1299,1301,1303],{"class":898,"line":945},[896,1283,1284],{"class":1098},"  const",[896,1286,907],{"class":906},[896,1288,1289],{"class":1104},"userId",[896,1291,1108],{"class":906},[896,1293,1294],{"class":1104},"roles",[896,1296,914],{"class":906},[896,1298,1117],{"class":1116},[896,1300,1217],{"class":910},[896,1302,1263],{"class":906},[896,1304,1305],{"class":910},"data\n",[896,1307,1308],{"class":898,"line":973},[896,1309,1310],{"class":906},"}\n",[896,1312,1313],{"class":898,"line":991},[896,1314,1315],{"class":994},"\u002F\u002F result.type === 'ERROR' with reason: 'UNAUTHORIZED' | 'MFA' | 'RATE_LIMIT' | 'SERVER_ERROR' | ...\n",[848,1317,1318,1319,855,1322,1263],{},"Called automatically by ",[852,1320,1321],{},"defineAuthenticatedEventHandler",[852,1323,1324],{},"defineOptionalAuthenticationEvent",[865,1326],{},[873,1328,1330],{"id":1329},"getoperationalconfigevent",[852,1331,1332],{},"getOperationalConfig(event)",[848,1334,1335,1336,855,1339,1342],{},"Fetches and caches shared settings from the IAM service: ",[852,1337,1338],{},"domain",[852,1340,1341],{},"accessTokenTTL",". The result is cached for the lifetime of the process.",[865,1344],{},[873,1346,1348],{"id":1347},"applyrotationresultevent-result-domain-accesstokenttl",[852,1349,1350],{},"applyRotationResult(event, result, domain, accessTokenTTL)",[848,1352,1353,1354,1108,1357,1360,1361,1364],{},"Writes the cookies from a token rotation result to the response. Handles the ",[852,1355,1356],{},"both",[852,1358,1359],{},"access-only",", and ",[852,1362,1363],{},"refresh-only"," rotation types.",[865,1366],{},[873,1368,1370],{"id":1369},"getauthstatushandler",[852,1371,1372],{},"getAuthStatusHandler",[848,1374,1375,1376,1378,1379,1382,1383,1386,1387,1390,1391,1394],{},"A pre-built ",[852,1377,1321],{}," that returns the current session\ndata from ",[852,1380,1381],{},"event.context.authorizedData",". In manual H3 and Nitro setups, a\ncommon route is ",[852,1384,1385],{},"GET \u002Fauth\u002Fusers\u002FauthStatus",". Under the Nuxt module, the same\nhandler is registered automatically at ",[852,1388,1389],{},"authStatusUrl",", whose default value is\n",[852,1392,1393],{},"\u002Fapi\u002Fauth\u002Fusers\u002FauthStatus",". The handler is also exported for direct use in\ncustom setups.",[887,1396,1398],{"className":889,"code":1397,"language":891,"meta":892,"style":892},"import { getAuthStatusHandler } from 'auth-h3client\u002Fv2'\n\nrouter.get('\u002Fauth\u002Fusers\u002FauthStatus', getAuthStatusHandler)\n",[852,1399,1400,1418,1422],{"__ignoreMap":892},[896,1401,1402,1404,1406,1408,1410,1412,1414,1416],{"class":898,"line":899},[896,1403,903],{"class":902},[896,1405,907],{"class":906},[896,1407,1372],{"class":910},[896,1409,914],{"class":906},[896,1411,917],{"class":902},[896,1413,921],{"class":920},[896,1415,858],{"class":924},[896,1417,927],{"class":920},[896,1419,1420],{"class":898,"line":930},[896,1421,933],{"emptyLinePlaceholder":8},[896,1423,1424,1427,1429,1432,1434,1436,1439,1441,1443,1445],{"class":898,"line":936},[896,1425,1426],{"class":910},"router",[896,1428,1263],{"class":906},[896,1430,1431],{"class":939},"get",[896,1433,1169],{"class":906},[896,1435,967],{"class":920},[896,1437,1438],{"class":924},"\u002Fauth\u002Fusers\u002FauthStatus",[896,1440,967],{"class":920},[896,1442,1108],{"class":906},[896,1444,1372],{"class":910},[896,1446,1175],{"class":906},[848,1448,1449],{},[1005,1450,1451],{},"Responses",[1009,1453,1454,1464],{},[1012,1455,1456],{},[1015,1457,1458,1461],{},[1018,1459,1460],{},"Status",[1018,1462,1463],{},"Meaning",[1028,1465,1466,1476,1486],{},[1015,1467,1468,1473],{},[1033,1469,1470],{},[852,1471,1472],{},"200",[1033,1474,1475],{},"Returns the authorized user data",[1015,1477,1478,1483],{},[1033,1479,1480],{},[852,1481,1482],{},"400",[1033,1484,1485],{},"User ID invalid after conversion",[1015,1487,1488,1493],{},[1033,1489,1490],{},[852,1491,1492],{},"401",[1033,1494,1495],{},"Not authenticated",[865,1497],{},[873,1499,1501],{"id":1500},"askformfaflowevent-log-reason-random-accesstoken",[852,1502,1503],{},"askForMfaFlow(event, log, reason, random, accessToken?)",[848,1505,1506,1507,1510,1511,1514,1515,1518,1519,1522,1523,1526,1527,1108,1530,1108,1533,1108,1536,1108,1539,1108,1542,1108,1545,1108,1548,1108,1551,1554,1555,1558,1559,1561,1562,1565],{},"Requests a step-up MFA email from the IAM service for an authenticated user. ",[852,1508,1509],{},"random"," must be a ",[852,1512,1513],{},"Buffer"," whose hex representation is 254 to 500 characters, ",[852,1516,1517],{},"reason"," must be 100 characters or shorter, and the request is deduplicated per ",[852,1520,1521],{},"canary_id + reason",". Returns ",[852,1524,1525],{},"{ ok: true, data: 'Please check your email...' }"," on success, or a structured error (",[852,1528,1529],{},"INVALID_CREDENTIALS",[852,1531,1532],{},"MFA_REQUIRED",[852,1534,1535],{},"FORBIDDEN",[852,1537,1538],{},"RATE_LIMIT",[852,1540,1541],{},"HASH",[852,1543,1544],{},"REASON",[852,1546,1547],{},"AUTH_REJECTED",[852,1549,1550],{},"AUTH_SERVER_ERROR",[852,1552,1553],{},"UNEXPECTED_ERROR",") on failure. Never throws. When ",[852,1556,1557],{},"accessToken"," is omitted, the token is read from the ",[852,1560,1144],{}," cookie. See ",[1563,1564,138],"a",{"href":139}," for the complete pattern.",[865,1567],{},[868,1569,1571],{"id":1570},"server-to-server","Server-to-server",[873,1573,1575],{"id":1574},"servicetoservicekeepalive-endpoint-method-event-body-cookies-data-token-apitoken",[852,1576,1577],{},"serviceToService(keepAlive, endpoint, method, event, body, cookies?, data?, token?, apiToken?)",[848,1579,1580,1581,1584,1585,1588,1589,1592],{},"Makes an authenticated request from the gateway to the IAM service. Applies\nHMAC signing headers when ",[852,1582,1583],{},"enableHmac"," is ",[852,1586,1587],{},"true",", forwards cookies and bearer\ntokens when provided, can forward an API token as ",[852,1590,1591],{},"X-API-KEY",", and uses the\nconfigured Undici agent for connection pooling and optional mTLS.",[1009,1594,1595,1605],{},[1012,1596,1597],{},[1015,1598,1599,1601,1603],{},[1018,1600,1020],{},[1018,1602,1023],{},[1018,1604,1026],{},[1028,1606,1607,1622,1640,1654,1668,1682,1696,1715,1731],{},[1015,1608,1609,1614,1619],{},[1033,1610,1611],{},[852,1612,1613],{},"keepAlive",[1033,1615,1616],{},[852,1617,1618],{},"boolean",[1033,1620,1621],{},"Whether to keep the connection alive",[1015,1623,1624,1629,1634],{},[1033,1625,1626],{},[852,1627,1628],{},"endpoint",[1033,1630,1631],{},[852,1632,1633],{},"string",[1033,1635,1636,1637],{},"IAM service path, e.g. ",[852,1638,1639],{},"\u002Fauth\u002Flogin",[1015,1641,1642,1647,1651],{},[1033,1643,1644],{},[852,1645,1646],{},"method",[1033,1648,1649],{},[852,1650,1633],{},[1033,1652,1653],{},"HTTP method",[1015,1655,1656,1660,1665],{},[1033,1657,1658],{},[852,1659,1172],{},[1033,1661,1662],{},[852,1663,1664],{},"H3Event",[1033,1666,1667],{},"Current request event for header extraction",[1015,1669,1670,1675,1679],{},[1033,1671,1672],{},[852,1673,1674],{},"body",[1033,1676,1677],{},[852,1678,1618],{},[1033,1680,1681],{},"Whether to include the request body",[1015,1683,1684,1688,1693],{},[1033,1685,1686],{},[852,1687,1233],{},[1033,1689,1690],{},[852,1691,1692],{},"Cookies[]",[1033,1694,1695],{},"Cookies to forward to the IAM service",[1015,1697,1698,1703,1708],{},[1033,1699,1700],{},[852,1701,1702],{},"data",[1033,1704,1705],{},[852,1706,1707],{},"object",[1033,1709,1710,1711,1584,1713],{},"Request body data when ",[852,1712,1674],{},[852,1714,1587],{},[1015,1716,1717,1721,1725],{},[1033,1718,1719],{},[852,1720,1238],{},[1033,1722,1723],{},[852,1724,1633],{},[1033,1726,1727,1728],{},"Access token to include as ",[852,1729,1730],{},"Authorization: Bearer",[1015,1732,1733,1738,1742],{},[1033,1734,1735],{},[852,1736,1737],{},"apiToken",[1033,1739,1740],{},[852,1741,1633],{},[1033,1743,1744,1745],{},"API token to include as ",[852,1746,1591],{},[848,1748,1749,1752,1753,1755,1756,1758,1759,1762],{},[852,1750,1751],{},"defineAuthenticatePublicApi"," uses the ",[852,1754,1737],{}," parameter to forward the\nincoming ",[852,1757,1591],{}," header to IAM ",[852,1760,1761],{},"\u002Fapi\u002Fpublic\u002Fverify"," without converting it\ninto session cookies or a bearer token.",[865,1764],{},[873,1766,1768],{"id":1767},"clientheadersevent",[852,1769,1770],{},"clientHeaders(event)",[848,1772,1773],{},"Extracts headers from the incoming request to forward to the IAM service.",[865,1775],{},[873,1777,1779],{"id":1778},"signaturemethod-path",[852,1780,1781],{},"signature(method, path)",[848,1783,1784],{},"Generates HMAC-SHA256 signature headers for a request to the IAM service.",[848,1786,1787,1788],{},"Returns: ",[852,1789,1790],{},"{ 'X-Client-Id', 'X-Timestamp', 'X-Request-Id', 'X-Signature' }",[887,1792,1794],{"className":889,"code":1793,"language":891,"meta":892,"style":892},"const headers = signature('POST', '\u002Fauth\u002Flogin')\n",[852,1795,1796],{"__ignoreMap":892},[896,1797,1798,1800,1803,1805,1808,1810,1812,1815,1817,1819,1821,1823,1825],{"class":898,"line":899},[896,1799,1099],{"class":1098},[896,1801,1802],{"class":1104}," headers",[896,1804,1160],{"class":1116},[896,1806,1807],{"class":939}," signature",[896,1809,1169],{"class":906},[896,1811,967],{"class":920},[896,1813,1814],{"class":924},"POST",[896,1816,967],{"class":920},[896,1818,1108],{"class":906},[896,1820,967],{"class":920},[896,1822,1639],{"class":924},[896,1824,967],{"class":920},[896,1826,1175],{"class":906},[865,1828],{},[873,1830,1832],{"id":1831},"getauthagentbotdetector-ssl",[852,1833,1834],{},"getAuthAgent(botDetector, ssl?)",[848,1836,1837,1838,1841,1842,1584,1845,1847],{},"Creates an Undici ",[852,1839,1840],{},"Agent"," configured with optional mTLS certificates and connection pool settings. When ",[852,1843,1844],{},"botDetector",[852,1846,1587],{},", the agent uses a high-concurrency pool tuned for polling.",[865,1849],{},[868,1851,112],{"id":1233},[873,1853,1855],{"id":1854},"makecookieevent-name-value-options",[852,1856,1857],{},"makeCookie(event, name, value, options)",[848,1859,1860],{},"Sets an HTTP cookie on the response with typed options.",[865,1862],{},[873,1864,1866],{"id":1865},"createsignedvalueraw-ttlms-keyword",[852,1867,1868],{},"createSignedValue(raw, ttlMs, keyword)",[848,1870,1871,1872,1875,1876,1879],{},"Creates a signed cookie string in the format ",[852,1873,1874],{},"base64(value).base64(keyword).expiry.hmac",". The ",[852,1877,1878],{},"keyword"," binds the signature to a specific context.",[865,1881],{},[873,1883,1885],{"id":1884},"verifysignedvaluecookie-keyword",[852,1886,1887],{},"verifySignedValue(cookie, keyword)",[848,1889,1890,1891,1263],{},"Parses and verifies a signed cookie. Returns ",[852,1892,1893],{},"{ valid: boolean, payload: { value, exp } | null }",[865,1895],{},[873,1897,1899,1902,1903],{"id":1898},"tob64data-fromb64b64",[852,1900,1901],{},"toB64(data)"," \u002F ",[852,1904,1905],{},"fromB64(b64)",[848,1907,1908],{},"Base64url encoding and decoding utilities.",[865,1910],{},[873,1912,1914],{"id":1913},"issamebuffera-b",[852,1915,1916],{},"isSameBuffer(a, b)",[848,1918,1919],{},"Timing-safe HMAC comparison of two strings. Use for any secret or signature comparison to prevent timing side-channel attacks.",[865,1921],{},[868,1923,1925],{"id":1924},"oauth-helpers","OAuth helpers",[873,1927,1929],{"id":1928},"makepkcepair",[852,1930,1931],{},"makePkcePair()",[848,1933,1934,1935,1263],{},"Generates a PKCE verifier and challenge pair. Returns ",[852,1936,1937],{},"{ verifier: string, challenge: string }",[865,1939],{},[873,1941,1943],{"id":1942},"discoveroidcissuer-log",[852,1944,1945],{},"discoverOidc(issuer, log)",[848,1947,1948,1949,1952,1953,1108,1956,1360,1959,1263],{},"Fetches the OIDC discovery document from ",[852,1950,1951],{},"{issuer}\u002F.well-known\u002Fopenid-configuration",". Returns the parsed metadata object including ",[852,1954,1955],{},"authorization_endpoint",[852,1957,1958],{},"token_endpoint",[852,1960,1961],{},"jwks_uri",[865,1963],{},[873,1965,1967],{"id":1966},"verifyoauthtokenidtoken-jwksuri-issuer-clientid",[852,1968,1969],{},"verifyOAuthToken(idToken, jwksUri, issuer, clientId)",[848,1971,1972,1973,1976],{},"Verifies an OIDC ID token signature against the provider's JWKS endpoint. Returns the decoded ",[852,1974,1975],{},"OidcIdTokenPayload"," on success.",[865,1978],{},[873,1980,1982],{"id":1981},"athashcheckathash-accesstoken-idtoken",[852,1983,1984],{},"atHashCheck(atHash, accessToken, idToken)",[848,1986,1987,1988,1991,1992,1994],{},"Verifies the ",[852,1989,1990],{},"at_hash"," claim in an OIDC ID token against the access token. Returns ",[852,1993,1587],{}," if the hash matches.",[865,1996],{},[873,1998,2000],{"id":1999},"safeobjectmergetarget-src-opts-extrareserved",[852,2001,2002],{},"safeObjectMerge(target, src, opts?, extraReserved?)",[848,2004,2005,2006,2009,2010,2013,2014,1108,2017,1108,2020,1108,2023,1108,2026,1108,2029,2032],{},"Merges ",[852,2007,2008],{},"src"," into ",[852,2011,2012],{},"target"," while protecting reserved fields from being overridden. Reserved fields include ",[852,2015,2016],{},"sub",[852,2018,2019],{},"email",[852,2021,2022],{},"iss",[852,2024,2025],{},"aud",[852,2027,2028],{},"iat",[852,2030,2031],{},"exp",", and all JWT claims. Use this when merging OAuth user info with existing user data.",[865,2034],{},[873,2036,2038],{"id":2037},"getsafeurlurlstring",[852,2039,2040],{},"getSafeUrl(urlString)",[848,2042,2043,2044,2047,2048,2051],{},"Parses and validates a redirect URL string. Returns a ",[852,2045,2046],{},"URL"," object if valid, or ",[852,2049,2050],{},"false"," if the input is not a valid URL.",[865,2053],{},[873,2055,2057],{"id":2056},"saferedirectevent-url",[852,2058,2059],{},"safeRedirect(event, url)",[848,2061,2062,2063,2066],{},"Validates a redirect URL with ",[852,2064,2065],{},"getSafeUrl"," and redirects the response. Throws HTTP 400 if the URL is not valid.",[865,2068],{},[868,2070,2072],{"id":2071},"validation-and-sanitization","Validation and sanitization",[873,2074,2076],{"id":2075},"sanitizeinputstringinput",[852,2077,2078],{},"sanitizeInputString(input)",[848,2080,2081,2082,2085,2086,1263],{},"Runs the full HTML sanitization pipeline on a string: unicode normalization, iterative URI and entity decoding, pattern detection, ",[852,2083,2084],{},"sanitize-html"," pass, and entity encoding. Returns ",[852,2087,2088],{},"{ vall: string, results: { htmlFound: boolean, tags? } }",[848,2090,2091,2092,2095],{},"See ",[1563,2093,2094],{"href":460},"IAM XSS Protection"," for the full pipeline description.",[865,2097],{},[873,2099,2101],{"id":2100},"makesafestringopts",[852,2102,2103],{},"makeSafeString(opts)",[848,2105,2106,2107,2110],{},"Returns a Zod string schema that validates length and an optional regex constraint, then applies ",[852,2108,2109],{},"sanitizeInputString"," as a transform. Use this in Zod schemas for any user-supplied string fields.",[887,2112,2114],{"className":889,"code":2113,"language":891,"meta":892,"style":892},"const schema = z.object({\n  name: makeSafeString({ min: 1, max: 100 }),\n  bio: makeSafeString({ min: 0, max: 500, pattern: \u002F^[\\w\\s]+$\u002F })\n})\n",[852,2115,2116,2134,2169,2234],{"__ignoreMap":892},[896,2117,2118,2120,2123,2125,2128,2130,2132],{"class":898,"line":899},[896,2119,1099],{"class":1098},[896,2121,2122],{"class":1104}," schema",[896,2124,1160],{"class":1116},[896,2126,2127],{"class":910}," z",[896,2129,1263],{"class":906},[896,2131,1707],{"class":939},[896,2133,942],{"class":906},[896,2135,2136,2139,2141,2144,2147,2150,2152,2156,2158,2161,2163,2166],{"class":898,"line":930},[896,2137,2138],{"class":910},"  name",[896,2140,952],{"class":951},[896,2142,2143],{"class":939}," makeSafeString",[896,2145,2146],{"class":906},"({ ",[896,2148,2149],{"class":910},"min",[896,2151,952],{"class":951},[896,2153,2155],{"class":2154},"spgvN"," 1",[896,2157,1108],{"class":906},[896,2159,2160],{"class":910},"max",[896,2162,952],{"class":951},[896,2164,2165],{"class":2154}," 100",[896,2167,2168],{"class":906}," }),\n",[896,2170,2171,2174,2176,2178,2180,2182,2184,2187,2189,2191,2193,2196,2198,2201,2203,2207,2211,2215,2219,2222,2225,2228,2231],{"class":898,"line":936},[896,2172,2173],{"class":910},"  bio",[896,2175,952],{"class":951},[896,2177,2143],{"class":939},[896,2179,2146],{"class":906},[896,2181,2149],{"class":910},[896,2183,952],{"class":951},[896,2185,2186],{"class":2154}," 0",[896,2188,1108],{"class":906},[896,2190,2160],{"class":910},[896,2192,952],{"class":951},[896,2194,2195],{"class":2154}," 500",[896,2197,1108],{"class":906},[896,2199,2200],{"class":910},"pattern",[896,2202,952],{"class":951},[896,2204,2206],{"class":2205},"sRg35"," \u002F",[896,2208,2210],{"class":2209},"st6lo","^",[896,2212,2214],{"class":2213},"sODv-","[",[896,2216,2218],{"class":2217},"s58tv","\\w\\s",[896,2220,2221],{"class":2213},"]",[896,2223,2224],{"class":1116},"+",[896,2226,2227],{"class":2209},"$",[896,2229,2230],{"class":2205},"\u002F",[896,2232,2233],{"class":906}," })\n",[896,2235,2236],{"class":898,"line":945},[896,2237,1001],{"class":906},[865,2239],{},[873,2241,2243],{"id":2242},"validatezodschemaschema-data-log",[852,2244,2245],{},"validateZodSchema(schema, data, log)",[848,2247,2248,2249,2251,2252,2255],{},"Parses ",[852,2250,1702],{}," against a Zod schema. Returns the parsed data on success or ",[852,2253,2254],{},"{ valid: false, errors: Record\u003Cstring, string> }"," on failure.",[865,2257],{},[873,2259,2261],{"id":2260},"validateuserpasswordpassword",[852,2262,2263],{},"validateUserPassword(password)",[848,2265,2266,2267,2269],{},"Returns ",[852,2268,1587],{}," if the password meets the minimum policy: 12+ characters with at least one uppercase letter, one lowercase letter, one digit, and one special character.",[865,2271],{},[873,2273,2275],{"id":2274},"sanitizebasenameinput-max",[852,2276,2277],{},"sanitizeBaseName(input, max)",[848,2279,2280,2281,2283],{},"Strips unsafe characters from a filename and truncates to ",[852,2282,2160],{}," characters. Use before deriving a storage key from a user-supplied filename.",[865,2285],{},[868,2287,2289],{"id":2288},"image-upload","Image upload",[873,2291,2293],{"id":2292},"validateimagedata-filename",[852,2294,2295],{},"validateImage(data, filename)",[848,2297,2298,2299,2301,2302,2305,2306,2309,2310,2313,2314,2316],{},"Validates a ",[852,2300,1513],{}," against the ",[852,2303,2304],{},"imageUploader"," configuration limits, detects the MIME type from magic bytes, converts to WebP via sharp, and returns ",[852,2307,2308],{},"{ ok: true, body, key, mime }"," or ",[852,2311,2312],{},"{ ok: false, date, reason }",". See ",[1563,2315,184],{"href":185}," for full details.",[865,2318],{},[868,2320,2322],{"id":2321},"general-utilities","General utilities",[873,2324,2326],{"id":2325},"minicachet",[852,2327,2328],{},"MiniCache\u003CT>",[848,2330,2331],{},"In-memory TTL cache with a configurable capacity and sweep interval.",[887,2333,2335],{"className":889,"code":2334,"language":891,"meta":892,"style":892},"const cache = new MiniCache\u003Cstring>(1000, 60_000) \u002F\u002F 1000 entries, sweep every minute\n\ncache.set('key', 'value', 5 * 60 * 1000) \u002F\u002F 5-minute TTL\nconst val = cache.get('key')  \u002F\u002F null if expired\ncache.del('key')\ncache.clear()\n",[852,2336,2337,2376,2380,2429,2458,2477],{"__ignoreMap":892},[896,2338,2339,2341,2344,2346,2350,2353,2356,2359,2362,2365,2367,2370,2373],{"class":898,"line":899},[896,2340,1099],{"class":1098},[896,2342,2343],{"class":1104}," cache",[896,2345,1160],{"class":1116},[896,2347,2349],{"class":2348},"sakC6"," new",[896,2351,2352],{"class":939}," MiniCache",[896,2354,2355],{"class":906},"\u003C",[896,2357,1633],{"class":2358},"sFs1U",[896,2360,2361],{"class":906},">(",[896,2363,2364],{"class":2154},"1000",[896,2366,1108],{"class":906},[896,2368,2369],{"class":2154},"60_000",[896,2371,2372],{"class":906},") ",[896,2374,2375],{"class":994},"\u002F\u002F 1000 entries, sweep every minute\n",[896,2377,2378],{"class":898,"line":930},[896,2379,933],{"emptyLinePlaceholder":8},[896,2381,2382,2385,2387,2390,2392,2394,2397,2399,2401,2403,2406,2408,2410,2413,2416,2419,2421,2424,2426],{"class":898,"line":936},[896,2383,2384],{"class":910},"cache",[896,2386,1263],{"class":906},[896,2388,2389],{"class":939},"set",[896,2391,1169],{"class":906},[896,2393,967],{"class":920},[896,2395,2396],{"class":924},"key",[896,2398,967],{"class":920},[896,2400,1108],{"class":906},[896,2402,967],{"class":920},[896,2404,2405],{"class":924},"value",[896,2407,967],{"class":920},[896,2409,1108],{"class":906},[896,2411,2412],{"class":2154},"5",[896,2414,2415],{"class":1116}," *",[896,2417,2418],{"class":2154}," 60",[896,2420,2415],{"class":1116},[896,2422,2423],{"class":2154}," 1000",[896,2425,2372],{"class":906},[896,2427,2428],{"class":994},"\u002F\u002F 5-minute TTL\n",[896,2430,2431,2433,2436,2438,2440,2442,2444,2446,2448,2450,2452,2455],{"class":898,"line":945},[896,2432,1099],{"class":1098},[896,2434,2435],{"class":1104}," val",[896,2437,1160],{"class":1116},[896,2439,2343],{"class":910},[896,2441,1263],{"class":906},[896,2443,1431],{"class":939},[896,2445,1169],{"class":906},[896,2447,967],{"class":920},[896,2449,2396],{"class":924},[896,2451,967],{"class":920},[896,2453,2454],{"class":906},")  ",[896,2456,2457],{"class":994},"\u002F\u002F null if expired\n",[896,2459,2460,2462,2464,2467,2469,2471,2473,2475],{"class":898,"line":973},[896,2461,2384],{"class":910},[896,2463,1263],{"class":906},[896,2465,2466],{"class":939},"del",[896,2468,1169],{"class":906},[896,2470,967],{"class":920},[896,2472,2396],{"class":924},[896,2474,967],{"class":920},[896,2476,1175],{"class":906},[896,2478,2479,2481,2483,2486],{"class":898,"line":991},[896,2480,2384],{"class":910},[896,2482,1263],{"class":906},[896,2484,2485],{"class":939},"clear",[896,2487,1123],{"class":906},[865,2489],{},[873,2491,2493],{"id":2492},"lockasyncactionkey-fn-ttl",[852,2494,2495],{},"lockAsyncAction(key, fn, ttl?)",[848,2497,2498],{},"Deduplicates async operations by key. If a call with the same key is already in progress, the second caller waits for the first result. Results are cached briefly (default 5 seconds) to handle concurrent requests that arrive after completion.",[887,2500,2502],{"className":889,"code":2501,"language":891,"meta":892,"style":892},"const data = await lockAsyncAction(`user:${userId}`, async () => {\n  return await fetchExpensiveData(userId)\n})\n",[852,2503,2504,2548,2564],{"__ignoreMap":892},[896,2505,2506,2508,2511,2513,2515,2518,2520,2523,2526,2528,2531,2534,2536,2539,2542,2545],{"class":898,"line":899},[896,2507,1099],{"class":1098},[896,2509,2510],{"class":1104}," data",[896,2512,1160],{"class":1116},[896,2514,1163],{"class":902},[896,2516,2517],{"class":939}," lockAsyncAction",[896,2519,1169],{"class":906},[896,2521,2522],{"class":924},"`user:",[896,2524,2525],{"class":1098},"${",[896,2527,1289],{"class":910},[896,2529,2530],{"class":1098},"}",[896,2532,2533],{"class":924},"`",[896,2535,1108],{"class":906},[896,2537,2538],{"class":1098},"async",[896,2540,2541],{"class":906}," () ",[896,2543,2544],{"class":1098},"=>",[896,2546,2547],{"class":906}," {\n",[896,2549,2550,2553,2555,2558,2560,2562],{"class":898,"line":930},[896,2551,2552],{"class":902},"  return",[896,2554,1163],{"class":902},[896,2556,2557],{"class":939}," fetchExpensiveData",[896,2559,1169],{"class":906},[896,2561,1289],{"class":910},[896,2563,1175],{"class":906},[896,2565,2566],{"class":898,"line":936},[896,2567,1001],{"class":906},[865,2569],{},[873,2571,2573],{"id":2572},"getlogger",[852,2574,2575],{},"getLogger()",[848,2577,2578],{},"Returns the pino logger instance used by the module. Use it to write structured log entries from custom handlers.",[865,2580],{},[873,2582,2584],{"id":2583},"parseresponsecontenttypelog-response",[852,2585,2586],{},"parseResponseContentType(log, response)",[848,2588,2589,2590,2593,2594,2597],{},"Reads and parses an HTTP ",[852,2591,2592],{},"Response"," body as JSON or text depending on the ",[852,2595,2596],{},"Content-Type"," header.",[865,2599],{},[873,2601,2603],{"id":2602},"getbaseurlcfg",[852,2604,2605],{},"getBaseUrl(cfg)",[848,2607,2608,2609,2612,2613,2615],{},"Builds the base URL for the IAM service from the ",[852,2610,2611],{},"server.auth_location"," configuration. Returns a ",[852,2614,2046],{}," object.",[865,2617],{},[873,2619,2621],{"id":2620},"findstringsinobjectinput-visited-searchterms",[852,2622,2623],{},"findStringsInObject(input, visited?, searchTerms)",[848,2625,2626,2627,1263],{},"Recursively searches an object for a key-value pair. Returns the matching value string or ",[852,2628,2629],{},"null",[865,2631],{},[873,2633,2635],{"id":2634},"banipip",[852,2636,2637],{},"banIp(ip)",[848,2639,2640,2641,2644],{},"Executes ",[852,2642,2643],{},"sudo ufw insert 1 deny from \u003Cip> to any"," to block an IP at the firewall level. Only available on Linux with UFW installed.",[865,2646],{},[873,2648,2650],{"id":2649},"checkforbotscookies-event-method-log-enablefirewallbans-canary",[852,2651,2652],{},"checkForBots(cookies, event, method, log, enableFireWallBans, canary?)",[848,2654,2655,2656,2659,2660,2663,2664,2667,2668,2313,2671,2673],{},"Low-level helper that calls the IAM ",[852,2657,2658],{},"\u002Fcheck"," endpoint with an explicit signed cookie and visitor context. Throws HTTP 403 when the IAM service flags the visitor, and HTTP 502 when the IAM service is unreachable. On success, sets the ",[852,2661,2662],{},"__Host-dr_i_n"," cookie on the response and stores the tracking result in ",[852,2665,2666],{},"event.context.trackingResult",". Used internally by ",[852,2669,2670],{},"botDetectorMiddleware",[1563,2672,33],{"href":109}," for the full usage pattern.",[865,2675],{},[868,2677,2679],{"id":2678},"typescript-types","TypeScript types",[848,2681,2682,2683,855,2685,2687,2688,2691],{},"The following types are exported from ",[852,2684,854],{},[852,2686,858],{}," (and re-exported from ",[852,2689,2690],{},"auth-h3client\u002Fclient"," for browser use).",[873,2693,2695],{"id":2694},"serverresponse",[852,2696,2697],{},"ServerResponse",[848,2699,2700,2701,2703,2704,855,2706,1263],{},"The shape of ",[852,2702,1381],{}," set by ",[852,2705,1321],{},[852,2707,1324],{},[887,2709,2711],{"className":889,"code":2710,"language":891,"meta":892,"style":892},"interface ServerResponse {\n  authorized: boolean\n  userId?: string\n  roles?: string[] | string\n  ipAddress: string\n  userAgent: string\n  date: string\n  reason?: string\n  error?: string\n  message?: string\n}\n",[852,2712,2713,2723,2733,2744,2762,2771,2780,2789,2799,2809,2819],{"__ignoreMap":892},[896,2714,2715,2718,2721],{"class":898,"line":899},[896,2716,2717],{"class":1098},"interface",[896,2719,2720],{"class":2358}," ServerResponse",[896,2722,2547],{"class":906},[896,2724,2725,2728,2730],{"class":898,"line":930},[896,2726,2727],{"class":910},"  authorized",[896,2729,952],{"class":1116},[896,2731,2732],{"class":2358}," boolean\n",[896,2734,2735,2738,2741],{"class":898,"line":936},[896,2736,2737],{"class":910},"  userId",[896,2739,2740],{"class":1116},"?:",[896,2742,2743],{"class":2358}," string\n",[896,2745,2746,2749,2751,2754,2757,2760],{"class":898,"line":945},[896,2747,2748],{"class":910},"  roles",[896,2750,2740],{"class":1116},[896,2752,2753],{"class":2358}," string",[896,2755,2756],{"class":906},"[] ",[896,2758,2759],{"class":1116},"|",[896,2761,2743],{"class":2358},[896,2763,2764,2767,2769],{"class":898,"line":973},[896,2765,2766],{"class":910},"  ipAddress",[896,2768,952],{"class":1116},[896,2770,2743],{"class":2358},[896,2772,2773,2776,2778],{"class":898,"line":991},[896,2774,2775],{"class":910},"  userAgent",[896,2777,952],{"class":1116},[896,2779,2743],{"class":2358},[896,2781,2782,2785,2787],{"class":898,"line":998},[896,2783,2784],{"class":910},"  date",[896,2786,952],{"class":1116},[896,2788,2743],{"class":2358},[896,2790,2792,2795,2797],{"class":898,"line":2791},8,[896,2793,2794],{"class":910},"  reason",[896,2796,2740],{"class":1116},[896,2798,2743],{"class":2358},[896,2800,2802,2805,2807],{"class":898,"line":2801},9,[896,2803,2804],{"class":910},"  error",[896,2806,2740],{"class":1116},[896,2808,2743],{"class":2358},[896,2810,2812,2815,2817],{"class":898,"line":2811},10,[896,2813,2814],{"class":910},"  message",[896,2816,2740],{"class":1116},[896,2818,2743],{"class":2358},[896,2820,2822],{"class":898,"line":2821},11,[896,2823,1310],{"class":906},[873,2825,2827],{"id":2826},"limitedmetadata",[852,2828,2829],{},"LimitedMetaData",[848,2831,2832],{},"The shape returned by the IAM service after a successful code verification and token rotation.",[887,2834,2836],{"className":889,"code":2835,"language":891,"meta":892,"style":892},"interface LimitedMetaData {\n  authorized: true\n  userId: number | string\n  visitorId: number | string\n  roles: string[] | 'No roles added with this token.'\n  ipAddress: string\n  userAgent: string\n  date: string\n  accessToken: string\n  accessIat: string\n}\n",[852,2837,2838,2847,2856,2870,2883,2902,2910,2918,2926,2935,2944],{"__ignoreMap":892},[896,2839,2840,2842,2845],{"class":898,"line":899},[896,2841,2717],{"class":1098},[896,2843,2844],{"class":2358}," LimitedMetaData",[896,2846,2547],{"class":906},[896,2848,2849,2851,2853],{"class":898,"line":930},[896,2850,2727],{"class":910},[896,2852,952],{"class":1116},[896,2854,2855],{"class":2358}," true\n",[896,2857,2858,2860,2862,2865,2868],{"class":898,"line":936},[896,2859,2737],{"class":910},[896,2861,952],{"class":1116},[896,2863,2864],{"class":2358}," number",[896,2866,2867],{"class":1116}," |",[896,2869,2743],{"class":2358},[896,2871,2872,2875,2877,2879,2881],{"class":898,"line":945},[896,2873,2874],{"class":910},"  visitorId",[896,2876,952],{"class":1116},[896,2878,2864],{"class":2358},[896,2880,2867],{"class":1116},[896,2882,2743],{"class":2358},[896,2884,2885,2887,2889,2891,2893,2895,2897,2900],{"class":898,"line":973},[896,2886,2748],{"class":910},[896,2888,952],{"class":1116},[896,2890,2753],{"class":2358},[896,2892,2756],{"class":906},[896,2894,2759],{"class":1116},[896,2896,921],{"class":920},[896,2898,2899],{"class":924},"No roles added with this token.",[896,2901,927],{"class":920},[896,2903,2904,2906,2908],{"class":898,"line":991},[896,2905,2766],{"class":910},[896,2907,952],{"class":1116},[896,2909,2743],{"class":2358},[896,2911,2912,2914,2916],{"class":898,"line":998},[896,2913,2775],{"class":910},[896,2915,952],{"class":1116},[896,2917,2743],{"class":2358},[896,2919,2920,2922,2924],{"class":898,"line":2791},[896,2921,2784],{"class":910},[896,2923,952],{"class":1116},[896,2925,2743],{"class":2358},[896,2927,2928,2931,2933],{"class":898,"line":2801},[896,2929,2930],{"class":910},"  accessToken",[896,2932,952],{"class":1116},[896,2934,2743],{"class":2358},[896,2936,2937,2940,2942],{"class":898,"line":2811},[896,2938,2939],{"class":910},"  accessIat",[896,2941,952],{"class":1116},[896,2943,2743],{"class":2358},[896,2945,2946],{"class":898,"line":2821},[896,2947,1310],{"class":906},[2949,2950,2951],"note",{},[848,2952,2953,2956,2957,855,2959,2962,2963,2966],{},[852,2954,2955],{},"defineMfaCodeVerifierHandler"," destructures ",[852,2958,1557],{},[852,2960,2961],{},"accessIat"," from the response and applies them to the response cookies via token rotation. The value set on ",[852,2964,2965],{},"event.context.limitedMetaData"," inside your handler does not include these two fields.",[873,2968,2970],{"id":2969},"api-token-wrapper-types","API token wrapper types",[848,2972,2973],{},"The API token wrappers export a small set of helper types inferred from the\nshared Zod schemas. Use them when you want your custom handlers to mirror the\nsame action names and request bodies as the built-in wrappers.",[887,2975,2977],{"className":889,"code":2976,"language":891,"meta":892,"style":892},"type Privilege = 'custom' | 'demo' | 'restricted' | 'protected' | 'full'\n\ntype ParamsTypes = {\n  action:\n    | 'new-token'\n    | 'revoke'\n    | 'metadata'\n    | 'rotate'\n    | 'ip-restriction-update'\n    | 'privilege-update'\n    | 'list-metadata'\n}\n\ntype NewTokens = {\n  name: string\n  ipv4?: string[]\n  prefix: string\n  expires?: number\n}\n\ntype NewIpRestriction = {\n  ipv4?: string[]\n  tokenId: number\n}\n\ntype TokenId = {\n  tokenId: number\n}\n",[852,2978,2979,3031,3035,3046,3054,3066,3077,3088,3099,3110,3121,3132,3137,3142,3154,3163,3176,3186,3197,3202,3207,3219,3230,3240,3245,3250,3262,3271],{"__ignoreMap":892},[896,2980,2981,2983,2986,2988,2990,2993,2995,2997,2999,3002,3004,3006,3008,3011,3013,3015,3017,3020,3022,3024,3026,3029],{"class":898,"line":899},[896,2982,1266],{"class":1098},[896,2984,2985],{"class":2358}," Privilege",[896,2987,1160],{"class":1116},[896,2989,921],{"class":920},[896,2991,2992],{"class":924},"custom",[896,2994,967],{"class":920},[896,2996,2867],{"class":1116},[896,2998,921],{"class":920},[896,3000,3001],{"class":924},"demo",[896,3003,967],{"class":920},[896,3005,2867],{"class":1116},[896,3007,921],{"class":920},[896,3009,3010],{"class":924},"restricted",[896,3012,967],{"class":920},[896,3014,2867],{"class":1116},[896,3016,921],{"class":920},[896,3018,3019],{"class":924},"protected",[896,3021,967],{"class":920},[896,3023,2867],{"class":1116},[896,3025,921],{"class":920},[896,3027,3028],{"class":924},"full",[896,3030,927],{"class":920},[896,3032,3033],{"class":898,"line":930},[896,3034,933],{"emptyLinePlaceholder":8},[896,3036,3037,3039,3042,3044],{"class":898,"line":936},[896,3038,1266],{"class":1098},[896,3040,3041],{"class":2358}," ParamsTypes",[896,3043,1160],{"class":1116},[896,3045,2547],{"class":906},[896,3047,3048,3051],{"class":898,"line":945},[896,3049,3050],{"class":910},"  action",[896,3052,3053],{"class":1116},":\n",[896,3055,3056,3059,3061,3064],{"class":898,"line":973},[896,3057,3058],{"class":1116},"    |",[896,3060,921],{"class":920},[896,3062,3063],{"class":924},"new-token",[896,3065,927],{"class":920},[896,3067,3068,3070,3072,3075],{"class":898,"line":991},[896,3069,3058],{"class":1116},[896,3071,921],{"class":920},[896,3073,3074],{"class":924},"revoke",[896,3076,927],{"class":920},[896,3078,3079,3081,3083,3086],{"class":898,"line":998},[896,3080,3058],{"class":1116},[896,3082,921],{"class":920},[896,3084,3085],{"class":924},"metadata",[896,3087,927],{"class":920},[896,3089,3090,3092,3094,3097],{"class":898,"line":2791},[896,3091,3058],{"class":1116},[896,3093,921],{"class":920},[896,3095,3096],{"class":924},"rotate",[896,3098,927],{"class":920},[896,3100,3101,3103,3105,3108],{"class":898,"line":2801},[896,3102,3058],{"class":1116},[896,3104,921],{"class":920},[896,3106,3107],{"class":924},"ip-restriction-update",[896,3109,927],{"class":920},[896,3111,3112,3114,3116,3119],{"class":898,"line":2811},[896,3113,3058],{"class":1116},[896,3115,921],{"class":920},[896,3117,3118],{"class":924},"privilege-update",[896,3120,927],{"class":920},[896,3122,3123,3125,3127,3130],{"class":898,"line":2821},[896,3124,3058],{"class":1116},[896,3126,921],{"class":920},[896,3128,3129],{"class":924},"list-metadata",[896,3131,927],{"class":920},[896,3133,3135],{"class":898,"line":3134},12,[896,3136,1310],{"class":906},[896,3138,3140],{"class":898,"line":3139},13,[896,3141,933],{"emptyLinePlaceholder":8},[896,3143,3145,3147,3150,3152],{"class":898,"line":3144},14,[896,3146,1266],{"class":1098},[896,3148,3149],{"class":2358}," NewTokens",[896,3151,1160],{"class":1116},[896,3153,2547],{"class":906},[896,3155,3157,3159,3161],{"class":898,"line":3156},15,[896,3158,2138],{"class":910},[896,3160,952],{"class":1116},[896,3162,2743],{"class":2358},[896,3164,3166,3169,3171,3173],{"class":898,"line":3165},16,[896,3167,3168],{"class":910},"  ipv4",[896,3170,2740],{"class":1116},[896,3172,2753],{"class":2358},[896,3174,3175],{"class":906},"[]\n",[896,3177,3179,3182,3184],{"class":898,"line":3178},17,[896,3180,3181],{"class":910},"  prefix",[896,3183,952],{"class":1116},[896,3185,2743],{"class":2358},[896,3187,3189,3192,3194],{"class":898,"line":3188},18,[896,3190,3191],{"class":910},"  expires",[896,3193,2740],{"class":1116},[896,3195,3196],{"class":2358}," number\n",[896,3198,3200],{"class":898,"line":3199},19,[896,3201,1310],{"class":906},[896,3203,3205],{"class":898,"line":3204},20,[896,3206,933],{"emptyLinePlaceholder":8},[896,3208,3210,3212,3215,3217],{"class":898,"line":3209},21,[896,3211,1266],{"class":1098},[896,3213,3214],{"class":2358}," NewIpRestriction",[896,3216,1160],{"class":1116},[896,3218,2547],{"class":906},[896,3220,3222,3224,3226,3228],{"class":898,"line":3221},22,[896,3223,3168],{"class":910},[896,3225,2740],{"class":1116},[896,3227,2753],{"class":2358},[896,3229,3175],{"class":906},[896,3231,3233,3236,3238],{"class":898,"line":3232},23,[896,3234,3235],{"class":910},"  tokenId",[896,3237,952],{"class":1116},[896,3239,3196],{"class":2358},[896,3241,3243],{"class":898,"line":3242},24,[896,3244,1310],{"class":906},[896,3246,3248],{"class":898,"line":3247},25,[896,3249,933],{"emptyLinePlaceholder":8},[896,3251,3253,3255,3258,3260],{"class":898,"line":3252},26,[896,3254,1266],{"class":1098},[896,3256,3257],{"class":2358}," TokenId",[896,3259,1160],{"class":1116},[896,3261,2547],{"class":906},[896,3263,3265,3267,3269],{"class":898,"line":3264},27,[896,3266,3235],{"class":910},[896,3268,952],{"class":1116},[896,3270,3196],{"class":2358},[896,3272,3274],{"class":898,"line":3273},28,[896,3275,1310],{"class":906},[848,3277,3278,3279,855,3281,3283],{},"These types are exported from ",[852,3280,854],{},[852,3282,858],{}," via\nthe API token wrapper module.",[873,3285,3287],{"id":3286},"api-token-response-types","API token response types",[848,3289,3290,3291,1108,3294,3296,3297,1263],{},"The package also exports the response and metadata types used by\n",[852,3292,3293],{},"getApiListsController",[852,3295,1751],{},", and\n",[852,3298,3299],{},"defineApiManagementHandler",[887,3301,3303],{"className":889,"code":3302,"language":891,"meta":892,"style":892},"interface TokenMeta {\n  name?: string\n  tokenId?: number\n  userId?: number\n  createdAt?: string\n  expiresAt?: string\n  lastUsed?: string\n  usageCount?: number\n  providedPrivilege?: 'custom' | 'demo' | 'restricted' | 'protected' | 'full'\n}\n\ninterface SingleTokenMeta {\n  tokenMeta: TokenMeta\n  counts: {\n    totalInvalidTokens: number\n    totalValidTokens: number\n    total: number\n  }\n}\n\ninterface TokenList {\n  id: number\n  name: string\n  created_at: string\n  expires_at: string\n  restricted_to_ip_address: string[] | null\n  public_identifier: string\n  last_used: string\n  usage_count: number\n  privilege_type: 'demo' | 'restricted' | 'protected' | 'full' | 'custom'\n}\n\ninterface AllValidTokensList {\n  total: number\n  totalInvalidTokens: number\n  totalValidTokens: number\n  tokenList?: TokenList[]\n}\n\ninterface CreationSuccess {\n  rawApiKey: string | undefined\n  expiresAt: Date | null\n}\n\ninterface ApiTokenRotationSuccess {\n  msg: string\n  newRawToken: string | undefined\n  newExpiry: Date | null\n}\n\ninterface VerifySuccessResponse {\n  name: string\n  tokenId: number\n  userId: number\n  createdAt: string\n  expiresAt: string\n  lastUsed: string\n  usageCount: number\n  providedPrivilege: 'custom' | 'demo' | 'restricted' | 'protected' | 'full'\n}\n\ntype ActionManagerResult =\n  | Results\u003Cstring | { msg: string; invalidedTokenId: number; userId: number }>\n  | Results\u003CApiTokenRotationSuccess>\n  | Results\u003CSingleTokenMeta>\n  | Results\u003CCreationSuccess>\n  | Results\u003C{ msg: string }>\n",[852,3304,3305,3314,3322,3330,3338,3347,3356,3365,3374,3419,3423,3427,3436,3446,3455,3464,3473,3482,3487,3491,3495,3504,3513,3521,3530,3539,3555,3564,3573,3583,3629,3634,3639,3649,3659,3669,3679,3691,3696,3701,3711,3726,3740,3745,3750,3760,3770,3784,3798,3803,3808,3818,3827,3836,3845,3854,3863,3872,3881,3926,3931,3936,3947,3992,4008,4022,4036],{"__ignoreMap":892},[896,3306,3307,3309,3312],{"class":898,"line":899},[896,3308,2717],{"class":1098},[896,3310,3311],{"class":2358}," TokenMeta",[896,3313,2547],{"class":906},[896,3315,3316,3318,3320],{"class":898,"line":930},[896,3317,2138],{"class":910},[896,3319,2740],{"class":1116},[896,3321,2743],{"class":2358},[896,3323,3324,3326,3328],{"class":898,"line":936},[896,3325,3235],{"class":910},[896,3327,2740],{"class":1116},[896,3329,3196],{"class":2358},[896,3331,3332,3334,3336],{"class":898,"line":945},[896,3333,2737],{"class":910},[896,3335,2740],{"class":1116},[896,3337,3196],{"class":2358},[896,3339,3340,3343,3345],{"class":898,"line":973},[896,3341,3342],{"class":910},"  createdAt",[896,3344,2740],{"class":1116},[896,3346,2743],{"class":2358},[896,3348,3349,3352,3354],{"class":898,"line":991},[896,3350,3351],{"class":910},"  expiresAt",[896,3353,2740],{"class":1116},[896,3355,2743],{"class":2358},[896,3357,3358,3361,3363],{"class":898,"line":998},[896,3359,3360],{"class":910},"  lastUsed",[896,3362,2740],{"class":1116},[896,3364,2743],{"class":2358},[896,3366,3367,3370,3372],{"class":898,"line":2791},[896,3368,3369],{"class":910},"  usageCount",[896,3371,2740],{"class":1116},[896,3373,3196],{"class":2358},[896,3375,3376,3379,3381,3383,3385,3387,3389,3391,3393,3395,3397,3399,3401,3403,3405,3407,3409,3411,3413,3415,3417],{"class":898,"line":2801},[896,3377,3378],{"class":910},"  providedPrivilege",[896,3380,2740],{"class":1116},[896,3382,921],{"class":920},[896,3384,2992],{"class":924},[896,3386,967],{"class":920},[896,3388,2867],{"class":1116},[896,3390,921],{"class":920},[896,3392,3001],{"class":924},[896,3394,967],{"class":920},[896,3396,2867],{"class":1116},[896,3398,921],{"class":920},[896,3400,3010],{"class":924},[896,3402,967],{"class":920},[896,3404,2867],{"class":1116},[896,3406,921],{"class":920},[896,3408,3019],{"class":924},[896,3410,967],{"class":920},[896,3412,2867],{"class":1116},[896,3414,921],{"class":920},[896,3416,3028],{"class":924},[896,3418,927],{"class":920},[896,3420,3421],{"class":898,"line":2811},[896,3422,1310],{"class":906},[896,3424,3425],{"class":898,"line":2821},[896,3426,933],{"emptyLinePlaceholder":8},[896,3428,3429,3431,3434],{"class":898,"line":3134},[896,3430,2717],{"class":1098},[896,3432,3433],{"class":2358}," SingleTokenMeta",[896,3435,2547],{"class":906},[896,3437,3438,3441,3443],{"class":898,"line":3139},[896,3439,3440],{"class":910},"  tokenMeta",[896,3442,952],{"class":1116},[896,3444,3445],{"class":2358}," TokenMeta\n",[896,3447,3448,3451,3453],{"class":898,"line":3144},[896,3449,3450],{"class":910},"  counts",[896,3452,952],{"class":1116},[896,3454,2547],{"class":906},[896,3456,3457,3460,3462],{"class":898,"line":3156},[896,3458,3459],{"class":910},"    totalInvalidTokens",[896,3461,952],{"class":1116},[896,3463,3196],{"class":2358},[896,3465,3466,3469,3471],{"class":898,"line":3165},[896,3467,3468],{"class":910},"    totalValidTokens",[896,3470,952],{"class":1116},[896,3472,3196],{"class":2358},[896,3474,3475,3478,3480],{"class":898,"line":3178},[896,3476,3477],{"class":910},"    total",[896,3479,952],{"class":1116},[896,3481,3196],{"class":2358},[896,3483,3484],{"class":898,"line":3188},[896,3485,3486],{"class":906},"  }\n",[896,3488,3489],{"class":898,"line":3199},[896,3490,1310],{"class":906},[896,3492,3493],{"class":898,"line":3204},[896,3494,933],{"emptyLinePlaceholder":8},[896,3496,3497,3499,3502],{"class":898,"line":3209},[896,3498,2717],{"class":1098},[896,3500,3501],{"class":2358}," TokenList",[896,3503,2547],{"class":906},[896,3505,3506,3509,3511],{"class":898,"line":3221},[896,3507,3508],{"class":910},"  id",[896,3510,952],{"class":1116},[896,3512,3196],{"class":2358},[896,3514,3515,3517,3519],{"class":898,"line":3232},[896,3516,2138],{"class":910},[896,3518,952],{"class":1116},[896,3520,2743],{"class":2358},[896,3522,3523,3526,3528],{"class":898,"line":3242},[896,3524,3525],{"class":910},"  created_at",[896,3527,952],{"class":1116},[896,3529,2743],{"class":2358},[896,3531,3532,3535,3537],{"class":898,"line":3247},[896,3533,3534],{"class":910},"  expires_at",[896,3536,952],{"class":1116},[896,3538,2743],{"class":2358},[896,3540,3541,3544,3546,3548,3550,3552],{"class":898,"line":3252},[896,3542,3543],{"class":910},"  restricted_to_ip_address",[896,3545,952],{"class":1116},[896,3547,2753],{"class":2358},[896,3549,2756],{"class":906},[896,3551,2759],{"class":1116},[896,3553,3554],{"class":2358}," null\n",[896,3556,3557,3560,3562],{"class":898,"line":3264},[896,3558,3559],{"class":910},"  public_identifier",[896,3561,952],{"class":1116},[896,3563,2743],{"class":2358},[896,3565,3566,3569,3571],{"class":898,"line":3273},[896,3567,3568],{"class":910},"  last_used",[896,3570,952],{"class":1116},[896,3572,2743],{"class":2358},[896,3574,3576,3579,3581],{"class":898,"line":3575},29,[896,3577,3578],{"class":910},"  usage_count",[896,3580,952],{"class":1116},[896,3582,3196],{"class":2358},[896,3584,3586,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607,3609,3611,3613,3615,3617,3619,3621,3623,3625,3627],{"class":898,"line":3585},30,[896,3587,3588],{"class":910},"  privilege_type",[896,3590,952],{"class":1116},[896,3592,921],{"class":920},[896,3594,3001],{"class":924},[896,3596,967],{"class":920},[896,3598,2867],{"class":1116},[896,3600,921],{"class":920},[896,3602,3010],{"class":924},[896,3604,967],{"class":920},[896,3606,2867],{"class":1116},[896,3608,921],{"class":920},[896,3610,3019],{"class":924},[896,3612,967],{"class":920},[896,3614,2867],{"class":1116},[896,3616,921],{"class":920},[896,3618,3028],{"class":924},[896,3620,967],{"class":920},[896,3622,2867],{"class":1116},[896,3624,921],{"class":920},[896,3626,2992],{"class":924},[896,3628,927],{"class":920},[896,3630,3632],{"class":898,"line":3631},31,[896,3633,1310],{"class":906},[896,3635,3637],{"class":898,"line":3636},32,[896,3638,933],{"emptyLinePlaceholder":8},[896,3640,3642,3644,3647],{"class":898,"line":3641},33,[896,3643,2717],{"class":1098},[896,3645,3646],{"class":2358}," AllValidTokensList",[896,3648,2547],{"class":906},[896,3650,3652,3655,3657],{"class":898,"line":3651},34,[896,3653,3654],{"class":910},"  total",[896,3656,952],{"class":1116},[896,3658,3196],{"class":2358},[896,3660,3662,3665,3667],{"class":898,"line":3661},35,[896,3663,3664],{"class":910},"  totalInvalidTokens",[896,3666,952],{"class":1116},[896,3668,3196],{"class":2358},[896,3670,3672,3675,3677],{"class":898,"line":3671},36,[896,3673,3674],{"class":910},"  totalValidTokens",[896,3676,952],{"class":1116},[896,3678,3196],{"class":2358},[896,3680,3682,3685,3687,3689],{"class":898,"line":3681},37,[896,3683,3684],{"class":910},"  tokenList",[896,3686,2740],{"class":1116},[896,3688,3501],{"class":2358},[896,3690,3175],{"class":906},[896,3692,3694],{"class":898,"line":3693},38,[896,3695,1310],{"class":906},[896,3697,3699],{"class":898,"line":3698},39,[896,3700,933],{"emptyLinePlaceholder":8},[896,3702,3704,3706,3709],{"class":898,"line":3703},40,[896,3705,2717],{"class":1098},[896,3707,3708],{"class":2358}," CreationSuccess",[896,3710,2547],{"class":906},[896,3712,3714,3717,3719,3721,3723],{"class":898,"line":3713},41,[896,3715,3716],{"class":910},"  rawApiKey",[896,3718,952],{"class":1116},[896,3720,2753],{"class":2358},[896,3722,2867],{"class":1116},[896,3724,3725],{"class":2358}," undefined\n",[896,3727,3729,3731,3733,3736,3738],{"class":898,"line":3728},42,[896,3730,3351],{"class":910},[896,3732,952],{"class":1116},[896,3734,3735],{"class":2358}," Date",[896,3737,2867],{"class":1116},[896,3739,3554],{"class":2358},[896,3741,3743],{"class":898,"line":3742},43,[896,3744,1310],{"class":906},[896,3746,3748],{"class":898,"line":3747},44,[896,3749,933],{"emptyLinePlaceholder":8},[896,3751,3753,3755,3758],{"class":898,"line":3752},45,[896,3754,2717],{"class":1098},[896,3756,3757],{"class":2358}," ApiTokenRotationSuccess",[896,3759,2547],{"class":906},[896,3761,3763,3766,3768],{"class":898,"line":3762},46,[896,3764,3765],{"class":910},"  msg",[896,3767,952],{"class":1116},[896,3769,2743],{"class":2358},[896,3771,3773,3776,3778,3780,3782],{"class":898,"line":3772},47,[896,3774,3775],{"class":910},"  newRawToken",[896,3777,952],{"class":1116},[896,3779,2753],{"class":2358},[896,3781,2867],{"class":1116},[896,3783,3725],{"class":2358},[896,3785,3787,3790,3792,3794,3796],{"class":898,"line":3786},48,[896,3788,3789],{"class":910},"  newExpiry",[896,3791,952],{"class":1116},[896,3793,3735],{"class":2358},[896,3795,2867],{"class":1116},[896,3797,3554],{"class":2358},[896,3799,3801],{"class":898,"line":3800},49,[896,3802,1310],{"class":906},[896,3804,3806],{"class":898,"line":3805},50,[896,3807,933],{"emptyLinePlaceholder":8},[896,3809,3811,3813,3816],{"class":898,"line":3810},51,[896,3812,2717],{"class":1098},[896,3814,3815],{"class":2358}," VerifySuccessResponse",[896,3817,2547],{"class":906},[896,3819,3821,3823,3825],{"class":898,"line":3820},52,[896,3822,2138],{"class":910},[896,3824,952],{"class":1116},[896,3826,2743],{"class":2358},[896,3828,3830,3832,3834],{"class":898,"line":3829},53,[896,3831,3235],{"class":910},[896,3833,952],{"class":1116},[896,3835,3196],{"class":2358},[896,3837,3839,3841,3843],{"class":898,"line":3838},54,[896,3840,2737],{"class":910},[896,3842,952],{"class":1116},[896,3844,3196],{"class":2358},[896,3846,3848,3850,3852],{"class":898,"line":3847},55,[896,3849,3342],{"class":910},[896,3851,952],{"class":1116},[896,3853,2743],{"class":2358},[896,3855,3857,3859,3861],{"class":898,"line":3856},56,[896,3858,3351],{"class":910},[896,3860,952],{"class":1116},[896,3862,2743],{"class":2358},[896,3864,3866,3868,3870],{"class":898,"line":3865},57,[896,3867,3360],{"class":910},[896,3869,952],{"class":1116},[896,3871,2743],{"class":2358},[896,3873,3875,3877,3879],{"class":898,"line":3874},58,[896,3876,3369],{"class":910},[896,3878,952],{"class":1116},[896,3880,3196],{"class":2358},[896,3882,3884,3886,3888,3890,3892,3894,3896,3898,3900,3902,3904,3906,3908,3910,3912,3914,3916,3918,3920,3922,3924],{"class":898,"line":3883},59,[896,3885,3378],{"class":910},[896,3887,952],{"class":1116},[896,3889,921],{"class":920},[896,3891,2992],{"class":924},[896,3893,967],{"class":920},[896,3895,2867],{"class":1116},[896,3897,921],{"class":920},[896,3899,3001],{"class":924},[896,3901,967],{"class":920},[896,3903,2867],{"class":1116},[896,3905,921],{"class":920},[896,3907,3010],{"class":924},[896,3909,967],{"class":920},[896,3911,2867],{"class":1116},[896,3913,921],{"class":920},[896,3915,3019],{"class":924},[896,3917,967],{"class":920},[896,3919,2867],{"class":1116},[896,3921,921],{"class":920},[896,3923,3028],{"class":924},[896,3925,927],{"class":920},[896,3927,3929],{"class":898,"line":3928},60,[896,3930,1310],{"class":906},[896,3932,3934],{"class":898,"line":3933},61,[896,3935,933],{"emptyLinePlaceholder":8},[896,3937,3939,3941,3944],{"class":898,"line":3938},62,[896,3940,1266],{"class":1098},[896,3942,3943],{"class":2358}," ActionManagerResult",[896,3945,3946],{"class":1116}," =\n",[896,3948,3950,3953,3956,3958,3960,3962,3964,3967,3969,3971,3974,3977,3979,3981,3983,3985,3987,3989],{"class":898,"line":3949},63,[896,3951,3952],{"class":1116},"  |",[896,3954,3955],{"class":2358}," Results",[896,3957,2355],{"class":906},[896,3959,1633],{"class":2358},[896,3961,2867],{"class":1116},[896,3963,907],{"class":906},[896,3965,3966],{"class":910},"msg",[896,3968,952],{"class":1116},[896,3970,2753],{"class":2358},[896,3972,3973],{"class":906},"; ",[896,3975,3976],{"class":910},"invalidedTokenId",[896,3978,952],{"class":1116},[896,3980,2864],{"class":2358},[896,3982,3973],{"class":906},[896,3984,1289],{"class":910},[896,3986,952],{"class":1116},[896,3988,2864],{"class":2358},[896,3990,3991],{"class":906}," }>\n",[896,3993,3995,3997,3999,4001,4005],{"class":898,"line":3994},64,[896,3996,3952],{"class":1116},[896,3998,3955],{"class":2358},[896,4000,2355],{"class":906},[896,4002,4004],{"class":4003},"sW-rI","ApiTokenRotationSuccess",[896,4006,4007],{"class":906},">\n",[896,4009,4011,4013,4015,4017,4020],{"class":898,"line":4010},65,[896,4012,3952],{"class":1116},[896,4014,3955],{"class":2358},[896,4016,2355],{"class":906},[896,4018,4019],{"class":4003},"SingleTokenMeta",[896,4021,4007],{"class":906},[896,4023,4025,4027,4029,4031,4034],{"class":898,"line":4024},66,[896,4026,3952],{"class":1116},[896,4028,3955],{"class":2358},[896,4030,2355],{"class":906},[896,4032,4033],{"class":4003},"CreationSuccess",[896,4035,4007],{"class":906},[896,4037,4039,4041,4043,4046,4048,4050,4052],{"class":898,"line":4038},67,[896,4040,3952],{"class":1116},[896,4042,3955],{"class":2358},[896,4044,4045],{"class":906},"\u003C{ ",[896,4047,3966],{"class":910},[896,4049,952],{"class":1116},[896,4051,2753],{"class":2358},[896,4053,3991],{"class":906},[848,4055,4056,4058,4059,4062,4063,4066,4067,4069,4070,4073,4074,4077],{},[852,4057,3293],{}," uses ",[852,4060,4061],{},"AllValidTokensList",", but removes\n",[852,4064,4065],{},"public_identifier"," before it returns the payload.\n",[852,4068,3299],{}," uses the full token list response so it can\nresolve ",[852,4071,4072],{},"tokenId"," to ",[852,4075,4076],{},"publicIdentifier"," before sending the action to IAM.",[873,4079,4081],{"id":4080},"resultst",[852,4082,4083],{},"Results\u003CT>",[848,4085,4086,4087,4089,4090,4093],{},"The standard response envelope returned by ",[852,4088,160],{}," and used as the return type of ",[852,4091,4092],{},"askForMfaFlow"," and other utilities.",[887,4095,4097],{"className":889,"code":4096,"language":891,"meta":892,"style":892},"type Results\u003CT = unknown> =\n  | { ok: true;  data: T;      date: string }\n  | { ok: false; reason: string; date: string }\n",[852,4098,4099,4121,4158],{"__ignoreMap":892},[896,4100,4101,4103,4105,4107,4110,4112,4115,4118],{"class":898,"line":899},[896,4102,1266],{"class":1098},[896,4104,3955],{"class":2358},[896,4106,2355],{"class":906},[896,4108,4109],{"class":4003},"T",[896,4111,1160],{"class":1116},[896,4113,4114],{"class":2358}," unknown",[896,4116,4117],{"class":906},"> ",[896,4119,4120],{"class":1116},"=\n",[896,4122,4123,4125,4127,4130,4132,4135,4138,4140,4142,4145,4148,4151,4153,4155],{"class":898,"line":930},[896,4124,3952],{"class":1116},[896,4126,907],{"class":906},[896,4128,4129],{"class":910},"ok",[896,4131,952],{"class":1116},[896,4133,4134],{"class":2358}," true",[896,4136,4137],{"class":906},";  ",[896,4139,1702],{"class":910},[896,4141,952],{"class":1116},[896,4143,4144],{"class":2358}," T",[896,4146,4147],{"class":906},";      ",[896,4149,4150],{"class":910},"date",[896,4152,952],{"class":1116},[896,4154,2753],{"class":2358},[896,4156,4157],{"class":906}," }\n",[896,4159,4160,4162,4164,4166,4168,4171,4173,4175,4177,4179,4181,4183,4185,4187],{"class":898,"line":936},[896,4161,3952],{"class":1116},[896,4163,907],{"class":906},[896,4165,4129],{"class":910},[896,4167,952],{"class":1116},[896,4169,4170],{"class":2358}," false",[896,4172,3973],{"class":906},[896,4174,1517],{"class":910},[896,4176,952],{"class":1116},[896,4178,2753],{"class":2358},[896,4180,3973],{"class":906},[896,4182,4150],{"class":910},[896,4184,952],{"class":1116},[896,4186,2753],{"class":2358},[896,4188,4157],{"class":906},[873,4190,4192],{"id":4191},"utilsresponset",[852,4193,4194],{},"UtilsResponse\u003CT>",[848,4196,4197,4198,4200],{},"Extends ",[852,4199,4083],{}," with an optional error code and rate-limit retry value. Returned by utilities that proxy IAM service responses.",[887,4202,4204],{"className":889,"code":4203,"language":891,"meta":892,"style":892},"type UtilsResponse\u003CT> = Results\u003CT> & {\n  code?: AppCode\n  retryAfter?: string | null\n}\n",[852,4205,4206,4234,4244,4257],{"__ignoreMap":892},[896,4207,4208,4210,4213,4215,4217,4219,4221,4223,4225,4227,4229,4232],{"class":898,"line":899},[896,4209,1266],{"class":1098},[896,4211,4212],{"class":2358}," UtilsResponse",[896,4214,2355],{"class":906},[896,4216,4109],{"class":4003},[896,4218,4117],{"class":906},[896,4220,1117],{"class":1116},[896,4222,3955],{"class":2358},[896,4224,2355],{"class":906},[896,4226,4109],{"class":4003},[896,4228,4117],{"class":906},[896,4230,4231],{"class":1116},"&",[896,4233,2547],{"class":906},[896,4235,4236,4239,4241],{"class":898,"line":930},[896,4237,4238],{"class":910},"  code",[896,4240,2740],{"class":1116},[896,4242,4243],{"class":2358}," AppCode\n",[896,4245,4246,4249,4251,4253,4255],{"class":898,"line":936},[896,4247,4248],{"class":910},"  retryAfter",[896,4250,2740],{"class":1116},[896,4252,2753],{"class":2358},[896,4254,2867],{"class":1116},[896,4256,3554],{"class":2358},[896,4258,4259],{"class":898,"line":945},[896,4260,1310],{"class":906},[873,4262,4264],{"id":4263},"appcode",[852,4265,4266],{},"AppCode",[848,4268,4269,4270,1263],{},"Union of structured error code strings used in thrown errors and ",[852,4271,4272],{},"UtilsResponse.code",[887,4274,4276],{"className":889,"code":4275,"language":891,"meta":892,"style":892},"type AppCode =\n  | 'AUTH_REQUIRED'\n  | 'SERVER_ERROR'\n  | 'TEMPERING'\n  | 'FORBIDDEN'\n  | 'AUTH_SERVER_ERROR'\n  | 'AUTH_CLIENT_ERROR'\n  | 'MISSING_BODY'\n  | 'INVALID_CREDENTIALS'\n  | 'INVALID_CONTENT_TYPE'\n  | 'NOT_FOUND'\n  | (string & {})   \u002F\u002F open for module-specific codes\n",[852,4277,4278,4287,4298,4309,4320,4330,4340,4351,4362,4372,4383,4394],{"__ignoreMap":892},[896,4279,4280,4282,4285],{"class":898,"line":899},[896,4281,1266],{"class":1098},[896,4283,4284],{"class":2358}," AppCode",[896,4286,3946],{"class":1116},[896,4288,4289,4291,4293,4296],{"class":898,"line":930},[896,4290,3952],{"class":1116},[896,4292,921],{"class":920},[896,4294,4295],{"class":924},"AUTH_REQUIRED",[896,4297,927],{"class":920},[896,4299,4300,4302,4304,4307],{"class":898,"line":936},[896,4301,3952],{"class":1116},[896,4303,921],{"class":920},[896,4305,4306],{"class":924},"SERVER_ERROR",[896,4308,927],{"class":920},[896,4310,4311,4313,4315,4318],{"class":898,"line":945},[896,4312,3952],{"class":1116},[896,4314,921],{"class":920},[896,4316,4317],{"class":924},"TEMPERING",[896,4319,927],{"class":920},[896,4321,4322,4324,4326,4328],{"class":898,"line":973},[896,4323,3952],{"class":1116},[896,4325,921],{"class":920},[896,4327,1535],{"class":924},[896,4329,927],{"class":920},[896,4331,4332,4334,4336,4338],{"class":898,"line":991},[896,4333,3952],{"class":1116},[896,4335,921],{"class":920},[896,4337,1550],{"class":924},[896,4339,927],{"class":920},[896,4341,4342,4344,4346,4349],{"class":898,"line":998},[896,4343,3952],{"class":1116},[896,4345,921],{"class":920},[896,4347,4348],{"class":924},"AUTH_CLIENT_ERROR",[896,4350,927],{"class":920},[896,4352,4353,4355,4357,4360],{"class":898,"line":2791},[896,4354,3952],{"class":1116},[896,4356,921],{"class":920},[896,4358,4359],{"class":924},"MISSING_BODY",[896,4361,927],{"class":920},[896,4363,4364,4366,4368,4370],{"class":898,"line":2801},[896,4365,3952],{"class":1116},[896,4367,921],{"class":920},[896,4369,1529],{"class":924},[896,4371,927],{"class":920},[896,4373,4374,4376,4378,4381],{"class":898,"line":2811},[896,4375,3952],{"class":1116},[896,4377,921],{"class":920},[896,4379,4380],{"class":924},"INVALID_CONTENT_TYPE",[896,4382,927],{"class":920},[896,4384,4385,4387,4389,4392],{"class":898,"line":2821},[896,4386,3952],{"class":1116},[896,4388,921],{"class":920},[896,4390,4391],{"class":924},"NOT_FOUND",[896,4393,927],{"class":920},[896,4395,4396,4398,4400,4402,4405,4408],{"class":898,"line":3134},[896,4397,3952],{"class":1116},[896,4399,1257],{"class":906},[896,4401,1633],{"class":2358},[896,4403,4404],{"class":1116}," &",[896,4406,4407],{"class":906}," {})   ",[896,4409,4410],{"class":994},"\u002F\u002F open for module-specific codes\n",[873,4412,4414],{"id":4413},"verificationlinkschema",[852,4415,4416],{},"VerificationLinkSchema",[848,4418,4419,4420,855,4423,1263],{},"Inferred type for the magic link query parameters validated by ",[852,4421,4422],{},"defineVerifiedMagicLinkGetHandler",[852,4424,2955],{},[887,4426,4428],{"className":889,"code":4427,"language":891,"meta":892,"style":892},"type VerificationLinkSchema = {\n  visitor: number\n  token: string\n  random: string   \u002F\u002F 254–500 characters\n  reason: string   \u002F\u002F max 100 characters\n}\n",[852,4429,4430,4441,4450,4459,4471,4482],{"__ignoreMap":892},[896,4431,4432,4434,4437,4439],{"class":898,"line":899},[896,4433,1266],{"class":1098},[896,4435,4436],{"class":2358}," VerificationLinkSchema",[896,4438,1160],{"class":1116},[896,4440,2547],{"class":906},[896,4442,4443,4446,4448],{"class":898,"line":930},[896,4444,4445],{"class":910},"  visitor",[896,4447,952],{"class":1116},[896,4449,3196],{"class":2358},[896,4451,4452,4455,4457],{"class":898,"line":936},[896,4453,4454],{"class":910},"  token",[896,4456,952],{"class":1116},[896,4458,2743],{"class":2358},[896,4460,4461,4464,4466,4468],{"class":898,"line":945},[896,4462,4463],{"class":910},"  random",[896,4465,952],{"class":1116},[896,4467,2753],{"class":2358},[896,4469,4470],{"class":994},"   \u002F\u002F 254–500 characters\n",[896,4472,4473,4475,4477,4479],{"class":898,"line":973},[896,4474,2794],{"class":910},[896,4476,952],{"class":1116},[896,4478,2753],{"class":2358},[896,4480,4481],{"class":994},"   \u002F\u002F max 100 characters\n",[896,4483,4484],{"class":898,"line":991},[896,4485,1310],{"class":906},[4487,4488,4489],"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 .spgvN, html code.shiki .spgvN{--shiki-light:#098658;--shiki-default:#098658;--shiki-dark:#BD93F9}html pre.shiki code .sRg35, html code.shiki .sRg35{--shiki-light:#811F3F;--shiki-default:#811F3F;--shiki-dark:#FF5555}html pre.shiki code .st6lo, html code.shiki .st6lo{--shiki-light:#EE0000;--shiki-default:#EE0000;--shiki-dark:#FF79C6}html pre.shiki code .sODv-, html code.shiki .sODv-{--shiki-light:#D16969;--shiki-default:#D16969;--shiki-dark:#8BE9FD}html pre.shiki code .s58tv, html code.shiki .s58tv{--shiki-light:#811F3F;--shiki-default:#811F3F;--shiki-dark:#BD93F9}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 .sW-rI, html code.shiki .sW-rI{--shiki-light:#267F99;--shiki-light-font-style:inherit;--shiki-default:#267F99;--shiki-default-font-style:inherit;--shiki-dark:#FFB86C;--shiki-dark-font-style:italic}",{"title":892,"searchDepth":930,"depth":930,"links":4491},[4492,4496,4504,4510,4518,4527,4534,4537,4547],{"id":870,"depth":930,"text":871,"children":4493},[4494,4495],{"id":875,"depth":936,"text":878},{"id":1049,"depth":936,"text":1052},{"id":1131,"depth":930,"text":1132,"children":4497},[4498,4499,4500,4501,4502,4503],{"id":1135,"depth":936,"text":1138},{"id":1195,"depth":936,"text":1198},{"id":1329,"depth":936,"text":1332},{"id":1347,"depth":936,"text":1350},{"id":1369,"depth":936,"text":1372},{"id":1500,"depth":936,"text":1503},{"id":1570,"depth":930,"text":1571,"children":4505},[4506,4507,4508,4509],{"id":1574,"depth":936,"text":1577},{"id":1767,"depth":936,"text":1770},{"id":1778,"depth":936,"text":1781},{"id":1831,"depth":936,"text":1834},{"id":1233,"depth":930,"text":112,"children":4511},[4512,4513,4514,4515,4517],{"id":1854,"depth":936,"text":1857},{"id":1865,"depth":936,"text":1868},{"id":1884,"depth":936,"text":1887},{"id":1898,"depth":936,"text":4516},"toB64(data) \u002F fromB64(b64)",{"id":1913,"depth":936,"text":1916},{"id":1924,"depth":930,"text":1925,"children":4519},[4520,4521,4522,4523,4524,4525,4526],{"id":1928,"depth":936,"text":1931},{"id":1942,"depth":936,"text":1945},{"id":1966,"depth":936,"text":1969},{"id":1981,"depth":936,"text":1984},{"id":1999,"depth":936,"text":2002},{"id":2037,"depth":936,"text":2040},{"id":2056,"depth":936,"text":2059},{"id":2071,"depth":930,"text":2072,"children":4528},[4529,4530,4531,4532,4533],{"id":2075,"depth":936,"text":2078},{"id":2100,"depth":936,"text":2103},{"id":2242,"depth":936,"text":2245},{"id":2260,"depth":936,"text":2263},{"id":2274,"depth":936,"text":2277},{"id":2288,"depth":930,"text":2289,"children":4535},[4536],{"id":2292,"depth":936,"text":2295},{"id":2321,"depth":930,"text":2322,"children":4538},[4539,4540,4541,4542,4543,4544,4545,4546],{"id":2325,"depth":936,"text":2328},{"id":2492,"depth":936,"text":2495},{"id":2572,"depth":936,"text":2575},{"id":2583,"depth":936,"text":2586},{"id":2602,"depth":936,"text":2605},{"id":2620,"depth":936,"text":2623},{"id":2634,"depth":936,"text":2637},{"id":2649,"depth":936,"text":2652},{"id":2678,"depth":930,"text":2679,"children":4548},[4549,4550,4551,4552,4553,4554,4555,4556],{"id":2694,"depth":936,"text":2697},{"id":2826,"depth":936,"text":2829},{"id":2969,"depth":936,"text":2970},{"id":3286,"depth":936,"text":3287},{"id":4080,"depth":936,"text":4083},{"id":4191,"depth":936,"text":4194},{"id":4263,"depth":936,"text":4266},{"id":4413,"depth":936,"text":4416},"Complete reference for server utility functions covering token metadata, session caching, server-to-server requests, HMAC signing, cookie management, OAuth helpers, image validation, sanitization, and general utilities.","md",{},null,"---\ntitle: Utilities\ndescription: Complete reference for server utility functions covering token metadata, session caching, server-to-server requests, HMAC signing, cookie management, OAuth helpers, image validation, sanitization, and general utilities.\nicon: i-lucide-wrench\n---\n\nAll utilities are exported from `auth-h3client\u002Fv1` and `auth-h3client\u002Fv2`. When using the Nuxt module, they are auto-imported inside the `server\u002F` directory.\n\n---\n\n## Configuration access\n\n### `configuration(config)`\n\nValidates the provided configuration object against the internal Zod schema, freezes it with `Object.freeze`, and stores it as the module-level singleton. Must be called exactly once at startup before any middleware or handler runs. Throws a formatted validation error if the schema check fails.\n\n```ts\nimport { configuration } from 'auth-h3client\u002Fv2'\n\nconfiguration({\n  server: { auth_location: 'https:\u002F\u002Fiam.example.com' },\n  logLevel: 'info',\n  \u002F\u002F ...\n})\n```\n\n**Parameters**\n\n| Parameter | Type | Description |\n|---|---|---|\n| `config` | `Configuration` | The full configuration object. Validated against a Zod schema before being frozen |\n\n---\n\n### `getConfiguration()`\n\nReturns the active `Configuration` object that was passed to `configuration(...)` at startup. The object is frozen, so its values cannot be mutated at runtime. Throws if called before `configuration(...)` has run.\n\n```ts\nimport { getConfiguration } from 'auth-h3client\u002Fv2'\n\nconst { server, enableFireWallBans } = getConfiguration()\n```\n\nUse this inside custom handlers or middleware when you need direct access to configuration values such as the IAM server address, HMAC settings, or feature flags.\n\n---\n\n## Token and session\n\n### `getAccessTokenMetaData(event)`\n\nReads the `__Secure-a` access token from the request cookies, checks the local LRU metadata cache, and returns expiry and rotation state without calling the IAM service. Falls back to a rotation call if the cache misses.\n\n```ts\nconst meta = await getAccessTokenMetaData(event)\n\u002F\u002F meta.msUntilExp: ms until expiry\n\u002F\u002F meta.shouldRotate: true when threshold is reached\n\u002F\u002F meta.authorized: false when token is invalid\n```\n\n---\n\n### `getCachedUserData(event, cookies, token, storage, cacheOptions?)`\n\nCalls the IAM `\u002Fsecret\u002Fdata` endpoint and caches the result using a SHA-256 hash of the session identifiers as the key. Returns cached data on subsequent calls within the TTL.\n\n```ts\nconst result = await getCachedUserData(event, cookies, token, storage)\n\nif (result.type === 'SUCCESS') {\n  const { userId, roles } = result.data\n}\n\u002F\u002F result.type === 'ERROR' with reason: 'UNAUTHORIZED' | 'MFA' | 'RATE_LIMIT' | 'SERVER_ERROR' | ...\n```\n\nCalled automatically by `defineAuthenticatedEventHandler` and `defineOptionalAuthenticationEvent`.\n\n---\n\n### `getOperationalConfig(event)`\n\nFetches and caches shared settings from the IAM service: `domain` and `accessTokenTTL`. The result is cached for the lifetime of the process.\n\n---\n\n### `applyRotationResult(event, result, domain, accessTokenTTL)`\n\nWrites the cookies from a token rotation result to the response. Handles the `both`, `access-only`, and `refresh-only` rotation types.\n\n---\n\n### `getAuthStatusHandler`\n\nA pre-built `defineAuthenticatedEventHandler` that returns the current session\ndata from `event.context.authorizedData`. In manual H3 and Nitro setups, a\ncommon route is `GET \u002Fauth\u002Fusers\u002FauthStatus`. Under the Nuxt module, the same\nhandler is registered automatically at `authStatusUrl`, whose default value is\n`\u002Fapi\u002Fauth\u002Fusers\u002FauthStatus`. The handler is also exported for direct use in\ncustom setups.\n\n```ts\nimport { getAuthStatusHandler } from 'auth-h3client\u002Fv2'\n\nrouter.get('\u002Fauth\u002Fusers\u002FauthStatus', getAuthStatusHandler)\n```\n\n**Responses**\n\n| Status | Meaning |\n|---|---|\n| `200` | Returns the authorized user data |\n| `400` | User ID invalid after conversion |\n| `401` | Not authenticated |\n\n---\n\n### `askForMfaFlow(event, log, reason, random, accessToken?)`\n\nRequests a step-up MFA email from the IAM service for an authenticated user. `random` must be a `Buffer` whose hex representation is 254 to 500 characters, `reason` must be 100 characters or shorter, and the request is deduplicated per `canary_id + reason`. Returns `{ ok: true, data: 'Please check your email...' }` on success, or a structured error (`INVALID_CREDENTIALS`, `MFA_REQUIRED`, `FORBIDDEN`, `RATE_LIMIT`, `HASH`, `REASON`, `AUTH_REJECTED`, `AUTH_SERVER_ERROR`, `UNEXPECTED_ERROR`) on failure. Never throws. When `accessToken` is omitted, the token is read from the `__Secure-a` cookie. See [Custom MFA Flow](\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fcustom-flow) for the complete pattern.\n\n---\n\n## Server-to-server\n\n### `serviceToService(keepAlive, endpoint, method, event, body, cookies?, data?, token?, apiToken?)`\n\nMakes an authenticated request from the gateway to the IAM service. Applies\nHMAC signing headers when `enableHmac` is `true`, forwards cookies and bearer\ntokens when provided, can forward an API token as `X-API-KEY`, and uses the\nconfigured Undici agent for connection pooling and optional mTLS.\n\n| Parameter | Type | Description |\n|---|---|---|\n| `keepAlive` | `boolean` | Whether to keep the connection alive |\n| `endpoint` | `string` | IAM service path, e.g. `\u002Fauth\u002Flogin` |\n| `method` | `string` | HTTP method |\n| `event` | `H3Event` | Current request event for header extraction |\n| `body` | `boolean` | Whether to include the request body |\n| `cookies` | `Cookies[]` | Cookies to forward to the IAM service |\n| `data` | `object` | Request body data when `body` is `true` |\n| `token` | `string` | Access token to include as `Authorization: Bearer` |\n| `apiToken` | `string` | API token to include as `X-API-KEY` |\n\n`defineAuthenticatePublicApi` uses the `apiToken` parameter to forward the\nincoming `X-API-KEY` header to IAM `\u002Fapi\u002Fpublic\u002Fverify` without converting it\ninto session cookies or a bearer token.\n\n---\n\n### `clientHeaders(event)`\n\nExtracts headers from the incoming request to forward to the IAM service.\n\n---\n\n### `signature(method, path)`\n\nGenerates HMAC-SHA256 signature headers for a request to the IAM service.\n\nReturns: `{ 'X-Client-Id', 'X-Timestamp', 'X-Request-Id', 'X-Signature' }`\n\n```ts\nconst headers = signature('POST', '\u002Fauth\u002Flogin')\n```\n\n---\n\n### `getAuthAgent(botDetector, ssl?)`\n\nCreates an Undici `Agent` configured with optional mTLS certificates and connection pool settings. When `botDetector` is `true`, the agent uses a high-concurrency pool tuned for polling.\n\n---\n\n## Cookies\n\n### `makeCookie(event, name, value, options)`\n\nSets an HTTP cookie on the response with typed options.\n\n---\n\n### `createSignedValue(raw, ttlMs, keyword)`\n\nCreates a signed cookie string in the format `base64(value).base64(keyword).expiry.hmac`. The `keyword` binds the signature to a specific context.\n\n---\n\n### `verifySignedValue(cookie, keyword)`\n\nParses and verifies a signed cookie. Returns `{ valid: boolean, payload: { value, exp } | null }`.\n\n---\n\n### `toB64(data)` \u002F `fromB64(b64)`\n\nBase64url encoding and decoding utilities.\n\n---\n\n### `isSameBuffer(a, b)`\n\nTiming-safe HMAC comparison of two strings. Use for any secret or signature comparison to prevent timing side-channel attacks.\n\n---\n\n## OAuth helpers\n\n### `makePkcePair()`\n\nGenerates a PKCE verifier and challenge pair. Returns `{ verifier: string, challenge: string }`.\n\n---\n\n### `discoverOidc(issuer, log)`\n\nFetches the OIDC discovery document from `{issuer}\u002F.well-known\u002Fopenid-configuration`. Returns the parsed metadata object including `authorization_endpoint`, `token_endpoint`, and `jwks_uri`.\n\n---\n\n### `verifyOAuthToken(idToken, jwksUri, issuer, clientId)`\n\nVerifies an OIDC ID token signature against the provider's JWKS endpoint. Returns the decoded `OidcIdTokenPayload` on success.\n\n---\n\n### `atHashCheck(atHash, accessToken, idToken)`\n\nVerifies the `at_hash` claim in an OIDC ID token against the access token. Returns `true` if the hash matches.\n\n---\n\n### `safeObjectMerge(target, src, opts?, extraReserved?)`\n\nMerges `src` into `target` while protecting reserved fields from being overridden. Reserved fields include `sub`, `email`, `iss`, `aud`, `iat`, `exp`, and all JWT claims. Use this when merging OAuth user info with existing user data.\n\n---\n\n### `getSafeUrl(urlString)`\n\nParses and validates a redirect URL string. Returns a `URL` object if valid, or `false` if the input is not a valid URL.\n\n---\n\n### `safeRedirect(event, url)`\n\nValidates a redirect URL with `getSafeUrl` and redirects the response. Throws HTTP 400 if the URL is not valid.\n\n---\n\n## Validation and sanitization\n\n### `sanitizeInputString(input)`\n\nRuns the full HTML sanitization pipeline on a string: unicode normalization, iterative URI and entity decoding, pattern detection, `sanitize-html` pass, and entity encoding. Returns `{ vall: string, results: { htmlFound: boolean, tags? } }`.\n\nSee [IAM XSS Protection](\u002Fdocs\u002Fiam\u002Fessentials\u002Fxss) for the full pipeline description.\n\n---\n\n### `makeSafeString(opts)`\n\nReturns a Zod string schema that validates length and an optional regex constraint, then applies `sanitizeInputString` as a transform. Use this in Zod schemas for any user-supplied string fields.\n\n```ts\nconst schema = z.object({\n  name: makeSafeString({ min: 1, max: 100 }),\n  bio: makeSafeString({ min: 0, max: 500, pattern: \u002F^[\\w\\s]+$\u002F })\n})\n```\n\n---\n\n### `validateZodSchema(schema, data, log)`\n\nParses `data` against a Zod schema. Returns the parsed data on success or `{ valid: false, errors: Record\u003Cstring, string> }` on failure.\n\n---\n\n### `validateUserPassword(password)`\n\nReturns `true` if the password meets the minimum policy: 12+ characters with at least one uppercase letter, one lowercase letter, one digit, and one special character.\n\n---\n\n### `sanitizeBaseName(input, max)`\n\nStrips unsafe characters from a filename and truncates to `max` characters. Use before deriving a storage key from a user-supplied filename.\n\n---\n\n## Image upload\n\n### `validateImage(data, filename)`\n\nValidates a `Buffer` against the `imageUploader` configuration limits, detects the MIME type from magic bytes, converts to WebP via sharp, and returns `{ ok: true, body, key, mime }` or `{ ok: false, date, reason }`. See [Image Upload](\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fimage-upload) for full details.\n\n---\n\n## General utilities\n\n### `MiniCache\u003CT>`\n\nIn-memory TTL cache with a configurable capacity and sweep interval.\n\n```ts\nconst cache = new MiniCache\u003Cstring>(1000, 60_000) \u002F\u002F 1000 entries, sweep every minute\n\ncache.set('key', 'value', 5 * 60 * 1000) \u002F\u002F 5-minute TTL\nconst val = cache.get('key')  \u002F\u002F null if expired\ncache.del('key')\ncache.clear()\n```\n\n---\n\n### `lockAsyncAction(key, fn, ttl?)`\n\nDeduplicates async operations by key. If a call with the same key is already in progress, the second caller waits for the first result. Results are cached briefly (default 5 seconds) to handle concurrent requests that arrive after completion.\n\n```ts\nconst data = await lockAsyncAction(`user:${userId}`, async () => {\n  return await fetchExpensiveData(userId)\n})\n```\n\n---\n\n### `getLogger()`\n\nReturns the pino logger instance used by the module. Use it to write structured log entries from custom handlers.\n\n---\n\n### `parseResponseContentType(log, response)`\n\nReads and parses an HTTP `Response` body as JSON or text depending on the `Content-Type` header.\n\n---\n\n### `getBaseUrl(cfg)`\n\nBuilds the base URL for the IAM service from the `server.auth_location` configuration. Returns a `URL` object.\n\n---\n\n### `findStringsInObject(input, visited?, searchTerms)`\n\nRecursively searches an object for a key-value pair. Returns the matching value string or `null`.\n\n---\n\n### `banIp(ip)`\n\nExecutes `sudo ufw insert 1 deny from \u003Cip> to any` to block an IP at the firewall level. Only available on Linux with UFW installed.\n\n---\n\n### `checkForBots(cookies, event, method, log, enableFireWallBans, canary?)`\n\nLow-level helper that calls the IAM `\u002Fcheck` endpoint with an explicit signed cookie and visitor context. Throws HTTP 403 when the IAM service flags the visitor, and HTTP 502 when the IAM service is unreachable. On success, sets the `__Host-dr_i_n` cookie on the response and stores the tracking result in `event.context.trackingResult`. Used internally by `botDetectorMiddleware`. See [Bot Detection](\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fbot-detection) for the full usage pattern.\n\n---\n\n## TypeScript types\n\nThe following types are exported from `auth-h3client\u002Fv1` and `auth-h3client\u002Fv2` (and re-exported from `auth-h3client\u002Fclient` for browser use).\n\n### `ServerResponse`\n\nThe shape of `event.context.authorizedData` set by `defineAuthenticatedEventHandler` and `defineOptionalAuthenticationEvent`.\n\n```ts\ninterface ServerResponse {\n  authorized: boolean\n  userId?: string\n  roles?: string[] | string\n  ipAddress: string\n  userAgent: string\n  date: string\n  reason?: string\n  error?: string\n  message?: string\n}\n```\n\n### `LimitedMetaData`\n\nThe shape returned by the IAM service after a successful code verification and token rotation.\n\n```ts\ninterface LimitedMetaData {\n  authorized: true\n  userId: number | string\n  visitorId: number | string\n  roles: string[] | 'No roles added with this token.'\n  ipAddress: string\n  userAgent: string\n  date: string\n  accessToken: string\n  accessIat: string\n}\n```\n\n::note\n`defineMfaCodeVerifierHandler` destructures `accessToken` and `accessIat` from the response and applies them to the response cookies via token rotation. The value set on `event.context.limitedMetaData` inside your handler does not include these two fields.\n::\n\n### API token wrapper types\n\nThe API token wrappers export a small set of helper types inferred from the\nshared Zod schemas. Use them when you want your custom handlers to mirror the\nsame action names and request bodies as the built-in wrappers.\n\n```ts\ntype Privilege = 'custom' | 'demo' | 'restricted' | 'protected' | 'full'\n\ntype ParamsTypes = {\n  action:\n    | 'new-token'\n    | 'revoke'\n    | 'metadata'\n    | 'rotate'\n    | 'ip-restriction-update'\n    | 'privilege-update'\n    | 'list-metadata'\n}\n\ntype NewTokens = {\n  name: string\n  ipv4?: string[]\n  prefix: string\n  expires?: number\n}\n\ntype NewIpRestriction = {\n  ipv4?: string[]\n  tokenId: number\n}\n\ntype TokenId = {\n  tokenId: number\n}\n```\n\nThese types are exported from `auth-h3client\u002Fv1` and `auth-h3client\u002Fv2` via\nthe API token wrapper module.\n\n### API token response types\n\nThe package also exports the response and metadata types used by\n`getApiListsController`, `defineAuthenticatePublicApi`, and\n`defineApiManagementHandler`.\n\n```ts\ninterface TokenMeta {\n  name?: string\n  tokenId?: number\n  userId?: number\n  createdAt?: string\n  expiresAt?: string\n  lastUsed?: string\n  usageCount?: number\n  providedPrivilege?: 'custom' | 'demo' | 'restricted' | 'protected' | 'full'\n}\n\ninterface SingleTokenMeta {\n  tokenMeta: TokenMeta\n  counts: {\n    totalInvalidTokens: number\n    totalValidTokens: number\n    total: number\n  }\n}\n\ninterface TokenList {\n  id: number\n  name: string\n  created_at: string\n  expires_at: string\n  restricted_to_ip_address: string[] | null\n  public_identifier: string\n  last_used: string\n  usage_count: number\n  privilege_type: 'demo' | 'restricted' | 'protected' | 'full' | 'custom'\n}\n\ninterface AllValidTokensList {\n  total: number\n  totalInvalidTokens: number\n  totalValidTokens: number\n  tokenList?: TokenList[]\n}\n\ninterface CreationSuccess {\n  rawApiKey: string | undefined\n  expiresAt: Date | null\n}\n\ninterface ApiTokenRotationSuccess {\n  msg: string\n  newRawToken: string | undefined\n  newExpiry: Date | null\n}\n\ninterface VerifySuccessResponse {\n  name: string\n  tokenId: number\n  userId: number\n  createdAt: string\n  expiresAt: string\n  lastUsed: string\n  usageCount: number\n  providedPrivilege: 'custom' | 'demo' | 'restricted' | 'protected' | 'full'\n}\n\ntype ActionManagerResult =\n  | Results\u003Cstring | { msg: string; invalidedTokenId: number; userId: number }>\n  | Results\u003CApiTokenRotationSuccess>\n  | Results\u003CSingleTokenMeta>\n  | Results\u003CCreationSuccess>\n  | Results\u003C{ msg: string }>\n```\n\n`getApiListsController` uses `AllValidTokensList`, but removes\n`public_identifier` before it returns the payload.\n`defineApiManagementHandler` uses the full token list response so it can\nresolve `tokenId` to `publicIdentifier` before sending the action to IAM.\n\n### `Results\u003CT>`\n\nThe standard response envelope returned by `executeRequest` and used as the return type of `askForMfaFlow` and other utilities.\n\n```ts\ntype Results\u003CT = unknown> =\n  | { ok: true;  data: T;      date: string }\n  | { ok: false; reason: string; date: string }\n```\n\n### `UtilsResponse\u003CT>`\n\nExtends `Results\u003CT>` with an optional error code and rate-limit retry value. Returned by utilities that proxy IAM service responses.\n\n```ts\ntype UtilsResponse\u003CT> = Results\u003CT> & {\n  code?: AppCode\n  retryAfter?: string | null\n}\n```\n\n### `AppCode`\n\nUnion of structured error code strings used in thrown errors and `UtilsResponse.code`.\n\n```ts\ntype AppCode =\n  | 'AUTH_REQUIRED'\n  | 'SERVER_ERROR'\n  | 'TEMPERING'\n  | 'FORBIDDEN'\n  | 'AUTH_SERVER_ERROR'\n  | 'AUTH_CLIENT_ERROR'\n  | 'MISSING_BODY'\n  | 'INVALID_CREDENTIALS'\n  | 'INVALID_CONTENT_TYPE'\n  | 'NOT_FOUND'\n  | (string & {})   \u002F\u002F open for module-specific codes\n```\n\n### `VerificationLinkSchema`\n\nInferred type for the magic link query parameters validated by `defineVerifiedMagicLinkGetHandler` and `defineMfaCodeVerifierHandler`.\n\n```ts\ntype VerificationLinkSchema = {\n  visitor: number\n  token: string\n  random: string   \u002F\u002F 254–500 characters\n  reason: string   \u002F\u002F max 100 characters\n}\n```\n",{"title":214,"description":4557},"ryRUJvHUW-Td_aqiu9O_p94zmwN9gzGpfxu5PFjnQQM",[4565,4560],{"title":210,"path":211,"stem":212,"children":-1},{"id":843,"title":214,"body":4567,"description":4557,"extension":4558,"icon":47,"meta":7519,"module":4560,"navigation":8,"path":215,"rawbody":4561,"seo":7520,"stem":216,"__hash__":4563},{"type":845,"value":4568,"toc":7453},[4569,4577,4579,4581,4585,4589,4663,4667,4693,4695,4699,4707,4753,4755,4757,4759,4763,4767,4801,4803,4807,4811,4901,4907,4909,4913,4919,4921,4925,4933,4935,4939,4951,4999,5003,5039,5041,5045,5081,5083,5085,5089,5097,5229,5239,5241,5245,5247,5249,5253,5255,5259,5291,5293,5297,5305,5307,5309,5313,5315,5317,5321,5327,5329,5333,5337,5339,5345,5347,5349,5353,5355,5357,5359,5363,5367,5369,5373,5383,5385,5389,5393,5395,5399,5405,5407,5411,5429,5431,5435,5441,5443,5447,5451,5453,5455,5459,5465,5469,5471,5475,5479,5577,5579,5583,5589,5591,5595,5599,5601,5605,5609,5611,5613,5617,5629,5631,5633,5637,5639,5769,5771,5775,5777,5833,5835,5839,5841,5843,5847,5853,5855,5859,5865,5867,5871,5875,5877,5881,5885,5887,5891,5903,5905,5907,5915,5919,5927,6021,6025,6027,6133,6145,6147,6149,6407,6413,6415,6423,7085,7099,7103,7109,7191,7195,7199,7253,7257,7261,7387,7391,7397,7451],[848,4570,850,4571,855,4573,859,4575,863],{},[852,4572,854],{},[852,4574,858],{},[852,4576,862],{},[865,4578],{},[868,4580,871],{"id":870},[873,4582,4583],{"id":875},[852,4584,878],{},[848,4586,881,4587,885],{},[852,4588,884],{},[887,4590,4591],{"className":889,"code":890,"language":891,"meta":892,"style":892},[852,4592,4593,4611,4615,4621,4641,4655,4659],{"__ignoreMap":892},[896,4594,4595,4597,4599,4601,4603,4605,4607,4609],{"class":898,"line":899},[896,4596,903],{"class":902},[896,4598,907],{"class":906},[896,4600,911],{"class":910},[896,4602,914],{"class":906},[896,4604,917],{"class":902},[896,4606,921],{"class":920},[896,4608,858],{"class":924},[896,4610,927],{"class":920},[896,4612,4613],{"class":898,"line":930},[896,4614,933],{"emptyLinePlaceholder":8},[896,4616,4617,4619],{"class":898,"line":936},[896,4618,911],{"class":939},[896,4620,942],{"class":906},[896,4622,4623,4625,4627,4629,4631,4633,4635,4637,4639],{"class":898,"line":945},[896,4624,948],{"class":910},[896,4626,952],{"class":951},[896,4628,907],{"class":906},[896,4630,957],{"class":910},[896,4632,952],{"class":951},[896,4634,921],{"class":920},[896,4636,964],{"class":924},[896,4638,967],{"class":920},[896,4640,970],{"class":906},[896,4642,4643,4645,4647,4649,4651,4653],{"class":898,"line":973},[896,4644,976],{"class":910},[896,4646,952],{"class":951},[896,4648,921],{"class":920},[896,4650,983],{"class":924},[896,4652,967],{"class":920},[896,4654,988],{"class":906},[896,4656,4657],{"class":898,"line":991},[896,4658,995],{"class":994},[896,4660,4661],{"class":898,"line":998},[896,4662,1001],{"class":906},[848,4664,4665],{},[1005,4666,1007],{},[1009,4668,4669,4679],{},[1012,4670,4671],{},[1015,4672,4673,4675,4677],{},[1018,4674,1020],{},[1018,4676,1023],{},[1018,4678,1026],{},[1028,4680,4681],{},[1015,4682,4683,4687,4691],{},[1033,4684,4685],{},[852,4686,1037],{},[1033,4688,4689],{},[852,4690,192],{},[1033,4692,1044],{},[865,4694],{},[873,4696,4697],{"id":1049},[852,4698,1052],{},[848,4700,1055,4701,1058,4703,1062,4705,1065],{},[852,4702,192],{},[852,4704,1061],{},[852,4706,1061],{},[887,4708,4709],{"className":889,"code":1068,"language":891,"meta":892,"style":892},[852,4710,4711,4729,4733],{"__ignoreMap":892},[896,4712,4713,4715,4717,4719,4721,4723,4725,4727],{"class":898,"line":899},[896,4714,903],{"class":902},[896,4716,907],{"class":906},[896,4718,1079],{"class":910},[896,4720,914],{"class":906},[896,4722,917],{"class":902},[896,4724,921],{"class":920},[896,4726,858],{"class":924},[896,4728,927],{"class":920},[896,4730,4731],{"class":898,"line":930},[896,4732,933],{"emptyLinePlaceholder":8},[896,4734,4735,4737,4739,4741,4743,4745,4747,4749,4751],{"class":898,"line":936},[896,4736,1099],{"class":1098},[896,4738,907],{"class":906},[896,4740,1105],{"class":1104},[896,4742,1108],{"class":906},[896,4744,1111],{"class":1104},[896,4746,914],{"class":906},[896,4748,1117],{"class":1116},[896,4750,1120],{"class":939},[896,4752,1123],{"class":906},[848,4754,1126],{},[865,4756],{},[868,4758,1132],{"id":1131},[873,4760,4761],{"id":1135},[852,4762,1138],{},[848,4764,1141,4765,1145],{},[852,4766,1144],{},[887,4768,4769],{"className":889,"code":1148,"language":891,"meta":892,"style":892},[852,4770,4771,4789,4793,4797],{"__ignoreMap":892},[896,4772,4773,4775,4777,4779,4781,4783,4785,4787],{"class":898,"line":899},[896,4774,1099],{"class":1098},[896,4776,1157],{"class":1104},[896,4778,1160],{"class":1116},[896,4780,1163],{"class":902},[896,4782,1166],{"class":939},[896,4784,1169],{"class":906},[896,4786,1172],{"class":910},[896,4788,1175],{"class":906},[896,4790,4791],{"class":898,"line":930},[896,4792,1180],{"class":994},[896,4794,4795],{"class":898,"line":936},[896,4796,1185],{"class":994},[896,4798,4799],{"class":898,"line":945},[896,4800,1190],{"class":994},[865,4802],{},[873,4804,4805],{"id":1195},[852,4806,1198],{},[848,4808,1201,4809,1205],{},[852,4810,1204],{},[887,4812,4813],{"className":889,"code":1208,"language":891,"meta":892,"style":892},[852,4814,4815,4845,4849,4871,4893,4897],{"__ignoreMap":892},[896,4816,4817,4819,4821,4823,4825,4827,4829,4831,4833,4835,4837,4839,4841,4843],{"class":898,"line":899},[896,4818,1099],{"class":1098},[896,4820,1217],{"class":1104},[896,4822,1160],{"class":1116},[896,4824,1163],{"class":902},[896,4826,1224],{"class":939},[896,4828,1169],{"class":906},[896,4830,1172],{"class":910},[896,4832,1108],{"class":906},[896,4834,1233],{"class":910},[896,4836,1108],{"class":906},[896,4838,1238],{"class":910},[896,4840,1108],{"class":906},[896,4842,1243],{"class":910},[896,4844,1175],{"class":906},[896,4846,4847],{"class":898,"line":930},[896,4848,933],{"emptyLinePlaceholder":8},[896,4850,4851,4853,4855,4857,4859,4861,4863,4865,4867,4869],{"class":898,"line":936},[896,4852,1254],{"class":902},[896,4854,1257],{"class":906},[896,4856,1260],{"class":910},[896,4858,1263],{"class":906},[896,4860,1266],{"class":910},[896,4862,1269],{"class":1116},[896,4864,921],{"class":920},[896,4866,1274],{"class":924},[896,4868,967],{"class":920},[896,4870,1279],{"class":906},[896,4872,4873,4875,4877,4879,4881,4883,4885,4887,4889,4891],{"class":898,"line":945},[896,4874,1284],{"class":1098},[896,4876,907],{"class":906},[896,4878,1289],{"class":1104},[896,4880,1108],{"class":906},[896,4882,1294],{"class":1104},[896,4884,914],{"class":906},[896,4886,1117],{"class":1116},[896,4888,1217],{"class":910},[896,4890,1263],{"class":906},[896,4892,1305],{"class":910},[896,4894,4895],{"class":898,"line":973},[896,4896,1310],{"class":906},[896,4898,4899],{"class":898,"line":991},[896,4900,1315],{"class":994},[848,4902,1318,4903,855,4905,1263],{},[852,4904,1321],{},[852,4906,1324],{},[865,4908],{},[873,4910,4911],{"id":1329},[852,4912,1332],{},[848,4914,1335,4915,855,4917,1342],{},[852,4916,1338],{},[852,4918,1341],{},[865,4920],{},[873,4922,4923],{"id":1347},[852,4924,1350],{},[848,4926,1353,4927,1108,4929,1360,4931,1364],{},[852,4928,1356],{},[852,4930,1359],{},[852,4932,1363],{},[865,4934],{},[873,4936,4937],{"id":1369},[852,4938,1372],{},[848,4940,1375,4941,1378,4943,1382,4945,1386,4947,1390,4949,1394],{},[852,4942,1321],{},[852,4944,1381],{},[852,4946,1385],{},[852,4948,1389],{},[852,4950,1393],{},[887,4952,4953],{"className":889,"code":1397,"language":891,"meta":892,"style":892},[852,4954,4955,4973,4977],{"__ignoreMap":892},[896,4956,4957,4959,4961,4963,4965,4967,4969,4971],{"class":898,"line":899},[896,4958,903],{"class":902},[896,4960,907],{"class":906},[896,4962,1372],{"class":910},[896,4964,914],{"class":906},[896,4966,917],{"class":902},[896,4968,921],{"class":920},[896,4970,858],{"class":924},[896,4972,927],{"class":920},[896,4974,4975],{"class":898,"line":930},[896,4976,933],{"emptyLinePlaceholder":8},[896,4978,4979,4981,4983,4985,4987,4989,4991,4993,4995,4997],{"class":898,"line":936},[896,4980,1426],{"class":910},[896,4982,1263],{"class":906},[896,4984,1431],{"class":939},[896,4986,1169],{"class":906},[896,4988,967],{"class":920},[896,4990,1438],{"class":924},[896,4992,967],{"class":920},[896,4994,1108],{"class":906},[896,4996,1372],{"class":910},[896,4998,1175],{"class":906},[848,5000,5001],{},[1005,5002,1451],{},[1009,5004,5005,5013],{},[1012,5006,5007],{},[1015,5008,5009,5011],{},[1018,5010,1460],{},[1018,5012,1463],{},[1028,5014,5015,5023,5031],{},[1015,5016,5017,5021],{},[1033,5018,5019],{},[852,5020,1472],{},[1033,5022,1475],{},[1015,5024,5025,5029],{},[1033,5026,5027],{},[852,5028,1482],{},[1033,5030,1485],{},[1015,5032,5033,5037],{},[1033,5034,5035],{},[852,5036,1492],{},[1033,5038,1495],{},[865,5040],{},[873,5042,5043],{"id":1500},[852,5044,1503],{},[848,5046,1506,5047,1510,5049,1514,5051,1518,5053,1522,5055,1526,5057,1108,5059,1108,5061,1108,5063,1108,5065,1108,5067,1108,5069,1108,5071,1108,5073,1554,5075,1558,5077,1561,5079,1565],{},[852,5048,1509],{},[852,5050,1513],{},[852,5052,1517],{},[852,5054,1521],{},[852,5056,1525],{},[852,5058,1529],{},[852,5060,1532],{},[852,5062,1535],{},[852,5064,1538],{},[852,5066,1541],{},[852,5068,1544],{},[852,5070,1547],{},[852,5072,1550],{},[852,5074,1553],{},[852,5076,1557],{},[852,5078,1144],{},[1563,5080,138],{"href":139},[865,5082],{},[868,5084,1571],{"id":1570},[873,5086,5087],{"id":1574},[852,5088,1577],{},[848,5090,1580,5091,1584,5093,1588,5095,1592],{},[852,5092,1583],{},[852,5094,1587],{},[852,5096,1591],{},[1009,5098,5099,5109],{},[1012,5100,5101],{},[1015,5102,5103,5105,5107],{},[1018,5104,1020],{},[1018,5106,1023],{},[1018,5108,1026],{},[1028,5110,5111,5123,5137,5149,5161,5173,5185,5201,5215],{},[1015,5112,5113,5117,5121],{},[1033,5114,5115],{},[852,5116,1613],{},[1033,5118,5119],{},[852,5120,1618],{},[1033,5122,1621],{},[1015,5124,5125,5129,5133],{},[1033,5126,5127],{},[852,5128,1628],{},[1033,5130,5131],{},[852,5132,1633],{},[1033,5134,1636,5135],{},[852,5136,1639],{},[1015,5138,5139,5143,5147],{},[1033,5140,5141],{},[852,5142,1646],{},[1033,5144,5145],{},[852,5146,1633],{},[1033,5148,1653],{},[1015,5150,5151,5155,5159],{},[1033,5152,5153],{},[852,5154,1172],{},[1033,5156,5157],{},[852,5158,1664],{},[1033,5160,1667],{},[1015,5162,5163,5167,5171],{},[1033,5164,5165],{},[852,5166,1674],{},[1033,5168,5169],{},[852,5170,1618],{},[1033,5172,1681],{},[1015,5174,5175,5179,5183],{},[1033,5176,5177],{},[852,5178,1233],{},[1033,5180,5181],{},[852,5182,1692],{},[1033,5184,1695],{},[1015,5186,5187,5191,5195],{},[1033,5188,5189],{},[852,5190,1702],{},[1033,5192,5193],{},[852,5194,1707],{},[1033,5196,1710,5197,1584,5199],{},[852,5198,1674],{},[852,5200,1587],{},[1015,5202,5203,5207,5211],{},[1033,5204,5205],{},[852,5206,1238],{},[1033,5208,5209],{},[852,5210,1633],{},[1033,5212,1727,5213],{},[852,5214,1730],{},[1015,5216,5217,5221,5225],{},[1033,5218,5219],{},[852,5220,1737],{},[1033,5222,5223],{},[852,5224,1633],{},[1033,5226,1744,5227],{},[852,5228,1591],{},[848,5230,5231,1752,5233,1755,5235,1758,5237,1762],{},[852,5232,1751],{},[852,5234,1737],{},[852,5236,1591],{},[852,5238,1761],{},[865,5240],{},[873,5242,5243],{"id":1767},[852,5244,1770],{},[848,5246,1773],{},[865,5248],{},[873,5250,5251],{"id":1778},[852,5252,1781],{},[848,5254,1784],{},[848,5256,1787,5257],{},[852,5258,1790],{},[887,5260,5261],{"className":889,"code":1793,"language":891,"meta":892,"style":892},[852,5262,5263],{"__ignoreMap":892},[896,5264,5265,5267,5269,5271,5273,5275,5277,5279,5281,5283,5285,5287,5289],{"class":898,"line":899},[896,5266,1099],{"class":1098},[896,5268,1802],{"class":1104},[896,5270,1160],{"class":1116},[896,5272,1807],{"class":939},[896,5274,1169],{"class":906},[896,5276,967],{"class":920},[896,5278,1814],{"class":924},[896,5280,967],{"class":920},[896,5282,1108],{"class":906},[896,5284,967],{"class":920},[896,5286,1639],{"class":924},[896,5288,967],{"class":920},[896,5290,1175],{"class":906},[865,5292],{},[873,5294,5295],{"id":1831},[852,5296,1834],{},[848,5298,1837,5299,1841,5301,1584,5303,1847],{},[852,5300,1840],{},[852,5302,1844],{},[852,5304,1587],{},[865,5306],{},[868,5308,112],{"id":1233},[873,5310,5311],{"id":1854},[852,5312,1857],{},[848,5314,1860],{},[865,5316],{},[873,5318,5319],{"id":1865},[852,5320,1868],{},[848,5322,1871,5323,1875,5325,1879],{},[852,5324,1874],{},[852,5326,1878],{},[865,5328],{},[873,5330,5331],{"id":1884},[852,5332,1887],{},[848,5334,1890,5335,1263],{},[852,5336,1893],{},[865,5338],{},[873,5340,5341,1902,5343],{"id":1898},[852,5342,1901],{},[852,5344,1905],{},[848,5346,1908],{},[865,5348],{},[873,5350,5351],{"id":1913},[852,5352,1916],{},[848,5354,1919],{},[865,5356],{},[868,5358,1925],{"id":1924},[873,5360,5361],{"id":1928},[852,5362,1931],{},[848,5364,1934,5365,1263],{},[852,5366,1937],{},[865,5368],{},[873,5370,5371],{"id":1942},[852,5372,1945],{},[848,5374,1948,5375,1952,5377,1108,5379,1360,5381,1263],{},[852,5376,1951],{},[852,5378,1955],{},[852,5380,1958],{},[852,5382,1961],{},[865,5384],{},[873,5386,5387],{"id":1966},[852,5388,1969],{},[848,5390,1972,5391,1976],{},[852,5392,1975],{},[865,5394],{},[873,5396,5397],{"id":1981},[852,5398,1984],{},[848,5400,1987,5401,1991,5403,1994],{},[852,5402,1990],{},[852,5404,1587],{},[865,5406],{},[873,5408,5409],{"id":1999},[852,5410,2002],{},[848,5412,2005,5413,2009,5415,2013,5417,1108,5419,1108,5421,1108,5423,1108,5425,1108,5427,2032],{},[852,5414,2008],{},[852,5416,2012],{},[852,5418,2016],{},[852,5420,2019],{},[852,5422,2022],{},[852,5424,2025],{},[852,5426,2028],{},[852,5428,2031],{},[865,5430],{},[873,5432,5433],{"id":2037},[852,5434,2040],{},[848,5436,2043,5437,2047,5439,2051],{},[852,5438,2046],{},[852,5440,2050],{},[865,5442],{},[873,5444,5445],{"id":2056},[852,5446,2059],{},[848,5448,2062,5449,2066],{},[852,5450,2065],{},[865,5452],{},[868,5454,2072],{"id":2071},[873,5456,5457],{"id":2075},[852,5458,2078],{},[848,5460,2081,5461,2085,5463,1263],{},[852,5462,2084],{},[852,5464,2088],{},[848,5466,2091,5467,2095],{},[1563,5468,2094],{"href":460},[865,5470],{},[873,5472,5473],{"id":2100},[852,5474,2103],{},[848,5476,2106,5477,2110],{},[852,5478,2109],{},[887,5480,5481],{"className":889,"code":2113,"language":891,"meta":892,"style":892},[852,5482,5483,5499,5525,5573],{"__ignoreMap":892},[896,5484,5485,5487,5489,5491,5493,5495,5497],{"class":898,"line":899},[896,5486,1099],{"class":1098},[896,5488,2122],{"class":1104},[896,5490,1160],{"class":1116},[896,5492,2127],{"class":910},[896,5494,1263],{"class":906},[896,5496,1707],{"class":939},[896,5498,942],{"class":906},[896,5500,5501,5503,5505,5507,5509,5511,5513,5515,5517,5519,5521,5523],{"class":898,"line":930},[896,5502,2138],{"class":910},[896,5504,952],{"class":951},[896,5506,2143],{"class":939},[896,5508,2146],{"class":906},[896,5510,2149],{"class":910},[896,5512,952],{"class":951},[896,5514,2155],{"class":2154},[896,5516,1108],{"class":906},[896,5518,2160],{"class":910},[896,5520,952],{"class":951},[896,5522,2165],{"class":2154},[896,5524,2168],{"class":906},[896,5526,5527,5529,5531,5533,5535,5537,5539,5541,5543,5545,5547,5549,5551,5553,5555,5557,5559,5561,5563,5565,5567,5569,5571],{"class":898,"line":936},[896,5528,2173],{"class":910},[896,5530,952],{"class":951},[896,5532,2143],{"class":939},[896,5534,2146],{"class":906},[896,5536,2149],{"class":910},[896,5538,952],{"class":951},[896,5540,2186],{"class":2154},[896,5542,1108],{"class":906},[896,5544,2160],{"class":910},[896,5546,952],{"class":951},[896,5548,2195],{"class":2154},[896,5550,1108],{"class":906},[896,5552,2200],{"class":910},[896,5554,952],{"class":951},[896,5556,2206],{"class":2205},[896,5558,2210],{"class":2209},[896,5560,2214],{"class":2213},[896,5562,2218],{"class":2217},[896,5564,2221],{"class":2213},[896,5566,2224],{"class":1116},[896,5568,2227],{"class":2209},[896,5570,2230],{"class":2205},[896,5572,2233],{"class":906},[896,5574,5575],{"class":898,"line":945},[896,5576,1001],{"class":906},[865,5578],{},[873,5580,5581],{"id":2242},[852,5582,2245],{},[848,5584,2248,5585,2251,5587,2255],{},[852,5586,1702],{},[852,5588,2254],{},[865,5590],{},[873,5592,5593],{"id":2260},[852,5594,2263],{},[848,5596,2266,5597,2269],{},[852,5598,1587],{},[865,5600],{},[873,5602,5603],{"id":2274},[852,5604,2277],{},[848,5606,2280,5607,2283],{},[852,5608,2160],{},[865,5610],{},[868,5612,2289],{"id":2288},[873,5614,5615],{"id":2292},[852,5616,2295],{},[848,5618,2298,5619,2301,5621,2305,5623,2309,5625,2313,5627,2316],{},[852,5620,1513],{},[852,5622,2304],{},[852,5624,2308],{},[852,5626,2312],{},[1563,5628,184],{"href":185},[865,5630],{},[868,5632,2322],{"id":2321},[873,5634,5635],{"id":2325},[852,5636,2328],{},[848,5638,2331],{},[887,5640,5641],{"className":889,"code":2334,"language":891,"meta":892,"style":892},[852,5642,5643,5671,5675,5715,5741,5759],{"__ignoreMap":892},[896,5644,5645,5647,5649,5651,5653,5655,5657,5659,5661,5663,5665,5667,5669],{"class":898,"line":899},[896,5646,1099],{"class":1098},[896,5648,2343],{"class":1104},[896,5650,1160],{"class":1116},[896,5652,2349],{"class":2348},[896,5654,2352],{"class":939},[896,5656,2355],{"class":906},[896,5658,1633],{"class":2358},[896,5660,2361],{"class":906},[896,5662,2364],{"class":2154},[896,5664,1108],{"class":906},[896,5666,2369],{"class":2154},[896,5668,2372],{"class":906},[896,5670,2375],{"class":994},[896,5672,5673],{"class":898,"line":930},[896,5674,933],{"emptyLinePlaceholder":8},[896,5676,5677,5679,5681,5683,5685,5687,5689,5691,5693,5695,5697,5699,5701,5703,5705,5707,5709,5711,5713],{"class":898,"line":936},[896,5678,2384],{"class":910},[896,5680,1263],{"class":906},[896,5682,2389],{"class":939},[896,5684,1169],{"class":906},[896,5686,967],{"class":920},[896,5688,2396],{"class":924},[896,5690,967],{"class":920},[896,5692,1108],{"class":906},[896,5694,967],{"class":920},[896,5696,2405],{"class":924},[896,5698,967],{"class":920},[896,5700,1108],{"class":906},[896,5702,2412],{"class":2154},[896,5704,2415],{"class":1116},[896,5706,2418],{"class":2154},[896,5708,2415],{"class":1116},[896,5710,2423],{"class":2154},[896,5712,2372],{"class":906},[896,5714,2428],{"class":994},[896,5716,5717,5719,5721,5723,5725,5727,5729,5731,5733,5735,5737,5739],{"class":898,"line":945},[896,5718,1099],{"class":1098},[896,5720,2435],{"class":1104},[896,5722,1160],{"class":1116},[896,5724,2343],{"class":910},[896,5726,1263],{"class":906},[896,5728,1431],{"class":939},[896,5730,1169],{"class":906},[896,5732,967],{"class":920},[896,5734,2396],{"class":924},[896,5736,967],{"class":920},[896,5738,2454],{"class":906},[896,5740,2457],{"class":994},[896,5742,5743,5745,5747,5749,5751,5753,5755,5757],{"class":898,"line":973},[896,5744,2384],{"class":910},[896,5746,1263],{"class":906},[896,5748,2466],{"class":939},[896,5750,1169],{"class":906},[896,5752,967],{"class":920},[896,5754,2396],{"class":924},[896,5756,967],{"class":920},[896,5758,1175],{"class":906},[896,5760,5761,5763,5765,5767],{"class":898,"line":991},[896,5762,2384],{"class":910},[896,5764,1263],{"class":906},[896,5766,2485],{"class":939},[896,5768,1123],{"class":906},[865,5770],{},[873,5772,5773],{"id":2492},[852,5774,2495],{},[848,5776,2498],{},[887,5778,5779],{"className":889,"code":2501,"language":891,"meta":892,"style":892},[852,5780,5781,5815,5829],{"__ignoreMap":892},[896,5782,5783,5785,5787,5789,5791,5793,5795,5797,5799,5801,5803,5805,5807,5809,5811,5813],{"class":898,"line":899},[896,5784,1099],{"class":1098},[896,5786,2510],{"class":1104},[896,5788,1160],{"class":1116},[896,5790,1163],{"class":902},[896,5792,2517],{"class":939},[896,5794,1169],{"class":906},[896,5796,2522],{"class":924},[896,5798,2525],{"class":1098},[896,5800,1289],{"class":910},[896,5802,2530],{"class":1098},[896,5804,2533],{"class":924},[896,5806,1108],{"class":906},[896,5808,2538],{"class":1098},[896,5810,2541],{"class":906},[896,5812,2544],{"class":1098},[896,5814,2547],{"class":906},[896,5816,5817,5819,5821,5823,5825,5827],{"class":898,"line":930},[896,5818,2552],{"class":902},[896,5820,1163],{"class":902},[896,5822,2557],{"class":939},[896,5824,1169],{"class":906},[896,5826,1289],{"class":910},[896,5828,1175],{"class":906},[896,5830,5831],{"class":898,"line":936},[896,5832,1001],{"class":906},[865,5834],{},[873,5836,5837],{"id":2572},[852,5838,2575],{},[848,5840,2578],{},[865,5842],{},[873,5844,5845],{"id":2583},[852,5846,2586],{},[848,5848,2589,5849,2593,5851,2597],{},[852,5850,2592],{},[852,5852,2596],{},[865,5854],{},[873,5856,5857],{"id":2602},[852,5858,2605],{},[848,5860,2608,5861,2612,5863,2615],{},[852,5862,2611],{},[852,5864,2046],{},[865,5866],{},[873,5868,5869],{"id":2620},[852,5870,2623],{},[848,5872,2626,5873,1263],{},[852,5874,2629],{},[865,5876],{},[873,5878,5879],{"id":2634},[852,5880,2637],{},[848,5882,2640,5883,2644],{},[852,5884,2643],{},[865,5886],{},[873,5888,5889],{"id":2649},[852,5890,2652],{},[848,5892,2655,5893,2659,5895,2663,5897,2667,5899,2313,5901,2673],{},[852,5894,2658],{},[852,5896,2662],{},[852,5898,2666],{},[852,5900,2670],{},[1563,5902,33],{"href":109},[865,5904],{},[868,5906,2679],{"id":2678},[848,5908,2682,5909,855,5911,2687,5913,2691],{},[852,5910,854],{},[852,5912,858],{},[852,5914,2690],{},[873,5916,5917],{"id":2694},[852,5918,2697],{},[848,5920,2700,5921,2703,5923,855,5925,1263],{},[852,5922,1381],{},[852,5924,1321],{},[852,5926,1324],{},[887,5928,5929],{"className":889,"code":2710,"language":891,"meta":892,"style":892},[852,5930,5931,5939,5947,5955,5969,5977,5985,5993,6001,6009,6017],{"__ignoreMap":892},[896,5932,5933,5935,5937],{"class":898,"line":899},[896,5934,2717],{"class":1098},[896,5936,2720],{"class":2358},[896,5938,2547],{"class":906},[896,5940,5941,5943,5945],{"class":898,"line":930},[896,5942,2727],{"class":910},[896,5944,952],{"class":1116},[896,5946,2732],{"class":2358},[896,5948,5949,5951,5953],{"class":898,"line":936},[896,5950,2737],{"class":910},[896,5952,2740],{"class":1116},[896,5954,2743],{"class":2358},[896,5956,5957,5959,5961,5963,5965,5967],{"class":898,"line":945},[896,5958,2748],{"class":910},[896,5960,2740],{"class":1116},[896,5962,2753],{"class":2358},[896,5964,2756],{"class":906},[896,5966,2759],{"class":1116},[896,5968,2743],{"class":2358},[896,5970,5971,5973,5975],{"class":898,"line":973},[896,5972,2766],{"class":910},[896,5974,952],{"class":1116},[896,5976,2743],{"class":2358},[896,5978,5979,5981,5983],{"class":898,"line":991},[896,5980,2775],{"class":910},[896,5982,952],{"class":1116},[896,5984,2743],{"class":2358},[896,5986,5987,5989,5991],{"class":898,"line":998},[896,5988,2784],{"class":910},[896,5990,952],{"class":1116},[896,5992,2743],{"class":2358},[896,5994,5995,5997,5999],{"class":898,"line":2791},[896,5996,2794],{"class":910},[896,5998,2740],{"class":1116},[896,6000,2743],{"class":2358},[896,6002,6003,6005,6007],{"class":898,"line":2801},[896,6004,2804],{"class":910},[896,6006,2740],{"class":1116},[896,6008,2743],{"class":2358},[896,6010,6011,6013,6015],{"class":898,"line":2811},[896,6012,2814],{"class":910},[896,6014,2740],{"class":1116},[896,6016,2743],{"class":2358},[896,6018,6019],{"class":898,"line":2821},[896,6020,1310],{"class":906},[873,6022,6023],{"id":2826},[852,6024,2829],{},[848,6026,2832],{},[887,6028,6029],{"className":889,"code":2835,"language":891,"meta":892,"style":892},[852,6030,6031,6039,6047,6059,6071,6089,6097,6105,6113,6121,6129],{"__ignoreMap":892},[896,6032,6033,6035,6037],{"class":898,"line":899},[896,6034,2717],{"class":1098},[896,6036,2844],{"class":2358},[896,6038,2547],{"class":906},[896,6040,6041,6043,6045],{"class":898,"line":930},[896,6042,2727],{"class":910},[896,6044,952],{"class":1116},[896,6046,2855],{"class":2358},[896,6048,6049,6051,6053,6055,6057],{"class":898,"line":936},[896,6050,2737],{"class":910},[896,6052,952],{"class":1116},[896,6054,2864],{"class":2358},[896,6056,2867],{"class":1116},[896,6058,2743],{"class":2358},[896,6060,6061,6063,6065,6067,6069],{"class":898,"line":945},[896,6062,2874],{"class":910},[896,6064,952],{"class":1116},[896,6066,2864],{"class":2358},[896,6068,2867],{"class":1116},[896,6070,2743],{"class":2358},[896,6072,6073,6075,6077,6079,6081,6083,6085,6087],{"class":898,"line":973},[896,6074,2748],{"class":910},[896,6076,952],{"class":1116},[896,6078,2753],{"class":2358},[896,6080,2756],{"class":906},[896,6082,2759],{"class":1116},[896,6084,921],{"class":920},[896,6086,2899],{"class":924},[896,6088,927],{"class":920},[896,6090,6091,6093,6095],{"class":898,"line":991},[896,6092,2766],{"class":910},[896,6094,952],{"class":1116},[896,6096,2743],{"class":2358},[896,6098,6099,6101,6103],{"class":898,"line":998},[896,6100,2775],{"class":910},[896,6102,952],{"class":1116},[896,6104,2743],{"class":2358},[896,6106,6107,6109,6111],{"class":898,"line":2791},[896,6108,2784],{"class":910},[896,6110,952],{"class":1116},[896,6112,2743],{"class":2358},[896,6114,6115,6117,6119],{"class":898,"line":2801},[896,6116,2930],{"class":910},[896,6118,952],{"class":1116},[896,6120,2743],{"class":2358},[896,6122,6123,6125,6127],{"class":898,"line":2811},[896,6124,2939],{"class":910},[896,6126,952],{"class":1116},[896,6128,2743],{"class":2358},[896,6130,6131],{"class":898,"line":2821},[896,6132,1310],{"class":906},[2949,6134,6135],{},[848,6136,6137,2956,6139,855,6141,2962,6143,2966],{},[852,6138,2955],{},[852,6140,1557],{},[852,6142,2961],{},[852,6144,2965],{},[873,6146,2970],{"id":2969},[848,6148,2973],{},[887,6150,6151],{"className":889,"code":2976,"language":891,"meta":892,"style":892},[852,6152,6153,6199,6203,6213,6219,6229,6239,6249,6259,6269,6279,6289,6293,6297,6307,6315,6325,6333,6341,6345,6349,6359,6369,6377,6381,6385,6395,6403],{"__ignoreMap":892},[896,6154,6155,6157,6159,6161,6163,6165,6167,6169,6171,6173,6175,6177,6179,6181,6183,6185,6187,6189,6191,6193,6195,6197],{"class":898,"line":899},[896,6156,1266],{"class":1098},[896,6158,2985],{"class":2358},[896,6160,1160],{"class":1116},[896,6162,921],{"class":920},[896,6164,2992],{"class":924},[896,6166,967],{"class":920},[896,6168,2867],{"class":1116},[896,6170,921],{"class":920},[896,6172,3001],{"class":924},[896,6174,967],{"class":920},[896,6176,2867],{"class":1116},[896,6178,921],{"class":920},[896,6180,3010],{"class":924},[896,6182,967],{"class":920},[896,6184,2867],{"class":1116},[896,6186,921],{"class":920},[896,6188,3019],{"class":924},[896,6190,967],{"class":920},[896,6192,2867],{"class":1116},[896,6194,921],{"class":920},[896,6196,3028],{"class":924},[896,6198,927],{"class":920},[896,6200,6201],{"class":898,"line":930},[896,6202,933],{"emptyLinePlaceholder":8},[896,6204,6205,6207,6209,6211],{"class":898,"line":936},[896,6206,1266],{"class":1098},[896,6208,3041],{"class":2358},[896,6210,1160],{"class":1116},[896,6212,2547],{"class":906},[896,6214,6215,6217],{"class":898,"line":945},[896,6216,3050],{"class":910},[896,6218,3053],{"class":1116},[896,6220,6221,6223,6225,6227],{"class":898,"line":973},[896,6222,3058],{"class":1116},[896,6224,921],{"class":920},[896,6226,3063],{"class":924},[896,6228,927],{"class":920},[896,6230,6231,6233,6235,6237],{"class":898,"line":991},[896,6232,3058],{"class":1116},[896,6234,921],{"class":920},[896,6236,3074],{"class":924},[896,6238,927],{"class":920},[896,6240,6241,6243,6245,6247],{"class":898,"line":998},[896,6242,3058],{"class":1116},[896,6244,921],{"class":920},[896,6246,3085],{"class":924},[896,6248,927],{"class":920},[896,6250,6251,6253,6255,6257],{"class":898,"line":2791},[896,6252,3058],{"class":1116},[896,6254,921],{"class":920},[896,6256,3096],{"class":924},[896,6258,927],{"class":920},[896,6260,6261,6263,6265,6267],{"class":898,"line":2801},[896,6262,3058],{"class":1116},[896,6264,921],{"class":920},[896,6266,3107],{"class":924},[896,6268,927],{"class":920},[896,6270,6271,6273,6275,6277],{"class":898,"line":2811},[896,6272,3058],{"class":1116},[896,6274,921],{"class":920},[896,6276,3118],{"class":924},[896,6278,927],{"class":920},[896,6280,6281,6283,6285,6287],{"class":898,"line":2821},[896,6282,3058],{"class":1116},[896,6284,921],{"class":920},[896,6286,3129],{"class":924},[896,6288,927],{"class":920},[896,6290,6291],{"class":898,"line":3134},[896,6292,1310],{"class":906},[896,6294,6295],{"class":898,"line":3139},[896,6296,933],{"emptyLinePlaceholder":8},[896,6298,6299,6301,6303,6305],{"class":898,"line":3144},[896,6300,1266],{"class":1098},[896,6302,3149],{"class":2358},[896,6304,1160],{"class":1116},[896,6306,2547],{"class":906},[896,6308,6309,6311,6313],{"class":898,"line":3156},[896,6310,2138],{"class":910},[896,6312,952],{"class":1116},[896,6314,2743],{"class":2358},[896,6316,6317,6319,6321,6323],{"class":898,"line":3165},[896,6318,3168],{"class":910},[896,6320,2740],{"class":1116},[896,6322,2753],{"class":2358},[896,6324,3175],{"class":906},[896,6326,6327,6329,6331],{"class":898,"line":3178},[896,6328,3181],{"class":910},[896,6330,952],{"class":1116},[896,6332,2743],{"class":2358},[896,6334,6335,6337,6339],{"class":898,"line":3188},[896,6336,3191],{"class":910},[896,6338,2740],{"class":1116},[896,6340,3196],{"class":2358},[896,6342,6343],{"class":898,"line":3199},[896,6344,1310],{"class":906},[896,6346,6347],{"class":898,"line":3204},[896,6348,933],{"emptyLinePlaceholder":8},[896,6350,6351,6353,6355,6357],{"class":898,"line":3209},[896,6352,1266],{"class":1098},[896,6354,3214],{"class":2358},[896,6356,1160],{"class":1116},[896,6358,2547],{"class":906},[896,6360,6361,6363,6365,6367],{"class":898,"line":3221},[896,6362,3168],{"class":910},[896,6364,2740],{"class":1116},[896,6366,2753],{"class":2358},[896,6368,3175],{"class":906},[896,6370,6371,6373,6375],{"class":898,"line":3232},[896,6372,3235],{"class":910},[896,6374,952],{"class":1116},[896,6376,3196],{"class":2358},[896,6378,6379],{"class":898,"line":3242},[896,6380,1310],{"class":906},[896,6382,6383],{"class":898,"line":3247},[896,6384,933],{"emptyLinePlaceholder":8},[896,6386,6387,6389,6391,6393],{"class":898,"line":3252},[896,6388,1266],{"class":1098},[896,6390,3257],{"class":2358},[896,6392,1160],{"class":1116},[896,6394,2547],{"class":906},[896,6396,6397,6399,6401],{"class":898,"line":3264},[896,6398,3235],{"class":910},[896,6400,952],{"class":1116},[896,6402,3196],{"class":2358},[896,6404,6405],{"class":898,"line":3273},[896,6406,1310],{"class":906},[848,6408,3278,6409,855,6411,3283],{},[852,6410,854],{},[852,6412,858],{},[873,6414,3287],{"id":3286},[848,6416,3290,6417,1108,6419,3296,6421,1263],{},[852,6418,3293],{},[852,6420,1751],{},[852,6422,3299],{},[887,6424,6425],{"className":889,"code":3302,"language":891,"meta":892,"style":892},[852,6426,6427,6435,6443,6451,6459,6467,6475,6483,6491,6535,6539,6543,6551,6559,6567,6575,6583,6591,6595,6599,6603,6611,6619,6627,6635,6643,6657,6665,6673,6681,6725,6729,6733,6741,6749,6757,6765,6775,6779,6783,6791,6803,6815,6819,6823,6831,6839,6851,6863,6867,6871,6879,6887,6895,6903,6911,6919,6927,6935,6979,6983,6987,6995,7033,7045,7057,7069],{"__ignoreMap":892},[896,6428,6429,6431,6433],{"class":898,"line":899},[896,6430,2717],{"class":1098},[896,6432,3311],{"class":2358},[896,6434,2547],{"class":906},[896,6436,6437,6439,6441],{"class":898,"line":930},[896,6438,2138],{"class":910},[896,6440,2740],{"class":1116},[896,6442,2743],{"class":2358},[896,6444,6445,6447,6449],{"class":898,"line":936},[896,6446,3235],{"class":910},[896,6448,2740],{"class":1116},[896,6450,3196],{"class":2358},[896,6452,6453,6455,6457],{"class":898,"line":945},[896,6454,2737],{"class":910},[896,6456,2740],{"class":1116},[896,6458,3196],{"class":2358},[896,6460,6461,6463,6465],{"class":898,"line":973},[896,6462,3342],{"class":910},[896,6464,2740],{"class":1116},[896,6466,2743],{"class":2358},[896,6468,6469,6471,6473],{"class":898,"line":991},[896,6470,3351],{"class":910},[896,6472,2740],{"class":1116},[896,6474,2743],{"class":2358},[896,6476,6477,6479,6481],{"class":898,"line":998},[896,6478,3360],{"class":910},[896,6480,2740],{"class":1116},[896,6482,2743],{"class":2358},[896,6484,6485,6487,6489],{"class":898,"line":2791},[896,6486,3369],{"class":910},[896,6488,2740],{"class":1116},[896,6490,3196],{"class":2358},[896,6492,6493,6495,6497,6499,6501,6503,6505,6507,6509,6511,6513,6515,6517,6519,6521,6523,6525,6527,6529,6531,6533],{"class":898,"line":2801},[896,6494,3378],{"class":910},[896,6496,2740],{"class":1116},[896,6498,921],{"class":920},[896,6500,2992],{"class":924},[896,6502,967],{"class":920},[896,6504,2867],{"class":1116},[896,6506,921],{"class":920},[896,6508,3001],{"class":924},[896,6510,967],{"class":920},[896,6512,2867],{"class":1116},[896,6514,921],{"class":920},[896,6516,3010],{"class":924},[896,6518,967],{"class":920},[896,6520,2867],{"class":1116},[896,6522,921],{"class":920},[896,6524,3019],{"class":924},[896,6526,967],{"class":920},[896,6528,2867],{"class":1116},[896,6530,921],{"class":920},[896,6532,3028],{"class":924},[896,6534,927],{"class":920},[896,6536,6537],{"class":898,"line":2811},[896,6538,1310],{"class":906},[896,6540,6541],{"class":898,"line":2821},[896,6542,933],{"emptyLinePlaceholder":8},[896,6544,6545,6547,6549],{"class":898,"line":3134},[896,6546,2717],{"class":1098},[896,6548,3433],{"class":2358},[896,6550,2547],{"class":906},[896,6552,6553,6555,6557],{"class":898,"line":3139},[896,6554,3440],{"class":910},[896,6556,952],{"class":1116},[896,6558,3445],{"class":2358},[896,6560,6561,6563,6565],{"class":898,"line":3144},[896,6562,3450],{"class":910},[896,6564,952],{"class":1116},[896,6566,2547],{"class":906},[896,6568,6569,6571,6573],{"class":898,"line":3156},[896,6570,3459],{"class":910},[896,6572,952],{"class":1116},[896,6574,3196],{"class":2358},[896,6576,6577,6579,6581],{"class":898,"line":3165},[896,6578,3468],{"class":910},[896,6580,952],{"class":1116},[896,6582,3196],{"class":2358},[896,6584,6585,6587,6589],{"class":898,"line":3178},[896,6586,3477],{"class":910},[896,6588,952],{"class":1116},[896,6590,3196],{"class":2358},[896,6592,6593],{"class":898,"line":3188},[896,6594,3486],{"class":906},[896,6596,6597],{"class":898,"line":3199},[896,6598,1310],{"class":906},[896,6600,6601],{"class":898,"line":3204},[896,6602,933],{"emptyLinePlaceholder":8},[896,6604,6605,6607,6609],{"class":898,"line":3209},[896,6606,2717],{"class":1098},[896,6608,3501],{"class":2358},[896,6610,2547],{"class":906},[896,6612,6613,6615,6617],{"class":898,"line":3221},[896,6614,3508],{"class":910},[896,6616,952],{"class":1116},[896,6618,3196],{"class":2358},[896,6620,6621,6623,6625],{"class":898,"line":3232},[896,6622,2138],{"class":910},[896,6624,952],{"class":1116},[896,6626,2743],{"class":2358},[896,6628,6629,6631,6633],{"class":898,"line":3242},[896,6630,3525],{"class":910},[896,6632,952],{"class":1116},[896,6634,2743],{"class":2358},[896,6636,6637,6639,6641],{"class":898,"line":3247},[896,6638,3534],{"class":910},[896,6640,952],{"class":1116},[896,6642,2743],{"class":2358},[896,6644,6645,6647,6649,6651,6653,6655],{"class":898,"line":3252},[896,6646,3543],{"class":910},[896,6648,952],{"class":1116},[896,6650,2753],{"class":2358},[896,6652,2756],{"class":906},[896,6654,2759],{"class":1116},[896,6656,3554],{"class":2358},[896,6658,6659,6661,6663],{"class":898,"line":3264},[896,6660,3559],{"class":910},[896,6662,952],{"class":1116},[896,6664,2743],{"class":2358},[896,6666,6667,6669,6671],{"class":898,"line":3273},[896,6668,3568],{"class":910},[896,6670,952],{"class":1116},[896,6672,2743],{"class":2358},[896,6674,6675,6677,6679],{"class":898,"line":3575},[896,6676,3578],{"class":910},[896,6678,952],{"class":1116},[896,6680,3196],{"class":2358},[896,6682,6683,6685,6687,6689,6691,6693,6695,6697,6699,6701,6703,6705,6707,6709,6711,6713,6715,6717,6719,6721,6723],{"class":898,"line":3585},[896,6684,3588],{"class":910},[896,6686,952],{"class":1116},[896,6688,921],{"class":920},[896,6690,3001],{"class":924},[896,6692,967],{"class":920},[896,6694,2867],{"class":1116},[896,6696,921],{"class":920},[896,6698,3010],{"class":924},[896,6700,967],{"class":920},[896,6702,2867],{"class":1116},[896,6704,921],{"class":920},[896,6706,3019],{"class":924},[896,6708,967],{"class":920},[896,6710,2867],{"class":1116},[896,6712,921],{"class":920},[896,6714,3028],{"class":924},[896,6716,967],{"class":920},[896,6718,2867],{"class":1116},[896,6720,921],{"class":920},[896,6722,2992],{"class":924},[896,6724,927],{"class":920},[896,6726,6727],{"class":898,"line":3631},[896,6728,1310],{"class":906},[896,6730,6731],{"class":898,"line":3636},[896,6732,933],{"emptyLinePlaceholder":8},[896,6734,6735,6737,6739],{"class":898,"line":3641},[896,6736,2717],{"class":1098},[896,6738,3646],{"class":2358},[896,6740,2547],{"class":906},[896,6742,6743,6745,6747],{"class":898,"line":3651},[896,6744,3654],{"class":910},[896,6746,952],{"class":1116},[896,6748,3196],{"class":2358},[896,6750,6751,6753,6755],{"class":898,"line":3661},[896,6752,3664],{"class":910},[896,6754,952],{"class":1116},[896,6756,3196],{"class":2358},[896,6758,6759,6761,6763],{"class":898,"line":3671},[896,6760,3674],{"class":910},[896,6762,952],{"class":1116},[896,6764,3196],{"class":2358},[896,6766,6767,6769,6771,6773],{"class":898,"line":3681},[896,6768,3684],{"class":910},[896,6770,2740],{"class":1116},[896,6772,3501],{"class":2358},[896,6774,3175],{"class":906},[896,6776,6777],{"class":898,"line":3693},[896,6778,1310],{"class":906},[896,6780,6781],{"class":898,"line":3698},[896,6782,933],{"emptyLinePlaceholder":8},[896,6784,6785,6787,6789],{"class":898,"line":3703},[896,6786,2717],{"class":1098},[896,6788,3708],{"class":2358},[896,6790,2547],{"class":906},[896,6792,6793,6795,6797,6799,6801],{"class":898,"line":3713},[896,6794,3716],{"class":910},[896,6796,952],{"class":1116},[896,6798,2753],{"class":2358},[896,6800,2867],{"class":1116},[896,6802,3725],{"class":2358},[896,6804,6805,6807,6809,6811,6813],{"class":898,"line":3728},[896,6806,3351],{"class":910},[896,6808,952],{"class":1116},[896,6810,3735],{"class":2358},[896,6812,2867],{"class":1116},[896,6814,3554],{"class":2358},[896,6816,6817],{"class":898,"line":3742},[896,6818,1310],{"class":906},[896,6820,6821],{"class":898,"line":3747},[896,6822,933],{"emptyLinePlaceholder":8},[896,6824,6825,6827,6829],{"class":898,"line":3752},[896,6826,2717],{"class":1098},[896,6828,3757],{"class":2358},[896,6830,2547],{"class":906},[896,6832,6833,6835,6837],{"class":898,"line":3762},[896,6834,3765],{"class":910},[896,6836,952],{"class":1116},[896,6838,2743],{"class":2358},[896,6840,6841,6843,6845,6847,6849],{"class":898,"line":3772},[896,6842,3775],{"class":910},[896,6844,952],{"class":1116},[896,6846,2753],{"class":2358},[896,6848,2867],{"class":1116},[896,6850,3725],{"class":2358},[896,6852,6853,6855,6857,6859,6861],{"class":898,"line":3786},[896,6854,3789],{"class":910},[896,6856,952],{"class":1116},[896,6858,3735],{"class":2358},[896,6860,2867],{"class":1116},[896,6862,3554],{"class":2358},[896,6864,6865],{"class":898,"line":3800},[896,6866,1310],{"class":906},[896,6868,6869],{"class":898,"line":3805},[896,6870,933],{"emptyLinePlaceholder":8},[896,6872,6873,6875,6877],{"class":898,"line":3810},[896,6874,2717],{"class":1098},[896,6876,3815],{"class":2358},[896,6878,2547],{"class":906},[896,6880,6881,6883,6885],{"class":898,"line":3820},[896,6882,2138],{"class":910},[896,6884,952],{"class":1116},[896,6886,2743],{"class":2358},[896,6888,6889,6891,6893],{"class":898,"line":3829},[896,6890,3235],{"class":910},[896,6892,952],{"class":1116},[896,6894,3196],{"class":2358},[896,6896,6897,6899,6901],{"class":898,"line":3838},[896,6898,2737],{"class":910},[896,6900,952],{"class":1116},[896,6902,3196],{"class":2358},[896,6904,6905,6907,6909],{"class":898,"line":3847},[896,6906,3342],{"class":910},[896,6908,952],{"class":1116},[896,6910,2743],{"class":2358},[896,6912,6913,6915,6917],{"class":898,"line":3856},[896,6914,3351],{"class":910},[896,6916,952],{"class":1116},[896,6918,2743],{"class":2358},[896,6920,6921,6923,6925],{"class":898,"line":3865},[896,6922,3360],{"class":910},[896,6924,952],{"class":1116},[896,6926,2743],{"class":2358},[896,6928,6929,6931,6933],{"class":898,"line":3874},[896,6930,3369],{"class":910},[896,6932,952],{"class":1116},[896,6934,3196],{"class":2358},[896,6936,6937,6939,6941,6943,6945,6947,6949,6951,6953,6955,6957,6959,6961,6963,6965,6967,6969,6971,6973,6975,6977],{"class":898,"line":3883},[896,6938,3378],{"class":910},[896,6940,952],{"class":1116},[896,6942,921],{"class":920},[896,6944,2992],{"class":924},[896,6946,967],{"class":920},[896,6948,2867],{"class":1116},[896,6950,921],{"class":920},[896,6952,3001],{"class":924},[896,6954,967],{"class":920},[896,6956,2867],{"class":1116},[896,6958,921],{"class":920},[896,6960,3010],{"class":924},[896,6962,967],{"class":920},[896,6964,2867],{"class":1116},[896,6966,921],{"class":920},[896,6968,3019],{"class":924},[896,6970,967],{"class":920},[896,6972,2867],{"class":1116},[896,6974,921],{"class":920},[896,6976,3028],{"class":924},[896,6978,927],{"class":920},[896,6980,6981],{"class":898,"line":3928},[896,6982,1310],{"class":906},[896,6984,6985],{"class":898,"line":3933},[896,6986,933],{"emptyLinePlaceholder":8},[896,6988,6989,6991,6993],{"class":898,"line":3938},[896,6990,1266],{"class":1098},[896,6992,3943],{"class":2358},[896,6994,3946],{"class":1116},[896,6996,6997,6999,7001,7003,7005,7007,7009,7011,7013,7015,7017,7019,7021,7023,7025,7027,7029,7031],{"class":898,"line":3949},[896,6998,3952],{"class":1116},[896,7000,3955],{"class":2358},[896,7002,2355],{"class":906},[896,7004,1633],{"class":2358},[896,7006,2867],{"class":1116},[896,7008,907],{"class":906},[896,7010,3966],{"class":910},[896,7012,952],{"class":1116},[896,7014,2753],{"class":2358},[896,7016,3973],{"class":906},[896,7018,3976],{"class":910},[896,7020,952],{"class":1116},[896,7022,2864],{"class":2358},[896,7024,3973],{"class":906},[896,7026,1289],{"class":910},[896,7028,952],{"class":1116},[896,7030,2864],{"class":2358},[896,7032,3991],{"class":906},[896,7034,7035,7037,7039,7041,7043],{"class":898,"line":3994},[896,7036,3952],{"class":1116},[896,7038,3955],{"class":2358},[896,7040,2355],{"class":906},[896,7042,4004],{"class":4003},[896,7044,4007],{"class":906},[896,7046,7047,7049,7051,7053,7055],{"class":898,"line":4010},[896,7048,3952],{"class":1116},[896,7050,3955],{"class":2358},[896,7052,2355],{"class":906},[896,7054,4019],{"class":4003},[896,7056,4007],{"class":906},[896,7058,7059,7061,7063,7065,7067],{"class":898,"line":4024},[896,7060,3952],{"class":1116},[896,7062,3955],{"class":2358},[896,7064,2355],{"class":906},[896,7066,4033],{"class":4003},[896,7068,4007],{"class":906},[896,7070,7071,7073,7075,7077,7079,7081,7083],{"class":898,"line":4038},[896,7072,3952],{"class":1116},[896,7074,3955],{"class":2358},[896,7076,4045],{"class":906},[896,7078,3966],{"class":910},[896,7080,952],{"class":1116},[896,7082,2753],{"class":2358},[896,7084,3991],{"class":906},[848,7086,7087,4058,7089,4062,7091,4066,7093,4069,7095,4073,7097,4077],{},[852,7088,3293],{},[852,7090,4061],{},[852,7092,4065],{},[852,7094,3299],{},[852,7096,4072],{},[852,7098,4076],{},[873,7100,7101],{"id":4080},[852,7102,4083],{},[848,7104,4086,7105,4089,7107,4093],{},[852,7106,160],{},[852,7108,4092],{},[887,7110,7111],{"className":889,"code":4096,"language":891,"meta":892,"style":892},[852,7112,7113,7131,7161],{"__ignoreMap":892},[896,7114,7115,7117,7119,7121,7123,7125,7127,7129],{"class":898,"line":899},[896,7116,1266],{"class":1098},[896,7118,3955],{"class":2358},[896,7120,2355],{"class":906},[896,7122,4109],{"class":4003},[896,7124,1160],{"class":1116},[896,7126,4114],{"class":2358},[896,7128,4117],{"class":906},[896,7130,4120],{"class":1116},[896,7132,7133,7135,7137,7139,7141,7143,7145,7147,7149,7151,7153,7155,7157,7159],{"class":898,"line":930},[896,7134,3952],{"class":1116},[896,7136,907],{"class":906},[896,7138,4129],{"class":910},[896,7140,952],{"class":1116},[896,7142,4134],{"class":2358},[896,7144,4137],{"class":906},[896,7146,1702],{"class":910},[896,7148,952],{"class":1116},[896,7150,4144],{"class":2358},[896,7152,4147],{"class":906},[896,7154,4150],{"class":910},[896,7156,952],{"class":1116},[896,7158,2753],{"class":2358},[896,7160,4157],{"class":906},[896,7162,7163,7165,7167,7169,7171,7173,7175,7177,7179,7181,7183,7185,7187,7189],{"class":898,"line":936},[896,7164,3952],{"class":1116},[896,7166,907],{"class":906},[896,7168,4129],{"class":910},[896,7170,952],{"class":1116},[896,7172,4170],{"class":2358},[896,7174,3973],{"class":906},[896,7176,1517],{"class":910},[896,7178,952],{"class":1116},[896,7180,2753],{"class":2358},[896,7182,3973],{"class":906},[896,7184,4150],{"class":910},[896,7186,952],{"class":1116},[896,7188,2753],{"class":2358},[896,7190,4157],{"class":906},[873,7192,7193],{"id":4191},[852,7194,4194],{},[848,7196,4197,7197,4200],{},[852,7198,4083],{},[887,7200,7201],{"className":889,"code":4203,"language":891,"meta":892,"style":892},[852,7202,7203,7229,7237,7249],{"__ignoreMap":892},[896,7204,7205,7207,7209,7211,7213,7215,7217,7219,7221,7223,7225,7227],{"class":898,"line":899},[896,7206,1266],{"class":1098},[896,7208,4212],{"class":2358},[896,7210,2355],{"class":906},[896,7212,4109],{"class":4003},[896,7214,4117],{"class":906},[896,7216,1117],{"class":1116},[896,7218,3955],{"class":2358},[896,7220,2355],{"class":906},[896,7222,4109],{"class":4003},[896,7224,4117],{"class":906},[896,7226,4231],{"class":1116},[896,7228,2547],{"class":906},[896,7230,7231,7233,7235],{"class":898,"line":930},[896,7232,4238],{"class":910},[896,7234,2740],{"class":1116},[896,7236,4243],{"class":2358},[896,7238,7239,7241,7243,7245,7247],{"class":898,"line":936},[896,7240,4248],{"class":910},[896,7242,2740],{"class":1116},[896,7244,2753],{"class":2358},[896,7246,2867],{"class":1116},[896,7248,3554],{"class":2358},[896,7250,7251],{"class":898,"line":945},[896,7252,1310],{"class":906},[873,7254,7255],{"id":4263},[852,7256,4266],{},[848,7258,4269,7259,1263],{},[852,7260,4272],{},[887,7262,7263],{"className":889,"code":4275,"language":891,"meta":892,"style":892},[852,7264,7265,7273,7283,7293,7303,7313,7323,7333,7343,7353,7363,7373],{"__ignoreMap":892},[896,7266,7267,7269,7271],{"class":898,"line":899},[896,7268,1266],{"class":1098},[896,7270,4284],{"class":2358},[896,7272,3946],{"class":1116},[896,7274,7275,7277,7279,7281],{"class":898,"line":930},[896,7276,3952],{"class":1116},[896,7278,921],{"class":920},[896,7280,4295],{"class":924},[896,7282,927],{"class":920},[896,7284,7285,7287,7289,7291],{"class":898,"line":936},[896,7286,3952],{"class":1116},[896,7288,921],{"class":920},[896,7290,4306],{"class":924},[896,7292,927],{"class":920},[896,7294,7295,7297,7299,7301],{"class":898,"line":945},[896,7296,3952],{"class":1116},[896,7298,921],{"class":920},[896,7300,4317],{"class":924},[896,7302,927],{"class":920},[896,7304,7305,7307,7309,7311],{"class":898,"line":973},[896,7306,3952],{"class":1116},[896,7308,921],{"class":920},[896,7310,1535],{"class":924},[896,7312,927],{"class":920},[896,7314,7315,7317,7319,7321],{"class":898,"line":991},[896,7316,3952],{"class":1116},[896,7318,921],{"class":920},[896,7320,1550],{"class":924},[896,7322,927],{"class":920},[896,7324,7325,7327,7329,7331],{"class":898,"line":998},[896,7326,3952],{"class":1116},[896,7328,921],{"class":920},[896,7330,4348],{"class":924},[896,7332,927],{"class":920},[896,7334,7335,7337,7339,7341],{"class":898,"line":2791},[896,7336,3952],{"class":1116},[896,7338,921],{"class":920},[896,7340,4359],{"class":924},[896,7342,927],{"class":920},[896,7344,7345,7347,7349,7351],{"class":898,"line":2801},[896,7346,3952],{"class":1116},[896,7348,921],{"class":920},[896,7350,1529],{"class":924},[896,7352,927],{"class":920},[896,7354,7355,7357,7359,7361],{"class":898,"line":2811},[896,7356,3952],{"class":1116},[896,7358,921],{"class":920},[896,7360,4380],{"class":924},[896,7362,927],{"class":920},[896,7364,7365,7367,7369,7371],{"class":898,"line":2821},[896,7366,3952],{"class":1116},[896,7368,921],{"class":920},[896,7370,4391],{"class":924},[896,7372,927],{"class":920},[896,7374,7375,7377,7379,7381,7383,7385],{"class":898,"line":3134},[896,7376,3952],{"class":1116},[896,7378,1257],{"class":906},[896,7380,1633],{"class":2358},[896,7382,4404],{"class":1116},[896,7384,4407],{"class":906},[896,7386,4410],{"class":994},[873,7388,7389],{"id":4413},[852,7390,4416],{},[848,7392,4419,7393,855,7395,1263],{},[852,7394,4422],{},[852,7396,2955],{},[887,7398,7399],{"className":889,"code":4427,"language":891,"meta":892,"style":892},[852,7400,7401,7411,7419,7427,7437,7447],{"__ignoreMap":892},[896,7402,7403,7405,7407,7409],{"class":898,"line":899},[896,7404,1266],{"class":1098},[896,7406,4436],{"class":2358},[896,7408,1160],{"class":1116},[896,7410,2547],{"class":906},[896,7412,7413,7415,7417],{"class":898,"line":930},[896,7414,4445],{"class":910},[896,7416,952],{"class":1116},[896,7418,3196],{"class":2358},[896,7420,7421,7423,7425],{"class":898,"line":936},[896,7422,4454],{"class":910},[896,7424,952],{"class":1116},[896,7426,2743],{"class":2358},[896,7428,7429,7431,7433,7435],{"class":898,"line":945},[896,7430,4463],{"class":910},[896,7432,952],{"class":1116},[896,7434,2753],{"class":2358},[896,7436,4470],{"class":994},[896,7438,7439,7441,7443,7445],{"class":898,"line":973},[896,7440,2794],{"class":910},[896,7442,952],{"class":1116},[896,7444,2753],{"class":2358},[896,7446,4481],{"class":994},[896,7448,7449],{"class":898,"line":991},[896,7450,1310],{"class":906},[4487,7452,4489],{},{"title":892,"searchDepth":930,"depth":930,"links":7454},[7455,7459,7467,7473,7480,7489,7496,7499,7509],{"id":870,"depth":930,"text":871,"children":7456},[7457,7458],{"id":875,"depth":936,"text":878},{"id":1049,"depth":936,"text":1052},{"id":1131,"depth":930,"text":1132,"children":7460},[7461,7462,7463,7464,7465,7466],{"id":1135,"depth":936,"text":1138},{"id":1195,"depth":936,"text":1198},{"id":1329,"depth":936,"text":1332},{"id":1347,"depth":936,"text":1350},{"id":1369,"depth":936,"text":1372},{"id":1500,"depth":936,"text":1503},{"id":1570,"depth":930,"text":1571,"children":7468},[7469,7470,7471,7472],{"id":1574,"depth":936,"text":1577},{"id":1767,"depth":936,"text":1770},{"id":1778,"depth":936,"text":1781},{"id":1831,"depth":936,"text":1834},{"id":1233,"depth":930,"text":112,"children":7474},[7475,7476,7477,7478,7479],{"id":1854,"depth":936,"text":1857},{"id":1865,"depth":936,"text":1868},{"id":1884,"depth":936,"text":1887},{"id":1898,"depth":936,"text":4516},{"id":1913,"depth":936,"text":1916},{"id":1924,"depth":930,"text":1925,"children":7481},[7482,7483,7484,7485,7486,7487,7488],{"id":1928,"depth":936,"text":1931},{"id":1942,"depth":936,"text":1945},{"id":1966,"depth":936,"text":1969},{"id":1981,"depth":936,"text":1984},{"id":1999,"depth":936,"text":2002},{"id":2037,"depth":936,"text":2040},{"id":2056,"depth":936,"text":2059},{"id":2071,"depth":930,"text":2072,"children":7490},[7491,7492,7493,7494,7495],{"id":2075,"depth":936,"text":2078},{"id":2100,"depth":936,"text":2103},{"id":2242,"depth":936,"text":2245},{"id":2260,"depth":936,"text":2263},{"id":2274,"depth":936,"text":2277},{"id":2288,"depth":930,"text":2289,"children":7497},[7498],{"id":2292,"depth":936,"text":2295},{"id":2321,"depth":930,"text":2322,"children":7500},[7501,7502,7503,7504,7505,7506,7507,7508],{"id":2325,"depth":936,"text":2328},{"id":2492,"depth":936,"text":2495},{"id":2572,"depth":936,"text":2575},{"id":2583,"depth":936,"text":2586},{"id":2602,"depth":936,"text":2605},{"id":2620,"depth":936,"text":2623},{"id":2634,"depth":936,"text":2637},{"id":2649,"depth":936,"text":2652},{"id":2678,"depth":930,"text":2679,"children":7510},[7511,7512,7513,7514,7515,7516,7517,7518],{"id":2694,"depth":936,"text":2697},{"id":2826,"depth":936,"text":2829},{"id":2969,"depth":936,"text":2970},{"id":3286,"depth":936,"text":3287},{"id":4080,"depth":936,"text":4083},{"id":4191,"depth":936,"text":4194},{"id":4263,"depth":936,"text":4266},{"id":4413,"depth":936,"text":4416},{},{"title":214,"description":4557},1780436293507]