[{"data":1,"prerenderedAt":1038},["ShallowReactive",2],{"navLinks":3,"sidebar_docs_navigation_\u002Fdocs\u002Fgetting-started":64,"navigation":74,"navLinks_footer":784,"\u002Fdocs\u002Fgetting-started_page":797,"\u002Fdocs\u002Fgetting-started_surround":950,"\u002Fdocs\u002Fgetting-started":951},{"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":70,"path":11,"stem":71,"children":72},"Introduction","docs\u002Fgetting-started\u002Findex",[73],{"title":70,"path":11,"stem":71},[75],{"title":9,"path":66,"stem":67,"children":76,"page":53},[77,225,343,346,524,591],{"title":20,"path":22,"stem":78,"children":79},"docs\u002Fauth-h3client\u002Findex",[80,81,90,127,153,175,178,199,203],{"title":20,"path":22,"stem":78},{"title":14,"path":82,"stem":83,"children":84},"\u002Fdocs\u002Fauth-h3client\u002Fgetting-started","docs\u002Fauth-h3client\u002F00.getting-started\u002Findex",[85,86],{"title":14,"path":82,"stem":83},{"title":87,"path":88,"stem":89},"Nuxt Module","\u002Fdocs\u002Fauth-h3client\u002Fgetting-started\u002Fnuxt","docs\u002Fauth-h3client\u002F00.getting-started\u002F00.nuxt",{"title":91,"path":92,"stem":93,"children":94},"Essentials","\u002Fdocs\u002Fauth-h3client\u002Fessentials","docs\u002Fauth-h3client\u002F01.essentials\u002Findex",[95,96,100,104,108,112,116,119,123],{"title":91,"path":92,"stem":93},{"title":97,"path":98,"stem":99},"Session Management","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fsession","docs\u002Fauth-h3client\u002F01.essentials\u002F00.session",{"title":101,"path":102,"stem":103},"Route Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Froute-protection","docs\u002Fauth-h3client\u002F01.essentials\u002F01.route-protection",{"title":105,"path":106,"stem":107},"CSRF Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcsrf","docs\u002Fauth-h3client\u002F01.essentials\u002F02.csrf",{"title":109,"path":110,"stem":111},"Auth Flows","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fauth-flows","docs\u002Fauth-h3client\u002F01.essentials\u002F03.auth-flows",{"title":113,"path":114,"stem":115},"OAuth and OIDC","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Foauth","docs\u002Fauth-h3client\u002F01.essentials\u002F04.oauth",{"title":33,"path":117,"stem":118},"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fbot-detection","docs\u002Fauth-h3client\u002F01.essentials\u002F05.bot-detection",{"title":120,"path":121,"stem":122},"Cookies","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcookies","docs\u002Fauth-h3client\u002F01.essentials\u002F06.cookies",{"title":124,"path":125,"stem":126},"Logging","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Flogging","docs\u002Fauth-h3client\u002F01.essentials\u002F07.logging",{"title":128,"path":129,"stem":130,"children":131},"MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa","docs\u002Fauth-h3client\u002F02.mfa\u002Findex",[132,133,137,141,145,149],{"title":128,"path":129,"stem":130},{"title":134,"path":135,"stem":136},"Built-in MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fbuilt-in-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F01.built-in-flow",{"title":138,"path":139,"stem":140},"Password Reset","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fpassword-reset","docs\u002Fauth-h3client\u002F02.mfa\u002F02.password-reset",{"title":142,"path":143,"stem":144},"Email Change","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Femail-change","docs\u002Fauth-h3client\u002F02.mfa\u002F03.email-change",{"title":146,"path":147,"stem":148},"Custom MFA Flow","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fcustom-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F04.custom-flow",{"title":150,"path":151,"stem":152},"Client-Side MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fclient-side","docs\u002Fauth-h3client\u002F02.mfa\u002F05.client-side",{"title":154,"path":155,"stem":156,"children":157},"Client-side","\u002Fdocs\u002Fauth-h3client\u002Fclient","docs\u002Fauth-h3client\u002F03.client\u002Findex",[158,159,163,167,171],{"title":154,"path":155,"stem":156},{"title":160,"path":161,"stem":162},"useAuthData","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-auth-data","docs\u002Fauth-h3client\u002F03.client\u002F00.use-auth-data",{"title":164,"path":165,"stem":166},"useMagicLink","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-magic-link","docs\u002Fauth-h3client\u002F03.client\u002F01.use-magic-link",{"title":168,"path":169,"stem":170},"executeRequest","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fexecute-request","docs\u002Fauth-h3client\u002F03.client\u002F02.execute-request",{"title":172,"path":173,"stem":174},"getCsrfToken","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fget-csrf-token","docs\u002Fauth-h3client\u002F03.client\u002F03.get-csrf-token",{"title":38,"path":176,"stem":177},"\u002Fdocs\u002Fauth-h3client\u002Fsecurity","docs\u002Fauth-h3client\u002F04.security",{"title":179,"path":180,"stem":181,"children":182,"page":53},"Guides","\u002Fdocs\u002Fauth-h3client\u002Fguides","docs\u002Fauth-h3client\u002F05.guides",[183,187,191,195],{"title":184,"path":185,"stem":186},"H3 and Nitro Setup","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fh3-nitro","docs\u002Fauth-h3client\u002F05.guides\u002F00.h3-nitro",{"title":188,"path":189,"stem":190},"HMAC Inter-service Auth","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fhmac","docs\u002Fauth-h3client\u002F05.guides\u002Fhmac",{"title":192,"path":193,"stem":194},"Image Upload","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fimage-upload","docs\u002Fauth-h3client\u002F05.guides\u002Fimage-upload",{"title":196,"path":197,"stem":198},"mTLS Configuration","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fmtls","docs\u002Fauth-h3client\u002F05.guides\u002Fmtls",{"title":200,"path":201,"stem":202},"Configuration","\u002Fdocs\u002Fauth-h3client\u002Fconfiguration","docs\u002Fauth-h3client\u002F06.configuration",{"title":204,"path":205,"stem":206,"children":207},"API Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi","docs\u002Fauth-h3client\u002F07.api\u002Findex",[208,209,213,217,221],{"title":204,"path":205,"stem":206},{"title":210,"path":211,"stem":212},"Routes Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcontrollers","docs\u002Fauth-h3client\u002F07.api\u002F00.controllers",{"title":214,"path":215,"stem":216},"Middleware Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fmiddleware","docs\u002Fauth-h3client\u002F07.api\u002F01.middleware",{"title":218,"path":219,"stem":220},"Client-side Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcomposables","docs\u002Fauth-h3client\u002F07.api\u002F02.composables",{"title":222,"path":223,"stem":224},"Utilities","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Futilities","docs\u002Fauth-h3client\u002F07.api\u002F03.utilities",{"title":226,"path":35,"stem":227,"children":228},"Bot Detector","docs\u002Fbot-detection\u002Findex",[229,230,233,237,241,260,334,337,340],{"title":226,"path":35,"stem":227},{"title":14,"path":231,"stem":232},"\u002Fdocs\u002Fbot-detection\u002Fgetting-started","docs\u002Fbot-detection\u002F00.getting-started",{"title":234,"path":235,"stem":236},"CLI","\u002Fdocs\u002Fbot-detection\u002Fcli","docs\u002Fbot-detection\u002F01.cli",{"title":238,"path":239,"stem":240},"Data Sources","\u002Fdocs\u002Fbot-detection\u002Fdata-sources","docs\u002Fbot-detection\u002F02.data-sources",{"title":179,"path":242,"stem":243,"children":244,"page":53},"\u002Fdocs\u002Fbot-detection\u002Fguides","docs\u002Fbot-detection\u002F03.guides",[245,249,253,256],{"title":246,"path":247,"stem":248},"Custom Checkers","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fcustom","docs\u002Fbot-detection\u002F03.guides\u002FCUSTOM",{"title":250,"path":251,"stem":252},"Scheduling Database Generation","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fgenerate","docs\u002Fbot-detection\u002F03.guides\u002FGENERATE",{"title":124,"path":254,"stem":255},"\u002Fdocs\u002Fbot-detection\u002Fguides\u002Flogging","docs\u002Fbot-detection\u002F03.guides\u002FLOGGING",{"title":257,"path":258,"stem":259},"Score Modes and Reputation Healing","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fscore","docs\u002Fbot-detection\u002F03.guides\u002FSCORE",{"title":261,"path":262,"stem":263,"children":264},"Checkers","\u002Fdocs\u002Fbot-detection\u002Fcheckers","docs\u002Fbot-detection\u002F04.checkers\u002Findex",[265,266,270,274,278,282,286,290,294,298,302,306,310,314,318,322,326,330],{"title":261,"path":262,"stem":263},{"title":267,"path":268,"stem":269},"IP Validation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fip-validation","docs\u002Fbot-detection\u002F04.checkers\u002F01.ip-validation",{"title":271,"path":272,"stem":273},"Good \u002F Bad Bot Verification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgood-bots","docs\u002Fbot-detection\u002F04.checkers\u002F02.good-bots",{"title":275,"path":276,"stem":277},"Browser & Device Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbrowser-device","docs\u002Fbot-detection\u002F04.checkers\u002F03.browser-device",{"title":279,"path":280,"stem":281},"Locale Map","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Flocale-map","docs\u002Fbot-detection\u002F04.checkers\u002F04.locale-map",{"title":283,"path":284,"stem":285},"Known Threats","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-threats","docs\u002Fbot-detection\u002F04.checkers\u002F05.known-threats",{"title":287,"path":288,"stem":289},"ASN Classification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fasn-classification","docs\u002Fbot-detection\u002F04.checkers\u002F06.asn-classification",{"title":291,"path":292,"stem":293},"Tor Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftor-analysis","docs\u002Fbot-detection\u002F04.checkers\u002F07.tor-analysis",{"title":295,"path":296,"stem":297},"Timezone Consistency","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftimezone-consistency","docs\u002Fbot-detection\u002F04.checkers\u002F08.timezone-consistency",{"title":299,"path":300,"stem":301},"Honeypot","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fhoneypot","docs\u002Fbot-detection\u002F04.checkers\u002F09.honeypot",{"title":303,"path":304,"stem":305},"Known Bad IPs","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ips","docs\u002Fbot-detection\u002F04.checkers\u002F10.known-bad-ips",{"title":307,"path":308,"stem":309},"Behavior Rate","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbehavior-rate","docs\u002Fbot-detection\u002F04.checkers\u002F11.behavior-rate",{"title":311,"path":312,"stem":313},"Proxy \u002F ISP \u002F Cookie","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fproxy-isp-cookies","docs\u002Fbot-detection\u002F04.checkers\u002F12.proxy-isp-cookies",{"title":315,"path":316,"stem":317},"Session Coherence","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fsession-coherence","docs\u002Fbot-detection\u002F04.checkers\u002F13.session-coherence",{"title":319,"path":320,"stem":321},"Velocity Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fvelocity-fingerprint","docs\u002Fbot-detection\u002F04.checkers\u002F14.velocity-fingerprint",{"title":323,"path":324,"stem":325},"UA & Header Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fua-header","docs\u002Fbot-detection\u002F04.checkers\u002F15.ua-header",{"title":327,"path":328,"stem":329},"Geolocation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgeolocation","docs\u002Fbot-detection\u002F04.checkers\u002F16.geolocation",{"title":331,"path":332,"stem":333},"Known Bad User-Agents","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ua","docs\u002Fbot-detection\u002F04.checkers\u002F17.known-bad-ua",{"title":38,"path":335,"stem":336},"\u002Fdocs\u002Fbot-detection\u002Fsecurity","docs\u002Fbot-detection\u002F04.security",{"title":204,"path":338,"stem":339},"\u002Fdocs\u002Fbot-detection\u002Fapi","docs\u002Fbot-detection\u002F05.api",{"title":200,"path":341,"stem":342},"\u002Fdocs\u002Fbot-detection\u002Fconfiguration","docs\u002Fbot-detection\u002F06.configuration",{"title":70,"path":11,"stem":71,"children":344},[345],{"title":70,"path":11,"stem":71},{"title":27,"path":29,"stem":347,"children":348},"docs\u002Fiam\u002Findex",[349,350,353,488,491,507,510],{"title":27,"path":29,"stem":347},{"title":14,"path":351,"stem":352},"\u002Fdocs\u002Fiam\u002Fgetting-started","docs\u002Fiam\u002F00.getting-started",{"title":91,"path":354,"stem":355,"children":356},"\u002Fdocs\u002Fiam\u002Fessentials","docs\u002Fiam\u002F01.essentials\u002Findex",[357,358,362,366,370,374,378,382,386,390,394,398,401,405,409,413,417,420,424,428,431,435,438],{"title":91,"path":354,"stem":355},{"title":359,"path":360,"stem":361},"Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Ftokens","docs\u002Fiam\u002F01.essentials\u002F00.tokens",{"title":363,"path":364,"stem":365},"Access Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Faccess-tokens","docs\u002Fiam\u002F01.essentials\u002F01.access-tokens",{"title":367,"path":368,"stem":369},"Refresh Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Frefresh-tokens","docs\u002Fiam\u002F01.essentials\u002F02.refresh-tokens",{"title":371,"path":372,"stem":373},"Anomaly Detection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fanomalies","docs\u002Fiam\u002F01.essentials\u002F03.anomalies",{"title":375,"path":376,"stem":377},"Signup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fsignup","docs\u002Fiam\u002F01.essentials\u002F04.signup",{"title":379,"path":380,"stem":381},"Login","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogin","docs\u002Fiam\u002F01.essentials\u002F05.login",{"title":383,"path":384,"stem":385},"Logout","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogout","docs\u002Fiam\u002F01.essentials\u002F06.logout",{"title":387,"path":388,"stem":389},"OAuth","\u002Fdocs\u002Fiam\u002Fessentials\u002Foauth","docs\u002Fiam\u002F01.essentials\u002F07.oauth",{"title":391,"path":392,"stem":393},"Magic Links","\u002Fdocs\u002Fiam\u002Fessentials\u002Fmagic-links","docs\u002Fiam\u002F01.essentials\u002F08.magic-links",{"title":395,"path":396,"stem":397},"Emails","\u002Fdocs\u002Fiam\u002Fessentials\u002Femails","docs\u002Fiam\u002F01.essentials\u002F09.emails",{"title":128,"path":399,"stem":400},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fmfa","docs\u002Fiam\u002F01.essentials\u002F10.mfa",{"title":402,"path":403,"stem":404},"Fingerprinting","\u002Fdocs\u002Fiam\u002Fessentials\u002Ffingerprinting","docs\u002Fiam\u002F01.essentials\u002F11.fingerprinting",{"title":406,"path":407,"stem":408},"Backend for Frontend","\u002Fdocs\u002Fiam\u002Fessentials\u002Fbff","docs\u002Fiam\u002F01.essentials\u002F12.bff",{"title":410,"path":411,"stem":412},"HMAC Authentication","\u002Fdocs\u002Fiam\u002Fessentials\u002Fhmac","docs\u002Fiam\u002F01.essentials\u002F13.hmac",{"title":414,"path":415,"stem":416},"XSS Protection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fxss","docs\u002Fiam\u002F01.essentials\u002F14.xss",{"title":124,"path":418,"stem":419},"\u002Fdocs\u002Fiam\u002Fessentials\u002Flogging","docs\u002Fiam\u002F01.essentials\u002F15.logging",{"title":421,"path":422,"stem":423},"Rate Limiting","\u002Fdocs\u002Fiam\u002Fessentials\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F16.rate-limiting",{"title":425,"path":426,"stem":427},"Database","\u002Fdocs\u002Fiam\u002Fessentials\u002Fdatabase","docs\u002Fiam\u002F01.essentials\u002F17.database",{"title":120,"path":429,"stem":430},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fcookies","docs\u002Fiam\u002F01.essentials\u002F18.cookies",{"title":432,"path":433,"stem":434},"Service Startup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fservice","docs\u002Fiam\u002F01.essentials\u002F19.service",{"title":138,"path":436,"stem":437},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fpassword-reset","docs\u002Fiam\u002F01.essentials\u002F20.password-reset",{"title":439,"path":440,"stem":441,"children":442},"API Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi","docs\u002Fiam\u002F01.essentials\u002F21.api\u002Findex",[443,444,448,452,482,485],{"title":439,"path":440,"stem":441},{"title":445,"path":446,"stem":447},"Creating Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fcreation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F00.creation",{"title":449,"path":450,"stem":451},"Verifying Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fverification","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F01.verification",{"title":453,"path":454,"stem":455,"children":456},"Manage Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002Findex",[457,458,462,466,470,474,478],{"title":453,"path":454,"stem":455},{"title":459,"path":460,"stem":461},"Privileges","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fprivilege","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F00.privilege",{"title":463,"path":464,"stem":465},"Revocation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frevocation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F01.revocation",{"title":467,"path":468,"stem":469},"Rotation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frotation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F02.rotation",{"title":471,"path":472,"stem":473},"IP Restriction","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fip-updates","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F03.ip-updates",{"title":475,"path":476,"stem":477},"Metadata","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fmetadata","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F04.metadata",{"title":479,"path":480,"stem":481},"Token Listing","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Flist","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F05.list",{"title":421,"path":483,"stem":484},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F03.rate-limiting",{"title":38,"path":486,"stem":487},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fsecurity","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F04.security",{"title":38,"path":489,"stem":490},"\u002Fdocs\u002Fiam\u002Fsecurity","docs\u002Fiam\u002F02.security",{"title":179,"path":492,"stem":493,"children":494,"page":53},"\u002Fdocs\u002Fiam\u002Fguides","docs\u002Fiam\u002F03.guides",[495,499,503],{"title":496,"path":497,"stem":498},"Deployment","\u002Fdocs\u002Fiam\u002Fguides\u002Fdeployment","docs\u002Fiam\u002F03.guides\u002Fdeployment",{"title":500,"path":501,"stem":502},"Operation Scripts","\u002Fdocs\u002Fiam\u002Fguides\u002Foperation-scripts","docs\u002Fiam\u002F03.guides\u002Foperation-scripts",{"title":504,"path":505,"stem":506},"Role-Based Access Control","\u002Fdocs\u002Fiam\u002Fguides\u002Frbac","docs\u002Fiam\u002F03.guides\u002Frbac",{"title":200,"path":508,"stem":509},"\u002Fdocs\u002Fiam\u002Fconfiguration","docs\u002Fiam\u002F04.configuration",{"title":511,"path":512,"stem":513,"children":514,"page":53},"Api","\u002Fdocs\u002Fiam\u002Fapi","docs\u002Fiam\u002F05.API",[515,518,521],{"title":204,"path":516,"stem":517},"\u002Fdocs\u002Fiam\u002Fapi\u002Fapi","docs\u002Fiam\u002F05.API\u002F00.api",{"title":214,"path":519,"stem":520},"\u002Fdocs\u002Fiam\u002Fapi\u002Fmiddlewares","docs\u002Fiam\u002F05.API\u002F02.middlewares",{"title":210,"path":522,"stem":523},"\u002Fdocs\u002Fiam\u002Fapi\u002Froutes","docs\u002Fiam\u002F05.API\u002F03.routes",{"title":40,"path":42,"stem":525,"children":526},"docs\u002Fshield-base\u002Findex",[527,528,531,535,576,580,584,588],{"title":40,"path":42,"stem":525},{"title":14,"path":529,"stem":530},"\u002Fdocs\u002Fshield-base\u002Fgetting-started","docs\u002Fshield-base\u002F00.getting-started",{"title":532,"path":533,"stem":534},"CLI Reference","\u002Fdocs\u002Fshield-base\u002Fcli","docs\u002Fshield-base\u002F01.cli",{"title":238,"path":536,"stem":537,"children":538},"\u002Fdocs\u002Fshield-base\u002Fdata-sources","docs\u002Fshield-base\u002F02.data-sources\u002Findex",[539,540,544,548,552,556,560,564,568,572],{"title":238,"path":536,"stem":537},{"title":541,"path":542,"stem":543},"BGP \u002F ASN","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fbgp","docs\u002Fshield-base\u002F02.data-sources\u002Fbgp",{"title":545,"path":546,"stem":547},"City Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcity","docs\u002Fshield-base\u002F02.data-sources\u002Fcity",{"title":549,"path":550,"stem":551},"Country Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcountry","docs\u002Fshield-base\u002F02.data-sources\u002Fcountry",{"title":553,"path":554,"stem":555},"Verified Crawlers","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcrawlers","docs\u002Fshield-base\u002F02.data-sources\u002Fcrawlers",{"title":557,"path":558,"stem":559},"Disposable Emails","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Femail","docs\u002Fshield-base\u002F02.data-sources\u002Femail",{"title":561,"path":562,"stem":563},"FireHOL Threat Intelligence","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ffirehol","docs\u002Fshield-base\u002F02.data-sources\u002Ffirehol",{"title":565,"path":566,"stem":567},"Proxy Detection","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fproxy","docs\u002Fshield-base\u002F02.data-sources\u002Fproxy",{"title":569,"path":570,"stem":571},"Tor Nodes","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ftor","docs\u002Fshield-base\u002F02.data-sources\u002Ftor",{"title":573,"path":574,"stem":575},"Suspicious User-Agents","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fuseragent","docs\u002Fshield-base\u002F02.data-sources\u002Fuseragent",{"title":577,"path":578,"stem":579},"Programmatic Usage","\u002Fdocs\u002Fshield-base\u002Fusage","docs\u002Fshield-base\u002F03.usage",{"title":581,"path":582,"stem":583},"Custom Data Sources","\u002Fdocs\u002Fshield-base\u002Fcustom-data-sources","docs\u002Fshield-base\u002F04.custom-data-sources",{"title":585,"path":586,"stem":587},"TypeScript Types","\u002Fdocs\u002Fshield-base\u002Ftypes","docs\u002Fshield-base\u002F05.types",{"title":204,"path":589,"stem":590},"\u002Fdocs\u002Fshield-base\u002Fapi","docs\u002Fshield-base\u002F06.api",{"title":222,"path":48,"stem":592,"children":593},"docs\u002Futils\u002Findex",[594,595,612,645,742],{"title":222,"path":48,"stem":592},{"title":596,"path":597,"stem":598,"children":599,"page":53},"Eslint","\u002Fdocs\u002Futils\u002Feslint","docs\u002Futils\u002Feslint",[600,604,608],{"title":601,"path":602,"stem":603},"React Config","\u002Fdocs\u002Futils\u002Feslint\u002Freact","docs\u002Futils\u002Feslint\u002Freact",{"title":605,"path":606,"stem":607},"TypeScript Config","\u002Fdocs\u002Futils\u002Feslint\u002Ftypescript","docs\u002Futils\u002Feslint\u002Ftypescript",{"title":609,"path":610,"stem":611},"Vue Config","\u002Fdocs\u002Futils\u002Feslint\u002Fvue","docs\u002Futils\u002Feslint\u002Fvue",{"title":613,"path":614,"stem":615,"children":616,"page":53},"Server","\u002Fdocs\u002Futils\u002Fserver","docs\u002Futils\u002Fserver",[617,621,625,629,633,637,641],{"title":618,"path":619,"stem":620},"Encryption","\u002Fdocs\u002Futils\u002Fserver\u002Fencryption","docs\u002Futils\u002Fserver\u002Fencryption",{"title":622,"path":623,"stem":624},"Path Resolver","\u002Fdocs\u002Futils\u002Fserver\u002Fpathresolver","docs\u002Futils\u002Fserver\u002FpathResolver",{"title":626,"path":627,"stem":628},"File Replacements","\u002Fdocs\u002Futils\u002Fserver\u002Freplace","docs\u002Futils\u002Fserver\u002Freplace",{"title":630,"path":631,"stem":632},"run","\u002Fdocs\u002Futils\u002Fserver\u002Frun","docs\u002Futils\u002Fserver\u002Frun",{"title":634,"path":635,"stem":636},"scheduleTask","\u002Fdocs\u002Futils\u002Fserver\u002Fscheduletask","docs\u002Futils\u002Fserver\u002FscheduleTask",{"title":638,"path":639,"stem":640},"spawnRun","\u002Fdocs\u002Futils\u002Fserver\u002Fspawnrun","docs\u002Futils\u002Fserver\u002FspawnRun",{"title":642,"path":643,"stem":644},"uploadCsv","\u002Fdocs\u002Futils\u002Fserver\u002Fuploadcsv","docs\u002Futils\u002Fserver\u002FuploadCsv",{"title":646,"path":647,"stem":648,"children":649,"page":53},"Shared","\u002Fdocs\u002Futils\u002Fshared","docs\u002Futils\u002Fshared",[650,654,658,662,666,670,674,678,682,686,690,694,698,702,706,710,714,718,722,726,730,734,738],{"title":651,"path":652,"stem":653},"BatchQueue","\u002Fdocs\u002Futils\u002Fshared\u002Fbatchqueue","docs\u002Futils\u002Fshared\u002FbatchQueue",{"title":655,"path":656,"stem":657},"capitalize","\u002Fdocs\u002Futils\u002Fshared\u002Fcapitalize","docs\u002Futils\u002Fshared\u002Fcapitalize",{"title":659,"path":660,"stem":661},"chunkProcess","\u002Fdocs\u002Futils\u002Fshared\u002Fchunkprocess","docs\u002Futils\u002Fshared\u002FchunkProcess",{"title":663,"path":664,"stem":665},"cleanObject","\u002Fdocs\u002Futils\u002Fshared\u002Fcleanobject","docs\u002Futils\u002Fshared\u002FcleanObject",{"title":667,"path":668,"stem":669},"createConfigManager","\u002Fdocs\u002Futils\u002Fshared\u002Fconfigurationdefiner","docs\u002Futils\u002Fshared\u002FconfigurationDefiner",{"title":671,"path":672,"stem":673},"debounce","\u002Fdocs\u002Futils\u002Fshared\u002Fdebounce","docs\u002Futils\u002Fshared\u002Fdebounce",{"title":675,"path":676,"stem":677},"ensureArray","\u002Fdocs\u002Futils\u002Fshared\u002Fensurearray","docs\u002Futils\u002Fshared\u002FensureArray",{"title":679,"path":680,"stem":681},"fetchWithRetry","\u002Fdocs\u002Futils\u002Fshared\u002Ffetchwithretry","docs\u002Futils\u002Fshared\u002FfetchWithRetry",{"title":683,"path":684,"stem":685},"filterEmptyValues","\u002Fdocs\u002Futils\u002Fshared\u002Ffilteremptyvalues","docs\u002Futils\u002Fshared\u002FfilterEmptyValues",{"title":687,"path":688,"stem":689},"findStringsInObject","\u002Fdocs\u002Futils\u002Fshared\u002Ffindobjectvalues","docs\u002Futils\u002Fshared\u002FfindObjectValues",{"title":691,"path":692,"stem":693},"fisherYatesShuffle","\u002Fdocs\u002Futils\u002Fshared\u002Ffisheryatesshuffle","docs\u002Futils\u002Fshared\u002FfisherYatesShuffle",{"title":695,"path":696,"stem":697},"getRandomImage","\u002Fdocs\u002Futils\u002Fshared\u002Fgetrandomimage","docs\u002Futils\u002Fshared\u002FgetRandomImage",{"title":699,"path":700,"stem":701},"isObjectHasValues","\u002Fdocs\u002Futils\u002Fshared\u002Fisobjecthasvalues","docs\u002Futils\u002Fshared\u002FisObjectHasValues",{"title":703,"path":704,"stem":705},"isAsyncOrPromise","\u002Fdocs\u002Futils\u002Fshared\u002Fispromise","docs\u002Futils\u002Fshared\u002FisPromise",{"title":707,"path":708,"stem":709},"MiniCache","\u002Fdocs\u002Futils\u002Fshared\u002Fminicache","docs\u002Futils\u002Fshared\u002FminiCache",{"title":711,"path":712,"stem":713},"parseCookies","\u002Fdocs\u002Futils\u002Fshared\u002Fparserawcookies","docs\u002Futils\u002Fshared\u002FparseRawCookies",{"title":715,"path":716,"stem":717},"safeAction","\u002Fdocs\u002Futils\u002Fshared\u002Fpromiselocker","docs\u002Futils\u002Fshared\u002FpromiseLocker",{"title":719,"path":720,"stem":721},"Random","\u002Fdocs\u002Futils\u002Fshared\u002Frandom","docs\u002Futils\u002Fshared\u002Frandom",{"title":723,"path":724,"stem":725},"range","\u002Fdocs\u002Futils\u002Fshared\u002Frange","docs\u002Futils\u002Fshared\u002Frange",{"title":727,"path":728,"stem":729},"rateLimiters","\u002Fdocs\u002Futils\u002Fshared\u002Fratelimiters","docs\u002Futils\u002Fshared\u002FrateLimiters",{"title":731,"path":732,"stem":733},"safeObjectMerge","\u002Fdocs\u002Futils\u002Fshared\u002Fsafemerge","docs\u002Futils\u002Fshared\u002FsafeMerge",{"title":735,"path":736,"stem":737},"textTruncation","\u002Fdocs\u002Futils\u002Fshared\u002Ftexttruncation","docs\u002Futils\u002Fshared\u002FtextTruncation",{"title":739,"path":740,"stem":741},"validateZodSchema","\u002Fdocs\u002Futils\u002Fshared\u002Fvalidatezodschema","docs\u002Futils\u002Fshared\u002FvalidateZodSchema",{"title":743,"path":744,"stem":745,"children":746},"Utility Types","\u002Fdocs\u002Futils\u002Ftypes","docs\u002Futils\u002Ftypes\u002Findex",[747,748,752,756,760,764,768,772,776,780],{"title":743,"path":744,"stem":745},{"title":749,"path":750,"stem":751},"Brand","\u002Fdocs\u002Futils\u002Ftypes\u002Fbrand","docs\u002Futils\u002Ftypes\u002FBrand",{"title":753,"path":754,"stem":755},"DeepPartial","\u002Fdocs\u002Futils\u002Ftypes\u002Fdeeppartial","docs\u002Futils\u002Ftypes\u002FDeepPartial",{"title":757,"path":758,"stem":759},"Merge","\u002Fdocs\u002Futils\u002Ftypes\u002Fmerge","docs\u002Futils\u002Ftypes\u002FMerge",{"title":761,"path":762,"stem":763},"NonNullable","\u002Fdocs\u002Futils\u002Ftypes\u002Fnonnullable","docs\u002Futils\u002Ftypes\u002FNonNullable",{"title":765,"path":766,"stem":767},"Prettify","\u002Fdocs\u002Futils\u002Ftypes\u002Fprettify","docs\u002Futils\u002Ftypes\u002FPrettify",{"title":769,"path":770,"stem":771},"PromiseType","\u002Fdocs\u002Futils\u002Ftypes\u002Fpromisetype","docs\u002Futils\u002Ftypes\u002FPromiseType",{"title":773,"path":774,"stem":775},"RequireKeys","\u002Fdocs\u002Futils\u002Ftypes\u002Frequirekeys","docs\u002Futils\u002Ftypes\u002FRequireKeys",{"title":777,"path":778,"stem":779},"StandardResponse","\u002Fdocs\u002Futils\u002Ftypes\u002Fstandardresponse","docs\u002Futils\u002Ftypes\u002FStandardResponse",{"title":781,"path":782,"stem":783},"ValueOf","\u002Fdocs\u002Futils\u002Ftypes\u002Fvalueof","docs\u002Futils\u002Ftypes\u002FValueOf",{"id":4,"extension":5,"links":785,"meta":796,"stem":62,"__hash__":63},[786,794,795],{"nested":8,"label":9,"icon":10,"to":11,"children":787},[788,789,790,791,792,793],{"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":798,"title":70,"body":799,"description":943,"extension":944,"icon":15,"meta":945,"module":946,"navigation":8,"path":11,"rawbody":947,"seo":948,"stem":71,"__hash__":949},"docs\u002Fdocs\u002Fgetting-started\u002Findex.md",{"type":800,"value":801,"toc":930},"minimark",[802,806,810,815,818,841,844,848,851,883,885,889,892,915],[803,804,70],"h1",{"id":805},"introduction",[807,808,809],"p",{},"The Riavzon ecosystem is a set of focused Node.js modules for authentication, bot detection, and shared infrastructure. Each module has a single responsibility, and they are designed to work together as a layered stack. You can use the full stack or adopt individual modules into an existing application.",[811,812,814],"h2",{"id":813},"the-stack","The Stack",[807,816,817],{},"The ecosystem has five modules. Three of them form the core authentication and bot detection pipeline. The other two are supporting tools.",[819,820,823,827,831,835,838],"u-page-grid",{"className":821},[822],"lg:grid-cols-3",[824,825],"u-page-card",{"description":826,"icon":28,"title":27,"to":29},"The central authentication service. Handles signup, login, logout, OAuth, MFA, token issuance, anomaly detection, and rate limiting. Runs as a standalone Express app backed by MySQL.",[824,828],{"description":829,"icon":830,"title":20,"to":22},"The gateway layer for your Nuxt, Nitro, or H3 application. Sits between the browser and the IAM service. Handles session management, token rotation, CSRF, OAuth code exchange, magic links, and bot screening.","i-lucide-layers",[824,832],{"description":833,"icon":834,"title":226,"to":35},"An Express middleware that scores incoming requests through 17 configurable checkers. Used internally by the IAM service and available standalone. Reads compiled MMDB and LMDB databases from Shield Base.","i-lucide-shield-half",[824,836],{"description":837,"icon":41,"title":40,"to":42},"The data layer for Bot Detector. A CLI and programmatic tool that downloads, processes, and compiles IP intelligence, geolocation, threat feeds, and user-agent databases into MMDB and LMDB formats.",[824,839],{"description":840,"icon":47,"title":222,"to":48},"A tree-shakeable library of generic TypeScript helpers, server utilities, ESLint configurations, and advanced utility types shared across the ecosystem.",[842,843],"hr",{},[811,845,847],{"id":846},"how-the-modules-connect","How the modules connect",[807,849,850],{},"Understanding the dependency chain helps you decide which modules to set up and in what order.",[852,853,854,859,862,866,869,873,876,880],"steps",{},[855,856,858],"h3",{"id":857},"shield-base-compiles-the-databases","Shield Base compiles the databases",[807,860,861],{},"Shield Base downloads BGP tables, geolocation data, Tor exit nodes, FireHOL threat lists, and verified crawler IP ranges. It compiles them into MMDB and LMDB binary files that the Bot Detector reads at runtime. You run Shield Base once to produce the databases, then again periodically to refresh them.",[855,863,865],{"id":864},"bot-detector-uses-those-databases","Bot Detector uses those databases",[807,867,868],{},"The Bot Detector middleware reads the compiled databases to score each incoming request across IP reputation, geolocation consistency, device fingerprinting, behavioral rate limits, and more. Requests that exceed the ban threshold are rejected at the edge before touching any application logic.",[855,870,872],{"id":871},"iam-uses-bot-detector-internally","IAM uses Bot Detector internally",[807,874,875],{},"The IAM service runs Bot Detector on every request as part of its middleware chain. It also manages the canary cookie that ties a browser session to a specific visitor fingerprint, which Bot Detector uses for session coherence checks.",[855,877,879],{"id":878},"auth-h3-client-proxies-to-iam","Auth H3 Client proxies to IAM",[807,881,882],{},"Auth H3 Client is the server layer of your Nuxt or Nitro application. It intercepts authentication-related requests, signs them with HMAC, forwards them to the IAM service, and applies the resulting tokens and cookies to the response. Your application never handles raw credentials.",[842,884],{},[811,886,888],{"id":887},"where-to-start","Where to start",[807,890,891],{},"The right starting point depends on what you are building.",[819,893,896,901,906,910],{"className":894},[895],"lg:grid-cols-2",[824,897],{"description":898,"icon":899,"title":900,"to":82},"Start with the IAM service, then connect your Nuxt frontend using Auth H3 Client. The Nuxt module registers all routes and middleware automatically with a single plugin call.","i-lucide-monitor-smartphone","I want to add auth to a Nuxt app",[824,902],{"description":903,"icon":904,"title":905,"to":185},"Auth H3 Client ships H3 v1 and H3 v2 exports. Register the route handlers and middleware manually using the provided router setup functions.","i-lucide-server","I want to add auth to an H3 or Nitro app",[824,907],{"description":908,"icon":28,"title":909,"to":351},"The IAM service runs as a standalone Express app or Docker container. Start with the getting started guide to configure the database, JWT settings, and email transport.","I want to deploy the IAM service",[824,911],{"description":912,"icon":913,"title":914,"to":231},"Bot Detector is a standalone Express middleware. Compile the databases with Shield Base, then mount the middleware on your router.","i-lucide-bot","I want to add bot detection to an existing app",[916,917,918],"note",{},[807,919,920,921,924,925,924,927,929],{},"If you are setting up the full stack for the first time, the recommended order is: ",[922,923,40],"strong",{},", ",[922,926,27],{},[922,928,20],{},". Bot Detector is bundled with the IAM service, so you do not need to configure it separately unless you want to use it standalone.",{"title":931,"searchDepth":932,"depth":932,"links":933},"",2,[934,935,942],{"id":813,"depth":932,"text":814},{"id":846,"depth":932,"text":847,"children":936},[937,939,940,941],{"id":857,"depth":938,"text":858},3,{"id":864,"depth":938,"text":865},{"id":871,"depth":938,"text":872},{"id":878,"depth":938,"text":879},{"id":887,"depth":932,"text":888},"An overview of the Riavzon ecosystem — what each module does, how they connect, and where to start.","md",{},null,"---\ntitle: Introduction\ndescription: An overview of the Riavzon ecosystem — what each module does, how they connect, and where to start.\nicon: i-lucide-rocket\n---\n\n# Introduction\n\nThe Riavzon ecosystem is a set of focused Node.js modules for authentication, bot detection, and shared infrastructure. Each module has a single responsibility, and they are designed to work together as a layered stack. You can use the full stack or adopt individual modules into an existing application.\n\n## The Stack\n\nThe ecosystem has five modules. Three of them form the core authentication and bot detection pipeline. The other two are supporting tools.\n\n::UPageGrid{class=\"lg:grid-cols-3\"}\n  ::UPageCard\n  ---\n  title: IAM\n  description: The central authentication service. Handles signup, login, logout, OAuth, MFA, token issuance, anomaly detection, and rate limiting. Runs as a standalone Express app backed by MySQL.\n  icon: i-lucide-shield-check\n  to: \u002Fdocs\u002Fiam\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: Auth H3 Client\n  description: The gateway layer for your Nuxt, Nitro, or H3 application. Sits between the browser and the IAM service. Handles session management, token rotation, CSRF, OAuth code exchange, magic links, and bot screening.\n  icon: i-lucide-layers\n  to: \u002Fdocs\u002Fauth-h3client\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: Bot Detector\n  description: An Express middleware that scores incoming requests through 17 configurable checkers. Used internally by the IAM service and available standalone. Reads compiled MMDB and LMDB databases from Shield Base.\n  icon: i-lucide-shield-half\n  to: \u002Fdocs\u002Fbot-detection\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: Shield Base\n  description: The data layer for Bot Detector. A CLI and programmatic tool that downloads, processes, and compiles IP intelligence, geolocation, threat feeds, and user-agent databases into MMDB and LMDB formats.\n  icon: i-lucide-database-zap\n  to: \u002Fdocs\u002Fshield-base\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: Utilities\n  description: A tree-shakeable library of generic TypeScript helpers, server utilities, ESLint configurations, and advanced utility types shared across the ecosystem.\n  icon: i-lucide-wrench\n  to: \u002Fdocs\u002Futils\n  ---\n  ::\n::\n\n---\n\n## How the modules connect\n\nUnderstanding the dependency chain helps you decide which modules to set up and in what order.\n\n::steps\n\n### Shield Base compiles the databases\n\nShield Base downloads BGP tables, geolocation data, Tor exit nodes, FireHOL threat lists, and verified crawler IP ranges. It compiles them into MMDB and LMDB binary files that the Bot Detector reads at runtime. You run Shield Base once to produce the databases, then again periodically to refresh them.\n\n### Bot Detector uses those databases\n\nThe Bot Detector middleware reads the compiled databases to score each incoming request across IP reputation, geolocation consistency, device fingerprinting, behavioral rate limits, and more. Requests that exceed the ban threshold are rejected at the edge before touching any application logic.\n\n### IAM uses Bot Detector internally\n\nThe IAM service runs Bot Detector on every request as part of its middleware chain. It also manages the canary cookie that ties a browser session to a specific visitor fingerprint, which Bot Detector uses for session coherence checks.\n\n### Auth H3 Client proxies to IAM\n\nAuth H3 Client is the server layer of your Nuxt or Nitro application. It intercepts authentication-related requests, signs them with HMAC, forwards them to the IAM service, and applies the resulting tokens and cookies to the response. Your application never handles raw credentials.\n\n::\n\n---\n\n## Where to start\n\nThe right starting point depends on what you are building.\n\n::UPageGrid{class=\"lg:grid-cols-2\"}\n  ::UPageCard\n  ---\n  title: I want to add auth to a Nuxt app\n  description: Start with the IAM service, then connect your Nuxt frontend using Auth H3 Client. The Nuxt module registers all routes and middleware automatically with a single plugin call.\n  icon: i-lucide-monitor-smartphone\n  to: \u002Fdocs\u002Fauth-h3client\u002Fgetting-started\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: I want to add auth to an H3 or Nitro app\n  description: Auth H3 Client ships H3 v1 and H3 v2 exports. Register the route handlers and middleware manually using the provided router setup functions.\n  icon: i-lucide-server\n  to: \u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fh3-nitro\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: I want to deploy the IAM service\n  description: The IAM service runs as a standalone Express app or Docker container. Start with the getting started guide to configure the database, JWT settings, and email transport.\n  icon: i-lucide-shield-check\n  to: \u002Fdocs\u002Fiam\u002Fgetting-started\n  ---\n  ::\n\n  ::UPageCard\n  ---\n  title: I want to add bot detection to an existing app\n  description: Bot Detector is a standalone Express middleware. Compile the databases with Shield Base, then mount the middleware on your router.\n  icon: i-lucide-bot\n  to: \u002Fdocs\u002Fbot-detection\u002Fgetting-started\n  ---\n  ::\n::\n\n::note\nIf you are setting up the full stack for the first time, the recommended order is: **Shield Base**, **IAM**, **Auth H3 Client**. Bot Detector is bundled with the IAM service, so you do not need to configure it separately unless you want to use it standalone.\n::",{"title":70,"description":943},"VFuP2r_r6RcCe8vkEmub-BcjY0GwmJw2nzsfRcdmDsc",[946,946],{"id":798,"title":70,"body":952,"description":943,"extension":944,"icon":15,"meta":1036,"module":946,"navigation":8,"path":11,"rawbody":947,"seo":1037,"stem":71,"__hash__":949},{"type":800,"value":953,"toc":1026},[954,956,958,960,962,975,977,979,981,999,1001,1003,1005,1016],[803,955,70],{"id":805},[807,957,809],{},[811,959,814],{"id":813},[807,961,817],{},[819,963,965,967,969,971,973],{"className":964},[822],[824,966],{"description":826,"icon":28,"title":27,"to":29},[824,968],{"description":829,"icon":830,"title":20,"to":22},[824,970],{"description":833,"icon":834,"title":226,"to":35},[824,972],{"description":837,"icon":41,"title":40,"to":42},[824,974],{"description":840,"icon":47,"title":222,"to":48},[842,976],{},[811,978,847],{"id":846},[807,980,850],{},[852,982,983,985,987,989,991,993,995,997],{},[855,984,858],{"id":857},[807,986,861],{},[855,988,865],{"id":864},[807,990,868],{},[855,992,872],{"id":871},[807,994,875],{},[855,996,879],{"id":878},[807,998,882],{},[842,1000],{},[811,1002,888],{"id":887},[807,1004,891],{},[819,1006,1008,1010,1012,1014],{"className":1007},[895],[824,1009],{"description":898,"icon":899,"title":900,"to":82},[824,1011],{"description":903,"icon":904,"title":905,"to":185},[824,1013],{"description":908,"icon":28,"title":909,"to":351},[824,1015],{"description":912,"icon":913,"title":914,"to":231},[916,1017,1018],{},[807,1019,920,1020,924,1022,924,1024,929],{},[922,1021,40],{},[922,1023,27],{},[922,1025,20],{},{"title":931,"searchDepth":932,"depth":932,"links":1027},[1028,1029,1035],{"id":813,"depth":932,"text":814},{"id":846,"depth":932,"text":847,"children":1030},[1031,1032,1033,1034],{"id":857,"depth":938,"text":858},{"id":864,"depth":938,"text":865},{"id":871,"depth":938,"text":872},{"id":878,"depth":938,"text":879},{"id":887,"depth":932,"text":888},{},{"title":70,"description":943},1780436271305]