[{"data":1,"prerenderedAt":2624},["ShallowReactive",2],{"navLinks":3,"sidebar_docs_navigation_\u002Fdocs\u002Fshield-base":64,"navigation":138,"navLinks_footer":802,"\u002Fdocs\u002Fshield-base\u002Fgetting-started_page":815,"\u002Fdocs\u002Fshield-base\u002Fgetting-started_surround":1835,"\u002Fdocs\u002Fshield-base\u002Fgetting-started":1838},{"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":40,"path":42,"stem":70,"children":71},"docs\u002Fshield-base\u002Findex",[72,73,76,80,122,126,130,134],{"title":40,"path":42,"stem":70},{"title":14,"path":74,"stem":75},"\u002Fdocs\u002Fshield-base\u002Fgetting-started","docs\u002Fshield-base\u002F00.getting-started",{"title":77,"path":78,"stem":79},"CLI Reference","\u002Fdocs\u002Fshield-base\u002Fcli","docs\u002Fshield-base\u002F01.cli",{"title":81,"path":82,"stem":83,"children":84},"Data Sources","\u002Fdocs\u002Fshield-base\u002Fdata-sources","docs\u002Fshield-base\u002F02.data-sources\u002Findex",[85,86,90,94,98,102,106,110,114,118],{"title":81,"path":82,"stem":83},{"title":87,"path":88,"stem":89},"BGP \u002F ASN","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fbgp","docs\u002Fshield-base\u002F02.data-sources\u002Fbgp",{"title":91,"path":92,"stem":93},"City Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcity","docs\u002Fshield-base\u002F02.data-sources\u002Fcity",{"title":95,"path":96,"stem":97},"Country Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcountry","docs\u002Fshield-base\u002F02.data-sources\u002Fcountry",{"title":99,"path":100,"stem":101},"Verified Crawlers","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcrawlers","docs\u002Fshield-base\u002F02.data-sources\u002Fcrawlers",{"title":103,"path":104,"stem":105},"Disposable Emails","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Femail","docs\u002Fshield-base\u002F02.data-sources\u002Femail",{"title":107,"path":108,"stem":109},"FireHOL Threat Intelligence","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ffirehol","docs\u002Fshield-base\u002F02.data-sources\u002Ffirehol",{"title":111,"path":112,"stem":113},"Proxy Detection","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fproxy","docs\u002Fshield-base\u002F02.data-sources\u002Fproxy",{"title":115,"path":116,"stem":117},"Tor Nodes","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ftor","docs\u002Fshield-base\u002F02.data-sources\u002Ftor",{"title":119,"path":120,"stem":121},"Suspicious User-Agents","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fuseragent","docs\u002Fshield-base\u002F02.data-sources\u002Fuseragent",{"title":123,"path":124,"stem":125},"Programmatic Usage","\u002Fdocs\u002Fshield-base\u002Fusage","docs\u002Fshield-base\u002F03.usage",{"title":127,"path":128,"stem":129},"Custom Data Sources","\u002Fdocs\u002Fshield-base\u002Fcustom-data-sources","docs\u002Fshield-base\u002F04.custom-data-sources",{"title":131,"path":132,"stem":133},"TypeScript Types","\u002Fdocs\u002Fshield-base\u002Ftypes","docs\u002Fshield-base\u002F05.types",{"title":135,"path":136,"stem":137},"API Reference","\u002Fdocs\u002Fshield-base\u002Fapi","docs\u002Fshield-base\u002F06.api",[139],{"title":9,"path":66,"stem":67,"children":140,"page":53},[141,288,405,410,588,609],{"title":20,"path":22,"stem":142,"children":143},"docs\u002Fauth-h3client\u002Findex",[144,145,154,191,217,239,242,263,267],{"title":20,"path":22,"stem":142},{"title":14,"path":146,"stem":147,"children":148},"\u002Fdocs\u002Fauth-h3client\u002Fgetting-started","docs\u002Fauth-h3client\u002F00.getting-started\u002Findex",[149,150],{"title":14,"path":146,"stem":147},{"title":151,"path":152,"stem":153},"Nuxt Module","\u002Fdocs\u002Fauth-h3client\u002Fgetting-started\u002Fnuxt","docs\u002Fauth-h3client\u002F00.getting-started\u002F00.nuxt",{"title":155,"path":156,"stem":157,"children":158},"Essentials","\u002Fdocs\u002Fauth-h3client\u002Fessentials","docs\u002Fauth-h3client\u002F01.essentials\u002Findex",[159,160,164,168,172,176,180,183,187],{"title":155,"path":156,"stem":157},{"title":161,"path":162,"stem":163},"Session Management","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fsession","docs\u002Fauth-h3client\u002F01.essentials\u002F00.session",{"title":165,"path":166,"stem":167},"Route Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Froute-protection","docs\u002Fauth-h3client\u002F01.essentials\u002F01.route-protection",{"title":169,"path":170,"stem":171},"CSRF Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcsrf","docs\u002Fauth-h3client\u002F01.essentials\u002F02.csrf",{"title":173,"path":174,"stem":175},"Auth Flows","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fauth-flows","docs\u002Fauth-h3client\u002F01.essentials\u002F03.auth-flows",{"title":177,"path":178,"stem":179},"OAuth and OIDC","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Foauth","docs\u002Fauth-h3client\u002F01.essentials\u002F04.oauth",{"title":33,"path":181,"stem":182},"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fbot-detection","docs\u002Fauth-h3client\u002F01.essentials\u002F05.bot-detection",{"title":184,"path":185,"stem":186},"Cookies","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcookies","docs\u002Fauth-h3client\u002F01.essentials\u002F06.cookies",{"title":188,"path":189,"stem":190},"Logging","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Flogging","docs\u002Fauth-h3client\u002F01.essentials\u002F07.logging",{"title":192,"path":193,"stem":194,"children":195},"MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa","docs\u002Fauth-h3client\u002F02.mfa\u002Findex",[196,197,201,205,209,213],{"title":192,"path":193,"stem":194},{"title":198,"path":199,"stem":200},"Built-in MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fbuilt-in-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F01.built-in-flow",{"title":202,"path":203,"stem":204},"Password Reset","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fpassword-reset","docs\u002Fauth-h3client\u002F02.mfa\u002F02.password-reset",{"title":206,"path":207,"stem":208},"Email Change","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Femail-change","docs\u002Fauth-h3client\u002F02.mfa\u002F03.email-change",{"title":210,"path":211,"stem":212},"Custom MFA Flow","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fcustom-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F04.custom-flow",{"title":214,"path":215,"stem":216},"Client-Side MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fclient-side","docs\u002Fauth-h3client\u002F02.mfa\u002F05.client-side",{"title":218,"path":219,"stem":220,"children":221},"Client-side","\u002Fdocs\u002Fauth-h3client\u002Fclient","docs\u002Fauth-h3client\u002F03.client\u002Findex",[222,223,227,231,235],{"title":218,"path":219,"stem":220},{"title":224,"path":225,"stem":226},"useAuthData","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-auth-data","docs\u002Fauth-h3client\u002F03.client\u002F00.use-auth-data",{"title":228,"path":229,"stem":230},"useMagicLink","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-magic-link","docs\u002Fauth-h3client\u002F03.client\u002F01.use-magic-link",{"title":232,"path":233,"stem":234},"executeRequest","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fexecute-request","docs\u002Fauth-h3client\u002F03.client\u002F02.execute-request",{"title":236,"path":237,"stem":238},"getCsrfToken","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fget-csrf-token","docs\u002Fauth-h3client\u002F03.client\u002F03.get-csrf-token",{"title":38,"path":240,"stem":241},"\u002Fdocs\u002Fauth-h3client\u002Fsecurity","docs\u002Fauth-h3client\u002F04.security",{"title":243,"path":244,"stem":245,"children":246,"page":53},"Guides","\u002Fdocs\u002Fauth-h3client\u002Fguides","docs\u002Fauth-h3client\u002F05.guides",[247,251,255,259],{"title":248,"path":249,"stem":250},"H3 and Nitro Setup","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fh3-nitro","docs\u002Fauth-h3client\u002F05.guides\u002F00.h3-nitro",{"title":252,"path":253,"stem":254},"HMAC Inter-service Auth","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fhmac","docs\u002Fauth-h3client\u002F05.guides\u002Fhmac",{"title":256,"path":257,"stem":258},"Image Upload","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fimage-upload","docs\u002Fauth-h3client\u002F05.guides\u002Fimage-upload",{"title":260,"path":261,"stem":262},"mTLS Configuration","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fmtls","docs\u002Fauth-h3client\u002F05.guides\u002Fmtls",{"title":264,"path":265,"stem":266},"Configuration","\u002Fdocs\u002Fauth-h3client\u002Fconfiguration","docs\u002Fauth-h3client\u002F06.configuration",{"title":135,"path":268,"stem":269,"children":270},"\u002Fdocs\u002Fauth-h3client\u002Fapi","docs\u002Fauth-h3client\u002F07.api\u002Findex",[271,272,276,280,284],{"title":135,"path":268,"stem":269},{"title":273,"path":274,"stem":275},"Routes Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcontrollers","docs\u002Fauth-h3client\u002F07.api\u002F00.controllers",{"title":277,"path":278,"stem":279},"Middleware Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fmiddleware","docs\u002Fauth-h3client\u002F07.api\u002F01.middleware",{"title":281,"path":282,"stem":283},"Client-side Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcomposables","docs\u002Fauth-h3client\u002F07.api\u002F02.composables",{"title":285,"path":286,"stem":287},"Utilities","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Futilities","docs\u002Fauth-h3client\u002F07.api\u002F03.utilities",{"title":289,"path":35,"stem":290,"children":291},"Bot Detector","docs\u002Fbot-detection\u002Findex",[292,293,296,300,303,322,396,399,402],{"title":289,"path":35,"stem":290},{"title":14,"path":294,"stem":295},"\u002Fdocs\u002Fbot-detection\u002Fgetting-started","docs\u002Fbot-detection\u002F00.getting-started",{"title":297,"path":298,"stem":299},"CLI","\u002Fdocs\u002Fbot-detection\u002Fcli","docs\u002Fbot-detection\u002F01.cli",{"title":81,"path":301,"stem":302},"\u002Fdocs\u002Fbot-detection\u002Fdata-sources","docs\u002Fbot-detection\u002F02.data-sources",{"title":243,"path":304,"stem":305,"children":306,"page":53},"\u002Fdocs\u002Fbot-detection\u002Fguides","docs\u002Fbot-detection\u002F03.guides",[307,311,315,318],{"title":308,"path":309,"stem":310},"Custom Checkers","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fcustom","docs\u002Fbot-detection\u002F03.guides\u002FCUSTOM",{"title":312,"path":313,"stem":314},"Scheduling Database Generation","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fgenerate","docs\u002Fbot-detection\u002F03.guides\u002FGENERATE",{"title":188,"path":316,"stem":317},"\u002Fdocs\u002Fbot-detection\u002Fguides\u002Flogging","docs\u002Fbot-detection\u002F03.guides\u002FLOGGING",{"title":319,"path":320,"stem":321},"Score Modes and Reputation Healing","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fscore","docs\u002Fbot-detection\u002F03.guides\u002FSCORE",{"title":323,"path":324,"stem":325,"children":326},"Checkers","\u002Fdocs\u002Fbot-detection\u002Fcheckers","docs\u002Fbot-detection\u002F04.checkers\u002Findex",[327,328,332,336,340,344,348,352,356,360,364,368,372,376,380,384,388,392],{"title":323,"path":324,"stem":325},{"title":329,"path":330,"stem":331},"IP Validation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fip-validation","docs\u002Fbot-detection\u002F04.checkers\u002F01.ip-validation",{"title":333,"path":334,"stem":335},"Good \u002F Bad Bot Verification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgood-bots","docs\u002Fbot-detection\u002F04.checkers\u002F02.good-bots",{"title":337,"path":338,"stem":339},"Browser & Device Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbrowser-device","docs\u002Fbot-detection\u002F04.checkers\u002F03.browser-device",{"title":341,"path":342,"stem":343},"Locale Map","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Flocale-map","docs\u002Fbot-detection\u002F04.checkers\u002F04.locale-map",{"title":345,"path":346,"stem":347},"Known Threats","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-threats","docs\u002Fbot-detection\u002F04.checkers\u002F05.known-threats",{"title":349,"path":350,"stem":351},"ASN Classification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fasn-classification","docs\u002Fbot-detection\u002F04.checkers\u002F06.asn-classification",{"title":353,"path":354,"stem":355},"Tor Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftor-analysis","docs\u002Fbot-detection\u002F04.checkers\u002F07.tor-analysis",{"title":357,"path":358,"stem":359},"Timezone Consistency","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftimezone-consistency","docs\u002Fbot-detection\u002F04.checkers\u002F08.timezone-consistency",{"title":361,"path":362,"stem":363},"Honeypot","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fhoneypot","docs\u002Fbot-detection\u002F04.checkers\u002F09.honeypot",{"title":365,"path":366,"stem":367},"Known Bad IPs","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ips","docs\u002Fbot-detection\u002F04.checkers\u002F10.known-bad-ips",{"title":369,"path":370,"stem":371},"Behavior Rate","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbehavior-rate","docs\u002Fbot-detection\u002F04.checkers\u002F11.behavior-rate",{"title":373,"path":374,"stem":375},"Proxy \u002F ISP \u002F Cookie","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fproxy-isp-cookies","docs\u002Fbot-detection\u002F04.checkers\u002F12.proxy-isp-cookies",{"title":377,"path":378,"stem":379},"Session Coherence","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fsession-coherence","docs\u002Fbot-detection\u002F04.checkers\u002F13.session-coherence",{"title":381,"path":382,"stem":383},"Velocity Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fvelocity-fingerprint","docs\u002Fbot-detection\u002F04.checkers\u002F14.velocity-fingerprint",{"title":385,"path":386,"stem":387},"UA & Header Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fua-header","docs\u002Fbot-detection\u002F04.checkers\u002F15.ua-header",{"title":389,"path":390,"stem":391},"Geolocation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgeolocation","docs\u002Fbot-detection\u002F04.checkers\u002F16.geolocation",{"title":393,"path":394,"stem":395},"Known Bad User-Agents","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ua","docs\u002Fbot-detection\u002F04.checkers\u002F17.known-bad-ua",{"title":38,"path":397,"stem":398},"\u002Fdocs\u002Fbot-detection\u002Fsecurity","docs\u002Fbot-detection\u002F04.security",{"title":135,"path":400,"stem":401},"\u002Fdocs\u002Fbot-detection\u002Fapi","docs\u002Fbot-detection\u002F05.api",{"title":264,"path":403,"stem":404},"\u002Fdocs\u002Fbot-detection\u002Fconfiguration","docs\u002Fbot-detection\u002F06.configuration",{"title":406,"path":11,"stem":407,"children":408},"Introduction","docs\u002Fgetting-started\u002Findex",[409],{"title":406,"path":11,"stem":407},{"title":27,"path":29,"stem":411,"children":412},"docs\u002Fiam\u002Findex",[413,414,417,552,555,571,574],{"title":27,"path":29,"stem":411},{"title":14,"path":415,"stem":416},"\u002Fdocs\u002Fiam\u002Fgetting-started","docs\u002Fiam\u002F00.getting-started",{"title":155,"path":418,"stem":419,"children":420},"\u002Fdocs\u002Fiam\u002Fessentials","docs\u002Fiam\u002F01.essentials\u002Findex",[421,422,426,430,434,438,442,446,450,454,458,462,465,469,473,477,481,484,488,492,495,499,502],{"title":155,"path":418,"stem":419},{"title":423,"path":424,"stem":425},"Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Ftokens","docs\u002Fiam\u002F01.essentials\u002F00.tokens",{"title":427,"path":428,"stem":429},"Access Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Faccess-tokens","docs\u002Fiam\u002F01.essentials\u002F01.access-tokens",{"title":431,"path":432,"stem":433},"Refresh Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Frefresh-tokens","docs\u002Fiam\u002F01.essentials\u002F02.refresh-tokens",{"title":435,"path":436,"stem":437},"Anomaly Detection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fanomalies","docs\u002Fiam\u002F01.essentials\u002F03.anomalies",{"title":439,"path":440,"stem":441},"Signup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fsignup","docs\u002Fiam\u002F01.essentials\u002F04.signup",{"title":443,"path":444,"stem":445},"Login","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogin","docs\u002Fiam\u002F01.essentials\u002F05.login",{"title":447,"path":448,"stem":449},"Logout","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogout","docs\u002Fiam\u002F01.essentials\u002F06.logout",{"title":451,"path":452,"stem":453},"OAuth","\u002Fdocs\u002Fiam\u002Fessentials\u002Foauth","docs\u002Fiam\u002F01.essentials\u002F07.oauth",{"title":455,"path":456,"stem":457},"Magic Links","\u002Fdocs\u002Fiam\u002Fessentials\u002Fmagic-links","docs\u002Fiam\u002F01.essentials\u002F08.magic-links",{"title":459,"path":460,"stem":461},"Emails","\u002Fdocs\u002Fiam\u002Fessentials\u002Femails","docs\u002Fiam\u002F01.essentials\u002F09.emails",{"title":192,"path":463,"stem":464},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fmfa","docs\u002Fiam\u002F01.essentials\u002F10.mfa",{"title":466,"path":467,"stem":468},"Fingerprinting","\u002Fdocs\u002Fiam\u002Fessentials\u002Ffingerprinting","docs\u002Fiam\u002F01.essentials\u002F11.fingerprinting",{"title":470,"path":471,"stem":472},"Backend for Frontend","\u002Fdocs\u002Fiam\u002Fessentials\u002Fbff","docs\u002Fiam\u002F01.essentials\u002F12.bff",{"title":474,"path":475,"stem":476},"HMAC Authentication","\u002Fdocs\u002Fiam\u002Fessentials\u002Fhmac","docs\u002Fiam\u002F01.essentials\u002F13.hmac",{"title":478,"path":479,"stem":480},"XSS Protection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fxss","docs\u002Fiam\u002F01.essentials\u002F14.xss",{"title":188,"path":482,"stem":483},"\u002Fdocs\u002Fiam\u002Fessentials\u002Flogging","docs\u002Fiam\u002F01.essentials\u002F15.logging",{"title":485,"path":486,"stem":487},"Rate Limiting","\u002Fdocs\u002Fiam\u002Fessentials\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F16.rate-limiting",{"title":489,"path":490,"stem":491},"Database","\u002Fdocs\u002Fiam\u002Fessentials\u002Fdatabase","docs\u002Fiam\u002F01.essentials\u002F17.database",{"title":184,"path":493,"stem":494},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fcookies","docs\u002Fiam\u002F01.essentials\u002F18.cookies",{"title":496,"path":497,"stem":498},"Service Startup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fservice","docs\u002Fiam\u002F01.essentials\u002F19.service",{"title":202,"path":500,"stem":501},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fpassword-reset","docs\u002Fiam\u002F01.essentials\u002F20.password-reset",{"title":503,"path":504,"stem":505,"children":506},"API Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi","docs\u002Fiam\u002F01.essentials\u002F21.api\u002Findex",[507,508,512,516,546,549],{"title":503,"path":504,"stem":505},{"title":509,"path":510,"stem":511},"Creating Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fcreation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F00.creation",{"title":513,"path":514,"stem":515},"Verifying Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fverification","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F01.verification",{"title":517,"path":518,"stem":519,"children":520},"Manage Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002Findex",[521,522,526,530,534,538,542],{"title":517,"path":518,"stem":519},{"title":523,"path":524,"stem":525},"Privileges","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fprivilege","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F00.privilege",{"title":527,"path":528,"stem":529},"Revocation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frevocation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F01.revocation",{"title":531,"path":532,"stem":533},"Rotation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frotation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F02.rotation",{"title":535,"path":536,"stem":537},"IP Restriction","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fip-updates","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F03.ip-updates",{"title":539,"path":540,"stem":541},"Metadata","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fmetadata","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F04.metadata",{"title":543,"path":544,"stem":545},"Token Listing","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Flist","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F05.list",{"title":485,"path":547,"stem":548},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F03.rate-limiting",{"title":38,"path":550,"stem":551},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fsecurity","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F04.security",{"title":38,"path":553,"stem":554},"\u002Fdocs\u002Fiam\u002Fsecurity","docs\u002Fiam\u002F02.security",{"title":243,"path":556,"stem":557,"children":558,"page":53},"\u002Fdocs\u002Fiam\u002Fguides","docs\u002Fiam\u002F03.guides",[559,563,567],{"title":560,"path":561,"stem":562},"Deployment","\u002Fdocs\u002Fiam\u002Fguides\u002Fdeployment","docs\u002Fiam\u002F03.guides\u002Fdeployment",{"title":564,"path":565,"stem":566},"Operation Scripts","\u002Fdocs\u002Fiam\u002Fguides\u002Foperation-scripts","docs\u002Fiam\u002F03.guides\u002Foperation-scripts",{"title":568,"path":569,"stem":570},"Role-Based Access Control","\u002Fdocs\u002Fiam\u002Fguides\u002Frbac","docs\u002Fiam\u002F03.guides\u002Frbac",{"title":264,"path":572,"stem":573},"\u002Fdocs\u002Fiam\u002Fconfiguration","docs\u002Fiam\u002F04.configuration",{"title":575,"path":576,"stem":577,"children":578,"page":53},"Api","\u002Fdocs\u002Fiam\u002Fapi","docs\u002Fiam\u002F05.API",[579,582,585],{"title":135,"path":580,"stem":581},"\u002Fdocs\u002Fiam\u002Fapi\u002Fapi","docs\u002Fiam\u002F05.API\u002F00.api",{"title":277,"path":583,"stem":584},"\u002Fdocs\u002Fiam\u002Fapi\u002Fmiddlewares","docs\u002Fiam\u002F05.API\u002F02.middlewares",{"title":273,"path":586,"stem":587},"\u002Fdocs\u002Fiam\u002Fapi\u002Froutes","docs\u002Fiam\u002F05.API\u002F03.routes",{"title":40,"path":42,"stem":70,"children":589},[590,591,592,593,605,606,607,608],{"title":40,"path":42,"stem":70},{"title":14,"path":74,"stem":75},{"title":77,"path":78,"stem":79},{"title":81,"path":82,"stem":83,"children":594},[595,596,597,598,599,600,601,602,603,604],{"title":81,"path":82,"stem":83},{"title":87,"path":88,"stem":89},{"title":91,"path":92,"stem":93},{"title":95,"path":96,"stem":97},{"title":99,"path":100,"stem":101},{"title":103,"path":104,"stem":105},{"title":107,"path":108,"stem":109},{"title":111,"path":112,"stem":113},{"title":115,"path":116,"stem":117},{"title":119,"path":120,"stem":121},{"title":123,"path":124,"stem":125},{"title":127,"path":128,"stem":129},{"title":131,"path":132,"stem":133},{"title":135,"path":136,"stem":137},{"title":285,"path":48,"stem":610,"children":611},"docs\u002Futils\u002Findex",[612,613,630,663,760],{"title":285,"path":48,"stem":610},{"title":614,"path":615,"stem":616,"children":617,"page":53},"Eslint","\u002Fdocs\u002Futils\u002Feslint","docs\u002Futils\u002Feslint",[618,622,626],{"title":619,"path":620,"stem":621},"React Config","\u002Fdocs\u002Futils\u002Feslint\u002Freact","docs\u002Futils\u002Feslint\u002Freact",{"title":623,"path":624,"stem":625},"TypeScript Config","\u002Fdocs\u002Futils\u002Feslint\u002Ftypescript","docs\u002Futils\u002Feslint\u002Ftypescript",{"title":627,"path":628,"stem":629},"Vue Config","\u002Fdocs\u002Futils\u002Feslint\u002Fvue","docs\u002Futils\u002Feslint\u002Fvue",{"title":631,"path":632,"stem":633,"children":634,"page":53},"Server","\u002Fdocs\u002Futils\u002Fserver","docs\u002Futils\u002Fserver",[635,639,643,647,651,655,659],{"title":636,"path":637,"stem":638},"Encryption","\u002Fdocs\u002Futils\u002Fserver\u002Fencryption","docs\u002Futils\u002Fserver\u002Fencryption",{"title":640,"path":641,"stem":642},"Path Resolver","\u002Fdocs\u002Futils\u002Fserver\u002Fpathresolver","docs\u002Futils\u002Fserver\u002FpathResolver",{"title":644,"path":645,"stem":646},"File Replacements","\u002Fdocs\u002Futils\u002Fserver\u002Freplace","docs\u002Futils\u002Fserver\u002Freplace",{"title":648,"path":649,"stem":650},"run","\u002Fdocs\u002Futils\u002Fserver\u002Frun","docs\u002Futils\u002Fserver\u002Frun",{"title":652,"path":653,"stem":654},"scheduleTask","\u002Fdocs\u002Futils\u002Fserver\u002Fscheduletask","docs\u002Futils\u002Fserver\u002FscheduleTask",{"title":656,"path":657,"stem":658},"spawnRun","\u002Fdocs\u002Futils\u002Fserver\u002Fspawnrun","docs\u002Futils\u002Fserver\u002FspawnRun",{"title":660,"path":661,"stem":662},"uploadCsv","\u002Fdocs\u002Futils\u002Fserver\u002Fuploadcsv","docs\u002Futils\u002Fserver\u002FuploadCsv",{"title":664,"path":665,"stem":666,"children":667,"page":53},"Shared","\u002Fdocs\u002Futils\u002Fshared","docs\u002Futils\u002Fshared",[668,672,676,680,684,688,692,696,700,704,708,712,716,720,724,728,732,736,740,744,748,752,756],{"title":669,"path":670,"stem":671},"BatchQueue","\u002Fdocs\u002Futils\u002Fshared\u002Fbatchqueue","docs\u002Futils\u002Fshared\u002FbatchQueue",{"title":673,"path":674,"stem":675},"capitalize","\u002Fdocs\u002Futils\u002Fshared\u002Fcapitalize","docs\u002Futils\u002Fshared\u002Fcapitalize",{"title":677,"path":678,"stem":679},"chunkProcess","\u002Fdocs\u002Futils\u002Fshared\u002Fchunkprocess","docs\u002Futils\u002Fshared\u002FchunkProcess",{"title":681,"path":682,"stem":683},"cleanObject","\u002Fdocs\u002Futils\u002Fshared\u002Fcleanobject","docs\u002Futils\u002Fshared\u002FcleanObject",{"title":685,"path":686,"stem":687},"createConfigManager","\u002Fdocs\u002Futils\u002Fshared\u002Fconfigurationdefiner","docs\u002Futils\u002Fshared\u002FconfigurationDefiner",{"title":689,"path":690,"stem":691},"debounce","\u002Fdocs\u002Futils\u002Fshared\u002Fdebounce","docs\u002Futils\u002Fshared\u002Fdebounce",{"title":693,"path":694,"stem":695},"ensureArray","\u002Fdocs\u002Futils\u002Fshared\u002Fensurearray","docs\u002Futils\u002Fshared\u002FensureArray",{"title":697,"path":698,"stem":699},"fetchWithRetry","\u002Fdocs\u002Futils\u002Fshared\u002Ffetchwithretry","docs\u002Futils\u002Fshared\u002FfetchWithRetry",{"title":701,"path":702,"stem":703},"filterEmptyValues","\u002Fdocs\u002Futils\u002Fshared\u002Ffilteremptyvalues","docs\u002Futils\u002Fshared\u002FfilterEmptyValues",{"title":705,"path":706,"stem":707},"findStringsInObject","\u002Fdocs\u002Futils\u002Fshared\u002Ffindobjectvalues","docs\u002Futils\u002Fshared\u002FfindObjectValues",{"title":709,"path":710,"stem":711},"fisherYatesShuffle","\u002Fdocs\u002Futils\u002Fshared\u002Ffisheryatesshuffle","docs\u002Futils\u002Fshared\u002FfisherYatesShuffle",{"title":713,"path":714,"stem":715},"getRandomImage","\u002Fdocs\u002Futils\u002Fshared\u002Fgetrandomimage","docs\u002Futils\u002Fshared\u002FgetRandomImage",{"title":717,"path":718,"stem":719},"isObjectHasValues","\u002Fdocs\u002Futils\u002Fshared\u002Fisobjecthasvalues","docs\u002Futils\u002Fshared\u002FisObjectHasValues",{"title":721,"path":722,"stem":723},"isAsyncOrPromise","\u002Fdocs\u002Futils\u002Fshared\u002Fispromise","docs\u002Futils\u002Fshared\u002FisPromise",{"title":725,"path":726,"stem":727},"MiniCache","\u002Fdocs\u002Futils\u002Fshared\u002Fminicache","docs\u002Futils\u002Fshared\u002FminiCache",{"title":729,"path":730,"stem":731},"parseCookies","\u002Fdocs\u002Futils\u002Fshared\u002Fparserawcookies","docs\u002Futils\u002Fshared\u002FparseRawCookies",{"title":733,"path":734,"stem":735},"safeAction","\u002Fdocs\u002Futils\u002Fshared\u002Fpromiselocker","docs\u002Futils\u002Fshared\u002FpromiseLocker",{"title":737,"path":738,"stem":739},"Random","\u002Fdocs\u002Futils\u002Fshared\u002Frandom","docs\u002Futils\u002Fshared\u002Frandom",{"title":741,"path":742,"stem":743},"range","\u002Fdocs\u002Futils\u002Fshared\u002Frange","docs\u002Futils\u002Fshared\u002Frange",{"title":745,"path":746,"stem":747},"rateLimiters","\u002Fdocs\u002Futils\u002Fshared\u002Fratelimiters","docs\u002Futils\u002Fshared\u002FrateLimiters",{"title":749,"path":750,"stem":751},"safeObjectMerge","\u002Fdocs\u002Futils\u002Fshared\u002Fsafemerge","docs\u002Futils\u002Fshared\u002FsafeMerge",{"title":753,"path":754,"stem":755},"textTruncation","\u002Fdocs\u002Futils\u002Fshared\u002Ftexttruncation","docs\u002Futils\u002Fshared\u002FtextTruncation",{"title":757,"path":758,"stem":759},"validateZodSchema","\u002Fdocs\u002Futils\u002Fshared\u002Fvalidatezodschema","docs\u002Futils\u002Fshared\u002FvalidateZodSchema",{"title":761,"path":762,"stem":763,"children":764},"Utility Types","\u002Fdocs\u002Futils\u002Ftypes","docs\u002Futils\u002Ftypes\u002Findex",[765,766,770,774,778,782,786,790,794,798],{"title":761,"path":762,"stem":763},{"title":767,"path":768,"stem":769},"Brand","\u002Fdocs\u002Futils\u002Ftypes\u002Fbrand","docs\u002Futils\u002Ftypes\u002FBrand",{"title":771,"path":772,"stem":773},"DeepPartial","\u002Fdocs\u002Futils\u002Ftypes\u002Fdeeppartial","docs\u002Futils\u002Ftypes\u002FDeepPartial",{"title":775,"path":776,"stem":777},"Merge","\u002Fdocs\u002Futils\u002Ftypes\u002Fmerge","docs\u002Futils\u002Ftypes\u002FMerge",{"title":779,"path":780,"stem":781},"NonNullable","\u002Fdocs\u002Futils\u002Ftypes\u002Fnonnullable","docs\u002Futils\u002Ftypes\u002FNonNullable",{"title":783,"path":784,"stem":785},"Prettify","\u002Fdocs\u002Futils\u002Ftypes\u002Fprettify","docs\u002Futils\u002Ftypes\u002FPrettify",{"title":787,"path":788,"stem":789},"PromiseType","\u002Fdocs\u002Futils\u002Ftypes\u002Fpromisetype","docs\u002Futils\u002Ftypes\u002FPromiseType",{"title":791,"path":792,"stem":793},"RequireKeys","\u002Fdocs\u002Futils\u002Ftypes\u002Frequirekeys","docs\u002Futils\u002Ftypes\u002FRequireKeys",{"title":795,"path":796,"stem":797},"StandardResponse","\u002Fdocs\u002Futils\u002Ftypes\u002Fstandardresponse","docs\u002Futils\u002Ftypes\u002FStandardResponse",{"title":799,"path":800,"stem":801},"ValueOf","\u002Fdocs\u002Futils\u002Ftypes\u002Fvalueof","docs\u002Futils\u002Ftypes\u002FValueOf",{"id":4,"extension":5,"links":803,"meta":814,"stem":62,"__hash__":63},[804,812,813],{"nested":8,"label":9,"icon":10,"to":11,"children":805},[806,807,808,809,810,811],{"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":816,"title":14,"body":817,"description":1828,"extension":1829,"icon":15,"meta":1830,"module":1831,"navigation":8,"path":74,"rawbody":1832,"seo":1833,"stem":75,"__hash__":1834},"docs\u002Fdocs\u002Fshield-base\u002F00.getting-started.md",{"type":818,"value":819,"toc":1814},"minimark",[820,835,838,843,914,929,931,935,938,991,994,1045,1052,1054,1058,1061,1348,1358,1360,1364,1367,1548,1558,1560,1564,1570,1578,1581,1583,1587,1590,1773,1783,1785,1789,1810],[821,822,823,824,834],"p",{},"Shield Base compiles network intelligence data into binary database formats. Most sources produce MMDB files, which require the ",[825,826,830],"a",{"href":827,"rel":828},"https:\u002F\u002Fgithub.com\u002Fipinfo\u002Fmmdbctl",[829],"nofollow",[831,832,833],"code",{},"mmdbctl"," binary. The interactive wizard handles this dependency automatically on first run.",[836,837],"hr",{},[839,840,842],"h2",{"id":841},"installation","Installation",[844,845,846,871,885,900],"code-group",{},[847,848,854],"pre",{"className":849,"code":850,"filename":851,"language":852,"meta":853,"style":853},"language-bash shiki shiki-themes light-plus light-plus dracula","pnpm add @riavzon\u002Fshield-base\n","pnpm","bash","",[831,855,856],{"__ignoreMap":853},[857,858,861,864,868],"span",{"class":859,"line":860},"line",1,[857,862,851],{"class":863},"sHOzp",[857,865,867],{"class":866},"sFB1V"," add",[857,869,870],{"class":866}," @riavzon\u002Fshield-base\n",[847,872,875],{"className":849,"code":873,"filename":874,"language":852,"meta":853,"style":853},"yarn add @riavzon\u002Fshield-base\n","yarn",[831,876,877],{"__ignoreMap":853},[857,878,879,881,883],{"class":859,"line":860},[857,880,874],{"class":863},[857,882,867],{"class":866},[857,884,870],{"class":866},[847,886,889],{"className":849,"code":887,"filename":888,"language":852,"meta":853,"style":853},"npm install @riavzon\u002Fshield-base\n","npm",[831,890,891],{"__ignoreMap":853},[857,892,893,895,898],{"class":859,"line":860},[857,894,888],{"class":863},[857,896,897],{"class":866}," install",[857,899,870],{"class":866},[847,901,904],{"className":849,"code":902,"filename":903,"language":852,"meta":853,"style":853},"bun add @riavzon\u002Fshield-base\n","bun",[831,905,906],{"__ignoreMap":853},[857,907,908,910,912],{"class":859,"line":860},[857,909,903],{"class":863},[857,911,867],{"class":866},[857,913,870],{"class":866},[915,916,917],"warning",{},[821,918,919,924,925,928],{},[825,920,922],{"href":827,"rel":921},[829],[831,923,833],{}," is required for compiling MMDB databases. Shield Base detects whether it is installed and prompts you to install it automatically if it is not found. The binary path is cached at ",[831,926,927],{},"~\u002F.shield-base\u002F.cache.json"," after the first run.",[836,930],{},[839,932,934],{"id":933},"the-interactive-wizard","The Interactive Wizard",[821,936,937],{},"Run the command without arguments to start the interactive wizard:",[844,939,940,954,967,979],{},[847,941,943],{"className":849,"code":942,"filename":851,"language":852,"meta":853,"style":853},"pnpm dlx @riavzon\u002Fshield-base\n",[831,944,945],{"__ignoreMap":853},[857,946,947,949,952],{"class":859,"line":860},[857,948,851],{"class":863},[857,950,951],{"class":866}," dlx",[857,953,870],{"class":866},[847,955,957],{"className":849,"code":956,"filename":874,"language":852,"meta":853,"style":853},"yarn dlx @riavzon\u002Fshield-base\n",[831,958,959],{"__ignoreMap":853},[857,960,961,963,965],{"class":859,"line":860},[857,962,874],{"class":863},[857,964,951],{"class":866},[857,966,870],{"class":866},[847,968,970],{"className":849,"code":969,"filename":888,"language":852,"meta":853,"style":853},"npx @riavzon\u002Fshield-base\n",[831,971,972],{"__ignoreMap":853},[857,973,974,977],{"class":859,"line":860},[857,975,976],{"class":863},"npx",[857,978,870],{"class":866},[847,980,982],{"className":849,"code":981,"filename":903,"language":852,"meta":853,"style":853},"bunx @riavzon\u002Fshield-base\n",[831,983,984],{"__ignoreMap":853},[857,985,986,989],{"class":859,"line":860},[857,987,988],{"class":863},"bunx",[857,990,870],{"class":866},[821,992,993],{},"The wizard walks you through these steps:",[995,996,997,1002,1008,1012,1015,1019,1032,1036],"steps",{},[998,999,1001],"h3",{"id":1000},"verify-dependencies","Verify Dependencies",[821,1003,1004,1005,1007],{},"Shield Base checks for the ",[831,1006,833],{}," binary. If it is not found, it offers to install it for you and caches the path for future runs.",[998,1009,1011],{"id":1010},"select-data-sources","Select Data Sources",[821,1013,1014],{},"Choose which databases to compile. You can select all sources at once or pick individual ones from a multi-select prompt. Each source displays a hint describing what it contains.",[998,1016,1018],{"id":1017},"configure-bgp-contact-info","Configure BGP Contact Info",[821,1020,1021,1022,1025,1026,1031],{},"If you selected the BGP source, you are prompted for a contact User-Agent string in the format ",[831,1023,1024],{},"\u003Cname> [url] - \u003Cemail>",". ",[825,1027,1030],{"href":1028,"rel":1029},"https:\u002F\u002Fbgp.tools\u002Fkb\u002Fapi",[829],"BGP.tools"," requires this to prevent API blocking. The value is cached for subsequent runs.",[998,1033,1035],{"id":1034},"accept-firehol-license","Accept FireHOL License",[821,1037,1038,1039,1044],{},"If you selected any FireHOL threat levels, you must acknowledge the ",[825,1040,1043],{"href":1041,"rel":1042},"https:\u002F\u002Fgithub.com\u002Ffirehol\u002Fblocklist-ipsets",[829],"FireHOL"," licensing terms before compilation proceeds.",[821,1046,1047,1048,1051],{},"When compilation finishes, the databases are written to your current working directory, or the path you specified with ",[831,1049,1050],{},"--path",".",[836,1053],{},[839,1055,1057],{"id":1056},"quick-start-compile-everything","Quick Start: Compile Everything",[821,1059,1060],{},"Skip the wizard and compile all sources at once:",[844,1062,1063,1100,1127,1152,1177],{},[847,1064,1066],{"className":849,"code":1065,"filename":851,"language":852,"meta":853,"style":853},"pnpm dlx @riavzon\u002Fshield-base --all --parallel --contact \"Your Name https:\u002F\u002Fexample.com - you@example.com\" --acceptFireholRisk\n",[831,1067,1068],{"__ignoreMap":853},[857,1069,1070,1072,1074,1077,1081,1084,1087,1091,1094,1097],{"class":859,"line":860},[857,1071,851],{"class":863},[857,1073,951],{"class":866},[857,1075,1076],{"class":866}," @riavzon\u002Fshield-base",[857,1078,1080],{"class":1079},"sjR7W"," --all",[857,1082,1083],{"class":1079}," --parallel",[857,1085,1086],{"class":1079}," --contact",[857,1088,1090],{"class":1089},"sFkSl"," \"",[857,1092,1093],{"class":866},"Your Name https:\u002F\u002Fexample.com - you@example.com",[857,1095,1096],{"class":1089},"\"",[857,1098,1099],{"class":1079}," --acceptFireholRisk\n",[847,1101,1103],{"className":849,"code":1102,"filename":874,"language":852,"meta":853,"style":853},"yarn dlx @riavzon\u002Fshield-base --all --parallel --contact \"Your Name https:\u002F\u002Fexample.com - you@example.com\" --acceptFireholRisk\n",[831,1104,1105],{"__ignoreMap":853},[857,1106,1107,1109,1111,1113,1115,1117,1119,1121,1123,1125],{"class":859,"line":860},[857,1108,874],{"class":863},[857,1110,951],{"class":866},[857,1112,1076],{"class":866},[857,1114,1080],{"class":1079},[857,1116,1083],{"class":1079},[857,1118,1086],{"class":1079},[857,1120,1090],{"class":1089},[857,1122,1093],{"class":866},[857,1124,1096],{"class":1089},[857,1126,1099],{"class":1079},[847,1128,1130],{"className":849,"code":1129,"filename":888,"language":852,"meta":853,"style":853},"npx @riavzon\u002Fshield-base --all --parallel --contact \"Your Name https:\u002F\u002Fexample.com - you@example.com\" --acceptFireholRisk\n",[831,1131,1132],{"__ignoreMap":853},[857,1133,1134,1136,1138,1140,1142,1144,1146,1148,1150],{"class":859,"line":860},[857,1135,976],{"class":863},[857,1137,1076],{"class":866},[857,1139,1080],{"class":1079},[857,1141,1083],{"class":1079},[857,1143,1086],{"class":1079},[857,1145,1090],{"class":1089},[857,1147,1093],{"class":866},[857,1149,1096],{"class":1089},[857,1151,1099],{"class":1079},[847,1153,1155],{"className":849,"code":1154,"filename":903,"language":852,"meta":853,"style":853},"bunx @riavzon\u002Fshield-base --all --parallel --contact \"Your Name https:\u002F\u002Fexample.com - you@example.com\" --acceptFireholRisk\n",[831,1156,1157],{"__ignoreMap":853},[857,1158,1159,1161,1163,1165,1167,1169,1171,1173,1175],{"class":859,"line":860},[857,1160,988],{"class":863},[857,1162,1076],{"class":866},[857,1164,1080],{"class":1079},[857,1166,1083],{"class":1079},[857,1168,1086],{"class":1079},[857,1170,1090],{"class":1089},[857,1172,1093],{"class":866},[857,1174,1096],{"class":1089},[857,1176,1099],{"class":1079},[847,1178,1183],{"className":1179,"code":1180,"filename":1181,"language":1182,"meta":853,"style":853},"language-ts shiki shiki-themes light-plus light-plus dracula","import { generateData as executeAll } from '@riavzon\u002Fshield-base';\n\nconst outputDirectory = '.\u002Fdata\u002Fmmdb';\nconst contactInfo = 'Your Name https:\u002F\u002Fexample.com - you@example.com';\nconst mmdbPath = 'mmdbctl';\nconst selectedSources = true; \u002F\u002F true = all FireHOL levels included\n\nawait executeAll(outputDirectory, contactInfo, selectedSources, mmdbPath);\n","Programmatic","ts",[831,1184,1185,1224,1230,1254,1272,1290,1310,1315],{"__ignoreMap":853},[857,1186,1187,1191,1195,1199,1202,1206,1209,1212,1215,1218,1221],{"class":859,"line":860},[857,1188,1190],{"class":1189},"sZ328","import",[857,1192,1194],{"class":1193},"sDd4n"," { ",[857,1196,1198],{"class":1197},"sygFZ","generateData",[857,1200,1201],{"class":1189}," as",[857,1203,1205],{"class":1204},"sjsA6"," executeAll",[857,1207,1208],{"class":1193}," } ",[857,1210,1211],{"class":1189},"from",[857,1213,1214],{"class":1089}," '",[857,1216,1217],{"class":866},"@riavzon\u002Fshield-base",[857,1219,1220],{"class":1089},"'",[857,1222,1223],{"class":1193},";\n",[857,1225,1227],{"class":859,"line":1226},2,[857,1228,1229],{"emptyLinePlaceholder":8},"\n",[857,1231,1233,1237,1241,1245,1247,1250,1252],{"class":859,"line":1232},3,[857,1234,1236],{"class":1235},"sl46w","const",[857,1238,1240],{"class":1239},"s3JHE"," outputDirectory",[857,1242,1244],{"class":1243},"saOXh"," =",[857,1246,1214],{"class":1089},[857,1248,1249],{"class":866},".\u002Fdata\u002Fmmdb",[857,1251,1220],{"class":1089},[857,1253,1223],{"class":1193},[857,1255,1257,1259,1262,1264,1266,1268,1270],{"class":859,"line":1256},4,[857,1258,1236],{"class":1235},[857,1260,1261],{"class":1239}," contactInfo",[857,1263,1244],{"class":1243},[857,1265,1214],{"class":1089},[857,1267,1093],{"class":866},[857,1269,1220],{"class":1089},[857,1271,1223],{"class":1193},[857,1273,1275,1277,1280,1282,1284,1286,1288],{"class":859,"line":1274},5,[857,1276,1236],{"class":1235},[857,1278,1279],{"class":1239}," mmdbPath",[857,1281,1244],{"class":1243},[857,1283,1214],{"class":1089},[857,1285,833],{"class":866},[857,1287,1220],{"class":1089},[857,1289,1223],{"class":1193},[857,1291,1293,1295,1298,1300,1303,1306],{"class":859,"line":1292},6,[857,1294,1236],{"class":1235},[857,1296,1297],{"class":1239}," selectedSources",[857,1299,1244],{"class":1243},[857,1301,1302],{"class":1079}," true",[857,1304,1305],{"class":1193},"; ",[857,1307,1309],{"class":1308},"sghk6","\u002F\u002F true = all FireHOL levels included\n",[857,1311,1313],{"class":859,"line":1312},7,[857,1314,1229],{"emptyLinePlaceholder":8},[857,1316,1318,1321,1323,1326,1329,1332,1335,1337,1340,1342,1345],{"class":859,"line":1317},8,[857,1319,1320],{"class":1189},"await",[857,1322,1205],{"class":863},[857,1324,1325],{"class":1193},"(",[857,1327,1328],{"class":1204},"outputDirectory",[857,1330,1331],{"class":1193},", ",[857,1333,1334],{"class":1204},"contactInfo",[857,1336,1331],{"class":1193},[857,1338,1339],{"class":1204},"selectedSources",[857,1341,1331],{"class":1193},[857,1343,1344],{"class":1204},"mmdbPath",[857,1346,1347],{"class":1193},");\n",[821,1349,1350,1353,1354,1357],{},[831,1351,1352],{},"--parallel"," runs all compilation jobs concurrently. ",[831,1355,1356],{},"--acceptFireholRisk"," acknowledges the FireHOL license required for the threat intelligence datasets.",[836,1359],{},[839,1361,1363],{"id":1362},"output-files","Output Files",[821,1365,1366],{},"After a full compilation run, the following files are produced in the output directory:",[1368,1369,1370,1386],"table",{},[1371,1372,1373],"thead",{},[1374,1375,1376,1380,1383],"tr",{},[1377,1378,1379],"th",{},"File",[1377,1381,1382],{},"Format",[1377,1384,1385],{},"Contents",[1387,1388,1389,1403,1415,1427,1439,1451,1463,1475,1487,1499,1511,1523,1536],"tbody",{},[1374,1390,1391,1397,1400],{},[1392,1393,1394],"td",{},[831,1395,1396],{},"asn.mmdb",[1392,1398,1399],{},"MMDB",[1392,1401,1402],{},"BGP\u002FASN routing data",[1374,1404,1405,1410,1412],{},[1392,1406,1407],{},[831,1408,1409],{},"city.mmdb",[1392,1411,1399],{},[1392,1413,1414],{},"IP-to-city geolocation",[1374,1416,1417,1422,1424],{},[1392,1418,1419],{},[831,1420,1421],{},"country.mmdb",[1392,1423,1399],{},[1392,1425,1426],{},"IP-to-country mapping",[1374,1428,1429,1434,1436],{},[1392,1430,1431],{},[831,1432,1433],{},"proxy.mmdb",[1392,1435,1399],{},[1392,1437,1438],{},"Known proxy and anonymizer IPs",[1374,1440,1441,1446,1448],{},[1392,1442,1443],{},[831,1444,1445],{},"tor.mmdb",[1392,1447,1399],{},[1392,1449,1450],{},"Tor relay and exit node IPs",[1374,1452,1453,1458,1460],{},[1392,1454,1455],{},[831,1456,1457],{},"goodBots.mmdb",[1392,1459,1399],{},[1392,1461,1462],{},"Verified crawler IP ranges",[1374,1464,1465,1470,1472],{},[1392,1466,1467],{},[831,1468,1469],{},"firehol_l1.mmdb",[1392,1471,1399],{},[1392,1473,1474],{},"FireHOL Level 1 threat IPs",[1374,1476,1477,1482,1484],{},[1392,1478,1479],{},[831,1480,1481],{},"firehol_l2.mmdb",[1392,1483,1399],{},[1392,1485,1486],{},"FireHOL Level 2 threat IPs",[1374,1488,1489,1494,1496],{},[1392,1490,1491],{},[831,1492,1493],{},"firehol_l3.mmdb",[1392,1495,1399],{},[1392,1497,1498],{},"FireHOL Level 3 threat IPs",[1374,1500,1501,1506,1508],{},[1392,1502,1503],{},[831,1504,1505],{},"firehol_l4.mmdb",[1392,1507,1399],{},[1392,1509,1510],{},"FireHOL Level 4 threat IPs",[1374,1512,1513,1518,1520],{},[1392,1514,1515],{},[831,1516,1517],{},"firehol_anonymous.mmdb",[1392,1519,1399],{},[1392,1521,1522],{},"Anonymity network relay IPs",[1374,1524,1525,1530,1533],{},[1392,1526,1527],{},[831,1528,1529],{},"useragent-db\u002Fuseragent.mdb",[1392,1531,1532],{},"LMDB",[1392,1534,1535],{},"Suspicious user-agent patterns",[1374,1537,1538,1543,1545],{},[1392,1539,1540],{},[831,1541,1542],{},"email-db\u002Fdisposable-emails.mdb",[1392,1544,1532],{},[1392,1546,1547],{},"Disposable email domains",[1549,1550,1551],"note",{},[821,1552,1553,1554,1557],{},"LMDB databases also produce a ",[831,1555,1556],{},".mdb-lock"," file alongside the main database. This file is generated automatically and is required for concurrent access.",[836,1559],{},[839,1561,1563],{"id":1562},"caching","Caching",[821,1565,1566,1567,1569],{},"Shield Base caches the ",[831,1568,833],{}," binary path, your selected sources, BGP contact info, and output directory at:",[847,1571,1576],{"className":1572,"code":1574,"language":1575},[1573],"language-text","~\u002F.shield-base\u002F.cache.json\n","text",[831,1577,1574],{"__ignoreMap":853},[821,1579,1580],{},"On subsequent runs this cache is used to skip the wizard and restore your previous configuration. Delete this file to force a clean start.",[836,1582],{},[839,1584,1586],{"id":1585},"refreshing-databases","Refreshing Databases",[821,1588,1589],{},"Data sources are updated regularly by their upstream providers. Use the refresh flags to re-download and recompile without going through the wizard again:",[844,1591,1592,1633,1658,1679,1700],{},[847,1593,1595],{"className":849,"code":1594,"filename":851,"language":852,"meta":853,"style":853},"# Refresh all cached sources\npnpm dlx @riavzon\u002Fshield-base --refreshAll\n\n# Refresh only current run sources\npnpm dlx @riavzon\u002Fshield-base --refresh\n",[831,1596,1597,1602,1613,1617,1622],{"__ignoreMap":853},[857,1598,1599],{"class":859,"line":860},[857,1600,1601],{"class":1308},"# Refresh all cached sources\n",[857,1603,1604,1606,1608,1610],{"class":859,"line":1226},[857,1605,851],{"class":863},[857,1607,951],{"class":866},[857,1609,1076],{"class":866},[857,1611,1612],{"class":1079}," --refreshAll\n",[857,1614,1615],{"class":859,"line":1232},[857,1616,1229],{"emptyLinePlaceholder":8},[857,1618,1619],{"class":859,"line":1256},[857,1620,1621],{"class":1308},"# Refresh only current run sources\n",[857,1623,1624,1626,1628,1630],{"class":859,"line":1274},[857,1625,851],{"class":863},[857,1627,951],{"class":866},[857,1629,1076],{"class":866},[857,1631,1632],{"class":1079}," --refresh\n",[847,1634,1636],{"className":849,"code":1635,"filename":874,"language":852,"meta":853,"style":853},"yarn dlx @riavzon\u002Fshield-base --refreshAll\nyarn dlx @riavzon\u002Fshield-base --refresh\n",[831,1637,1638,1648],{"__ignoreMap":853},[857,1639,1640,1642,1644,1646],{"class":859,"line":860},[857,1641,874],{"class":863},[857,1643,951],{"class":866},[857,1645,1076],{"class":866},[857,1647,1612],{"class":1079},[857,1649,1650,1652,1654,1656],{"class":859,"line":1226},[857,1651,874],{"class":863},[857,1653,951],{"class":866},[857,1655,1076],{"class":866},[857,1657,1632],{"class":1079},[847,1659,1661],{"className":849,"code":1660,"filename":888,"language":852,"meta":853,"style":853},"npx @riavzon\u002Fshield-base --refreshAll\nnpx @riavzon\u002Fshield-base --refresh\n",[831,1662,1663,1671],{"__ignoreMap":853},[857,1664,1665,1667,1669],{"class":859,"line":860},[857,1666,976],{"class":863},[857,1668,1076],{"class":866},[857,1670,1612],{"class":1079},[857,1672,1673,1675,1677],{"class":859,"line":1226},[857,1674,976],{"class":863},[857,1676,1076],{"class":866},[857,1678,1632],{"class":1079},[847,1680,1682],{"className":849,"code":1681,"filename":903,"language":852,"meta":853,"style":853},"bunx @riavzon\u002Fshield-base --refreshAll\nbunx @riavzon\u002Fshield-base --refresh\n",[831,1683,1684,1692],{"__ignoreMap":853},[857,1685,1686,1688,1690],{"class":859,"line":860},[857,1687,988],{"class":863},[857,1689,1076],{"class":866},[857,1691,1612],{"class":1079},[857,1693,1694,1696,1698],{"class":859,"line":1226},[857,1695,988],{"class":863},[857,1697,1076],{"class":866},[857,1699,1632],{"class":1079},[847,1701,1703],{"className":1179,"code":1702,"filename":1181,"language":1182,"meta":853,"style":853},"import { restartData } from '@riavzon\u002Fshield-base';\n\nconst outputDirectory = '.\u002Fdata\u002Fmmdb';\n\n\u002F\u002F Refresh all previously compiled sources\nawait restartData(outputDirectory, true);\n",[831,1704,1705,1726,1730,1746,1750,1755],{"__ignoreMap":853},[857,1706,1707,1709,1711,1714,1716,1718,1720,1722,1724],{"class":859,"line":860},[857,1708,1190],{"class":1189},[857,1710,1194],{"class":1193},[857,1712,1713],{"class":1204},"restartData",[857,1715,1208],{"class":1193},[857,1717,1211],{"class":1189},[857,1719,1214],{"class":1089},[857,1721,1217],{"class":866},[857,1723,1220],{"class":1089},[857,1725,1223],{"class":1193},[857,1727,1728],{"class":859,"line":1226},[857,1729,1229],{"emptyLinePlaceholder":8},[857,1731,1732,1734,1736,1738,1740,1742,1744],{"class":859,"line":1232},[857,1733,1236],{"class":1235},[857,1735,1240],{"class":1239},[857,1737,1244],{"class":1243},[857,1739,1214],{"class":1089},[857,1741,1249],{"class":866},[857,1743,1220],{"class":1089},[857,1745,1223],{"class":1193},[857,1747,1748],{"class":859,"line":1256},[857,1749,1229],{"emptyLinePlaceholder":8},[857,1751,1752],{"class":859,"line":1274},[857,1753,1754],{"class":1308},"\u002F\u002F Refresh all previously compiled sources\n",[857,1756,1757,1759,1762,1764,1766,1768,1771],{"class":859,"line":1292},[857,1758,1320],{"class":1189},[857,1760,1761],{"class":863}," restartData",[857,1763,1325],{"class":1193},[857,1765,1328],{"class":1204},[857,1767,1331],{"class":1193},[857,1769,1770],{"class":1079},"true",[857,1772,1347],{"class":1193},[1774,1775,1776],"tip",{},[821,1777,1778,1779,1782],{},"Each upstream provider updates its data on its own schedule, some as frequently as every five minutes. Schedule a nightly ",[831,1780,1781],{},"--refreshAll"," run to keep your databases current.",[836,1784],{},[839,1786,1788],{"id":1787},"next-steps","Next Steps",[1790,1791,1792,1799,1805],"ul",{},[1793,1794,1795,1796,1798],"li",{},"See the ",[825,1797,77],{"href":78}," for the full list of flags and subcommands.",[1793,1800,1801,1802,1804],{},"See ",[825,1803,81],{"href":82}," for details on what each source produces and where the data comes from.",[1793,1806,1801,1807,1809],{},[825,1808,123],{"href":124}," to call Shield Base from your own scripts and build pipelines.",[1811,1812,1813],"style",{},"html pre.shiki code .sHOzp, html code.shiki .sHOzp{--shiki-light:#795E26;--shiki-default:#795E26;--shiki-dark:#50FA7B}html pre.shiki code .sFB1V, html code.shiki .sFB1V{--shiki-light:#A31515;--shiki-default:#A31515;--shiki-dark:#F1FA8C}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 .sjR7W, html code.shiki .sjR7W{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#BD93F9}html pre.shiki code .sFkSl, html code.shiki .sFkSl{--shiki-light:#A31515;--shiki-default:#A31515;--shiki-dark:#E9F284}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 .sygFZ, html code.shiki .sygFZ{--shiki-light:#001080;--shiki-light-font-style:inherit;--shiki-default:#001080;--shiki-default-font-style:inherit;--shiki-dark:#FFB86C;--shiki-dark-font-style:italic}html pre.shiki code .sjsA6, html code.shiki .sjsA6{--shiki-light:#001080;--shiki-default:#001080;--shiki-dark:#F8F8F2}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 .sghk6, html code.shiki .sghk6{--shiki-light:#008000;--shiki-default:#008000;--shiki-dark:#6272A4}",{"title":853,"searchDepth":1226,"depth":1226,"links":1815},[1816,1817,1823,1824,1825,1826,1827],{"id":841,"depth":1226,"text":842},{"id":933,"depth":1226,"text":934,"children":1818},[1819,1820,1821,1822],{"id":1000,"depth":1232,"text":1001},{"id":1010,"depth":1232,"text":1011},{"id":1017,"depth":1232,"text":1018},{"id":1034,"depth":1232,"text":1035},{"id":1056,"depth":1226,"text":1057},{"id":1362,"depth":1226,"text":1363},{"id":1562,"depth":1226,"text":1563},{"id":1585,"depth":1226,"text":1586},{"id":1787,"depth":1226,"text":1788},"Install Shield Base, satisfy the mmdbctl dependency, and produce your first compiled databases.","md",{},null,"---\ntitle: Getting Started\ndescription: Install Shield Base, satisfy the mmdbctl dependency, and produce your first compiled databases.\nicon: i-lucide-rocket\n---\n\nShield Base compiles network intelligence data into binary database formats. Most sources produce MMDB files, which require the [`mmdbctl`](https:\u002F\u002Fgithub.com\u002Fipinfo\u002Fmmdbctl) binary. The interactive wizard handles this dependency automatically on first run.\n\n---\n\n## Installation\n\n::code-group\n```bash [pnpm]\npnpm add @riavzon\u002Fshield-base\n```\n\n```bash [yarn]\nyarn add @riavzon\u002Fshield-base\n```\n\n```bash [npm]\nnpm install @riavzon\u002Fshield-base\n```\n\n```bash [bun]\nbun add @riavzon\u002Fshield-base\n```\n::\n\n::warning\n[`mmdbctl`](https:\u002F\u002Fgithub.com\u002Fipinfo\u002Fmmdbctl) is required for compiling MMDB databases. Shield Base detects whether it is installed and prompts you to install it automatically if it is not found. The binary path is cached at `~\u002F.shield-base\u002F.cache.json` after the first run.\n::\n\n---\n\n## The Interactive Wizard\n\nRun the command without arguments to start the interactive wizard:\n\n::code-group\n```bash [pnpm]\npnpm dlx @riavzon\u002Fshield-base\n```\n\n```bash [yarn]\nyarn dlx @riavzon\u002Fshield-base\n```\n\n```bash [npm]\nnpx @riavzon\u002Fshield-base\n```\n\n```bash [bun]\nbunx @riavzon\u002Fshield-base\n```\n::\n\nThe wizard walks you through these steps:\n\n::steps\n### Verify Dependencies\n\nShield Base checks for the `mmdbctl` binary. If it is not found, it offers to install it for you and caches the path for future runs.\n\n### Select Data Sources\n\nChoose which databases to compile. You can select all sources at once or pick individual ones from a multi-select prompt. Each source displays a hint describing what it contains.\n\n### Configure BGP Contact Info\n\nIf you selected the BGP source, you are prompted for a contact User-Agent string in the format `\u003Cname> [url] - \u003Cemail>`. [BGP.tools](https:\u002F\u002Fbgp.tools\u002Fkb\u002Fapi) requires this to prevent API blocking. The value is cached for subsequent runs.\n\n### Accept FireHOL License\n\nIf you selected any FireHOL threat levels, you must acknowledge the [FireHOL](https:\u002F\u002Fgithub.com\u002Ffirehol\u002Fblocklist-ipsets) licensing terms before compilation proceeds.\n::\n\nWhen compilation finishes, the databases are written to your current working directory, or the path you specified with `--path`.\n\n---\n\n## Quick Start: Compile Everything\n\nSkip the wizard and compile all sources at once:\n\n::code-group\n```bash [pnpm]\npnpm dlx @riavzon\u002Fshield-base --all --parallel --contact \"Your Name https:\u002F\u002Fexample.com - you@example.com\" --acceptFireholRisk\n```\n\n```bash [yarn]\nyarn dlx @riavzon\u002Fshield-base --all --parallel --contact \"Your Name https:\u002F\u002Fexample.com - you@example.com\" --acceptFireholRisk\n```\n\n```bash [npm]\nnpx @riavzon\u002Fshield-base --all --parallel --contact \"Your Name https:\u002F\u002Fexample.com - you@example.com\" --acceptFireholRisk\n```\n\n```bash [bun]\nbunx @riavzon\u002Fshield-base --all --parallel --contact \"Your Name https:\u002F\u002Fexample.com - you@example.com\" --acceptFireholRisk\n```\n```ts [Programmatic]\nimport { generateData as executeAll } from '@riavzon\u002Fshield-base';\n\nconst outputDirectory = '.\u002Fdata\u002Fmmdb';\nconst contactInfo = 'Your Name https:\u002F\u002Fexample.com - you@example.com';\nconst mmdbPath = 'mmdbctl';\nconst selectedSources = true; \u002F\u002F true = all FireHOL levels included\n\nawait executeAll(outputDirectory, contactInfo, selectedSources, mmdbPath);\n```\n::\n\n`--parallel` runs all compilation jobs concurrently. `--acceptFireholRisk` acknowledges the FireHOL license required for the threat intelligence datasets.\n\n---\n\n## Output Files\n\nAfter a full compilation run, the following files are produced in the output directory:\n\n| File | Format | Contents |\n| --- | --- | --- |\n| `asn.mmdb` | MMDB | BGP\u002FASN routing data |\n| `city.mmdb` | MMDB | IP-to-city geolocation |\n| `country.mmdb` | MMDB | IP-to-country mapping |\n| `proxy.mmdb` | MMDB | Known proxy and anonymizer IPs |\n| `tor.mmdb` | MMDB | Tor relay and exit node IPs |\n| `goodBots.mmdb` | MMDB | Verified crawler IP ranges |\n| `firehol_l1.mmdb` | MMDB | FireHOL Level 1 threat IPs |\n| `firehol_l2.mmdb` | MMDB | FireHOL Level 2 threat IPs |\n| `firehol_l3.mmdb` | MMDB | FireHOL Level 3 threat IPs |\n| `firehol_l4.mmdb` | MMDB | FireHOL Level 4 threat IPs |\n| `firehol_anonymous.mmdb` | MMDB | Anonymity network relay IPs |\n| `useragent-db\u002Fuseragent.mdb` | LMDB | Suspicious user-agent patterns |\n| `email-db\u002Fdisposable-emails.mdb` | LMDB | Disposable email domains |\n\n::note\nLMDB databases also produce a `.mdb-lock` file alongside the main database. This file is generated automatically and is required for concurrent access.\n::\n\n---\n\n## Caching\n\nShield Base caches the `mmdbctl` binary path, your selected sources, BGP contact info, and output directory at:\n\n```\n~\u002F.shield-base\u002F.cache.json\n```\n\nOn subsequent runs this cache is used to skip the wizard and restore your previous configuration. Delete this file to force a clean start.\n\n---\n\n## Refreshing Databases\n\nData sources are updated regularly by their upstream providers. Use the refresh flags to re-download and recompile without going through the wizard again:\n\n::code-group\n```bash [pnpm]\n# Refresh all cached sources\npnpm dlx @riavzon\u002Fshield-base --refreshAll\n\n# Refresh only current run sources\npnpm dlx @riavzon\u002Fshield-base --refresh\n```\n\n```bash [yarn]\nyarn dlx @riavzon\u002Fshield-base --refreshAll\nyarn dlx @riavzon\u002Fshield-base --refresh\n```\n\n```bash [npm]\nnpx @riavzon\u002Fshield-base --refreshAll\nnpx @riavzon\u002Fshield-base --refresh\n```\n\n```bash [bun]\nbunx @riavzon\u002Fshield-base --refreshAll\nbunx @riavzon\u002Fshield-base --refresh\n```\n```ts [Programmatic]\nimport { restartData } from '@riavzon\u002Fshield-base';\n\nconst outputDirectory = '.\u002Fdata\u002Fmmdb';\n\n\u002F\u002F Refresh all previously compiled sources\nawait restartData(outputDirectory, true);\n```\n::\n\n::tip\nEach upstream provider updates its data on its own schedule, some as frequently as every five minutes. Schedule a nightly `--refreshAll` run to keep your databases current.\n::\n\n---\n\n## Next Steps\n\n- See the [CLI Reference](\u002Fdocs\u002Fshield-base\u002Fcli) for the full list of flags and subcommands.\n- See [Data Sources](\u002Fdocs\u002Fshield-base\u002Fdata-sources) for details on what each source produces and where the data comes from.\n- See [Programmatic Usage](\u002Fdocs\u002Fshield-base\u002Fusage) to call Shield Base from your own scripts and build pipelines.\n",{"title":14,"description":1828},"hrkcGQChZxs2VA-hf6YBip_jXTDpUK2uMVYF5uXvBD0",[1836,1837],{"title":40,"path":42,"stem":70,"children":-1},{"title":77,"path":78,"stem":79,"children":-1},{"id":816,"title":14,"body":1839,"description":1828,"extension":1829,"icon":15,"meta":2622,"module":1831,"navigation":8,"path":74,"rawbody":1832,"seo":2623,"stem":75,"__hash__":1834},{"type":818,"value":1840,"toc":2608},[1841,1848,1850,1852,1902,1913,1915,1917,1919,1965,1967,1995,1999,2001,2003,2005,2229,2235,2237,2239,2241,2385,2391,2393,2395,2399,2404,2406,2408,2410,2412,2582,2588,2590,2592,2606],[821,1842,823,1843,834],{},[825,1844,1846],{"href":827,"rel":1845},[829],[831,1847,833],{},[836,1849],{},[839,1851,842],{"id":841},[844,1853,1854,1866,1878,1890],{},[847,1855,1856],{"className":849,"code":850,"filename":851,"language":852,"meta":853,"style":853},[831,1857,1858],{"__ignoreMap":853},[857,1859,1860,1862,1864],{"class":859,"line":860},[857,1861,851],{"class":863},[857,1863,867],{"class":866},[857,1865,870],{"class":866},[847,1867,1868],{"className":849,"code":873,"filename":874,"language":852,"meta":853,"style":853},[831,1869,1870],{"__ignoreMap":853},[857,1871,1872,1874,1876],{"class":859,"line":860},[857,1873,874],{"class":863},[857,1875,867],{"class":866},[857,1877,870],{"class":866},[847,1879,1880],{"className":849,"code":887,"filename":888,"language":852,"meta":853,"style":853},[831,1881,1882],{"__ignoreMap":853},[857,1883,1884,1886,1888],{"class":859,"line":860},[857,1885,888],{"class":863},[857,1887,897],{"class":866},[857,1889,870],{"class":866},[847,1891,1892],{"className":849,"code":902,"filename":903,"language":852,"meta":853,"style":853},[831,1893,1894],{"__ignoreMap":853},[857,1895,1896,1898,1900],{"class":859,"line":860},[857,1897,903],{"class":863},[857,1899,867],{"class":866},[857,1901,870],{"class":866},[915,1903,1904],{},[821,1905,1906,924,1911,928],{},[825,1907,1909],{"href":827,"rel":1908},[829],[831,1910,833],{},[831,1912,927],{},[836,1914],{},[839,1916,934],{"id":933},[821,1918,937],{},[844,1920,1921,1933,1945,1955],{},[847,1922,1923],{"className":849,"code":942,"filename":851,"language":852,"meta":853,"style":853},[831,1924,1925],{"__ignoreMap":853},[857,1926,1927,1929,1931],{"class":859,"line":860},[857,1928,851],{"class":863},[857,1930,951],{"class":866},[857,1932,870],{"class":866},[847,1934,1935],{"className":849,"code":956,"filename":874,"language":852,"meta":853,"style":853},[831,1936,1937],{"__ignoreMap":853},[857,1938,1939,1941,1943],{"class":859,"line":860},[857,1940,874],{"class":863},[857,1942,951],{"class":866},[857,1944,870],{"class":866},[847,1946,1947],{"className":849,"code":969,"filename":888,"language":852,"meta":853,"style":853},[831,1948,1949],{"__ignoreMap":853},[857,1950,1951,1953],{"class":859,"line":860},[857,1952,976],{"class":863},[857,1954,870],{"class":866},[847,1956,1957],{"className":849,"code":981,"filename":903,"language":852,"meta":853,"style":853},[831,1958,1959],{"__ignoreMap":853},[857,1960,1961,1963],{"class":859,"line":860},[857,1962,988],{"class":863},[857,1964,870],{"class":866},[821,1966,993],{},[995,1968,1969,1971,1975,1977,1979,1981,1988,1990],{},[998,1970,1001],{"id":1000},[821,1972,1004,1973,1007],{},[831,1974,833],{},[998,1976,1011],{"id":1010},[821,1978,1014],{},[998,1980,1018],{"id":1017},[821,1982,1021,1983,1025,1985,1031],{},[831,1984,1024],{},[825,1986,1030],{"href":1028,"rel":1987},[829],[998,1989,1035],{"id":1034},[821,1991,1038,1992,1044],{},[825,1993,1043],{"href":1041,"rel":1994},[829],[821,1996,1047,1997,1051],{},[831,1998,1050],{},[836,2000],{},[839,2002,1057],{"id":1056},[821,2004,1060],{},[844,2006,2007,2033,2059,2083,2107],{},[847,2008,2009],{"className":849,"code":1065,"filename":851,"language":852,"meta":853,"style":853},[831,2010,2011],{"__ignoreMap":853},[857,2012,2013,2015,2017,2019,2021,2023,2025,2027,2029,2031],{"class":859,"line":860},[857,2014,851],{"class":863},[857,2016,951],{"class":866},[857,2018,1076],{"class":866},[857,2020,1080],{"class":1079},[857,2022,1083],{"class":1079},[857,2024,1086],{"class":1079},[857,2026,1090],{"class":1089},[857,2028,1093],{"class":866},[857,2030,1096],{"class":1089},[857,2032,1099],{"class":1079},[847,2034,2035],{"className":849,"code":1102,"filename":874,"language":852,"meta":853,"style":853},[831,2036,2037],{"__ignoreMap":853},[857,2038,2039,2041,2043,2045,2047,2049,2051,2053,2055,2057],{"class":859,"line":860},[857,2040,874],{"class":863},[857,2042,951],{"class":866},[857,2044,1076],{"class":866},[857,2046,1080],{"class":1079},[857,2048,1083],{"class":1079},[857,2050,1086],{"class":1079},[857,2052,1090],{"class":1089},[857,2054,1093],{"class":866},[857,2056,1096],{"class":1089},[857,2058,1099],{"class":1079},[847,2060,2061],{"className":849,"code":1129,"filename":888,"language":852,"meta":853,"style":853},[831,2062,2063],{"__ignoreMap":853},[857,2064,2065,2067,2069,2071,2073,2075,2077,2079,2081],{"class":859,"line":860},[857,2066,976],{"class":863},[857,2068,1076],{"class":866},[857,2070,1080],{"class":1079},[857,2072,1083],{"class":1079},[857,2074,1086],{"class":1079},[857,2076,1090],{"class":1089},[857,2078,1093],{"class":866},[857,2080,1096],{"class":1089},[857,2082,1099],{"class":1079},[847,2084,2085],{"className":849,"code":1154,"filename":903,"language":852,"meta":853,"style":853},[831,2086,2087],{"__ignoreMap":853},[857,2088,2089,2091,2093,2095,2097,2099,2101,2103,2105],{"class":859,"line":860},[857,2090,988],{"class":863},[857,2092,1076],{"class":866},[857,2094,1080],{"class":1079},[857,2096,1083],{"class":1079},[857,2098,1086],{"class":1079},[857,2100,1090],{"class":1089},[857,2102,1093],{"class":866},[857,2104,1096],{"class":1089},[857,2106,1099],{"class":1079},[847,2108,2109],{"className":1179,"code":1180,"filename":1181,"language":1182,"meta":853,"style":853},[831,2110,2111,2135,2139,2155,2171,2187,2201,2205],{"__ignoreMap":853},[857,2112,2113,2115,2117,2119,2121,2123,2125,2127,2129,2131,2133],{"class":859,"line":860},[857,2114,1190],{"class":1189},[857,2116,1194],{"class":1193},[857,2118,1198],{"class":1197},[857,2120,1201],{"class":1189},[857,2122,1205],{"class":1204},[857,2124,1208],{"class":1193},[857,2126,1211],{"class":1189},[857,2128,1214],{"class":1089},[857,2130,1217],{"class":866},[857,2132,1220],{"class":1089},[857,2134,1223],{"class":1193},[857,2136,2137],{"class":859,"line":1226},[857,2138,1229],{"emptyLinePlaceholder":8},[857,2140,2141,2143,2145,2147,2149,2151,2153],{"class":859,"line":1232},[857,2142,1236],{"class":1235},[857,2144,1240],{"class":1239},[857,2146,1244],{"class":1243},[857,2148,1214],{"class":1089},[857,2150,1249],{"class":866},[857,2152,1220],{"class":1089},[857,2154,1223],{"class":1193},[857,2156,2157,2159,2161,2163,2165,2167,2169],{"class":859,"line":1256},[857,2158,1236],{"class":1235},[857,2160,1261],{"class":1239},[857,2162,1244],{"class":1243},[857,2164,1214],{"class":1089},[857,2166,1093],{"class":866},[857,2168,1220],{"class":1089},[857,2170,1223],{"class":1193},[857,2172,2173,2175,2177,2179,2181,2183,2185],{"class":859,"line":1274},[857,2174,1236],{"class":1235},[857,2176,1279],{"class":1239},[857,2178,1244],{"class":1243},[857,2180,1214],{"class":1089},[857,2182,833],{"class":866},[857,2184,1220],{"class":1089},[857,2186,1223],{"class":1193},[857,2188,2189,2191,2193,2195,2197,2199],{"class":859,"line":1292},[857,2190,1236],{"class":1235},[857,2192,1297],{"class":1239},[857,2194,1244],{"class":1243},[857,2196,1302],{"class":1079},[857,2198,1305],{"class":1193},[857,2200,1309],{"class":1308},[857,2202,2203],{"class":859,"line":1312},[857,2204,1229],{"emptyLinePlaceholder":8},[857,2206,2207,2209,2211,2213,2215,2217,2219,2221,2223,2225,2227],{"class":859,"line":1317},[857,2208,1320],{"class":1189},[857,2210,1205],{"class":863},[857,2212,1325],{"class":1193},[857,2214,1328],{"class":1204},[857,2216,1331],{"class":1193},[857,2218,1334],{"class":1204},[857,2220,1331],{"class":1193},[857,2222,1339],{"class":1204},[857,2224,1331],{"class":1193},[857,2226,1344],{"class":1204},[857,2228,1347],{"class":1193},[821,2230,2231,1353,2233,1357],{},[831,2232,1352],{},[831,2234,1356],{},[836,2236],{},[839,2238,1363],{"id":1362},[821,2240,1366],{},[1368,2242,2243,2253],{},[1371,2244,2245],{},[1374,2246,2247,2249,2251],{},[1377,2248,1379],{},[1377,2250,1382],{},[1377,2252,1385],{},[1387,2254,2255,2265,2275,2285,2295,2305,2315,2325,2335,2345,2355,2365,2375],{},[1374,2256,2257,2261,2263],{},[1392,2258,2259],{},[831,2260,1396],{},[1392,2262,1399],{},[1392,2264,1402],{},[1374,2266,2267,2271,2273],{},[1392,2268,2269],{},[831,2270,1409],{},[1392,2272,1399],{},[1392,2274,1414],{},[1374,2276,2277,2281,2283],{},[1392,2278,2279],{},[831,2280,1421],{},[1392,2282,1399],{},[1392,2284,1426],{},[1374,2286,2287,2291,2293],{},[1392,2288,2289],{},[831,2290,1433],{},[1392,2292,1399],{},[1392,2294,1438],{},[1374,2296,2297,2301,2303],{},[1392,2298,2299],{},[831,2300,1445],{},[1392,2302,1399],{},[1392,2304,1450],{},[1374,2306,2307,2311,2313],{},[1392,2308,2309],{},[831,2310,1457],{},[1392,2312,1399],{},[1392,2314,1462],{},[1374,2316,2317,2321,2323],{},[1392,2318,2319],{},[831,2320,1469],{},[1392,2322,1399],{},[1392,2324,1474],{},[1374,2326,2327,2331,2333],{},[1392,2328,2329],{},[831,2330,1481],{},[1392,2332,1399],{},[1392,2334,1486],{},[1374,2336,2337,2341,2343],{},[1392,2338,2339],{},[831,2340,1493],{},[1392,2342,1399],{},[1392,2344,1498],{},[1374,2346,2347,2351,2353],{},[1392,2348,2349],{},[831,2350,1505],{},[1392,2352,1399],{},[1392,2354,1510],{},[1374,2356,2357,2361,2363],{},[1392,2358,2359],{},[831,2360,1517],{},[1392,2362,1399],{},[1392,2364,1522],{},[1374,2366,2367,2371,2373],{},[1392,2368,2369],{},[831,2370,1529],{},[1392,2372,1532],{},[1392,2374,1535],{},[1374,2376,2377,2381,2383],{},[1392,2378,2379],{},[831,2380,1542],{},[1392,2382,1532],{},[1392,2384,1547],{},[1549,2386,2387],{},[821,2388,1553,2389,1557],{},[831,2390,1556],{},[836,2392],{},[839,2394,1563],{"id":1562},[821,2396,1566,2397,1569],{},[831,2398,833],{},[847,2400,2402],{"className":2401,"code":1574,"language":1575},[1573],[831,2403,1574],{"__ignoreMap":853},[821,2405,1580],{},[836,2407],{},[839,2409,1586],{"id":1585},[821,2411,1589],{},[844,2413,2414,2450,2474,2494,2514],{},[847,2415,2416],{"className":849,"code":1594,"filename":851,"language":852,"meta":853,"style":853},[831,2417,2418,2422,2432,2436,2440],{"__ignoreMap":853},[857,2419,2420],{"class":859,"line":860},[857,2421,1601],{"class":1308},[857,2423,2424,2426,2428,2430],{"class":859,"line":1226},[857,2425,851],{"class":863},[857,2427,951],{"class":866},[857,2429,1076],{"class":866},[857,2431,1612],{"class":1079},[857,2433,2434],{"class":859,"line":1232},[857,2435,1229],{"emptyLinePlaceholder":8},[857,2437,2438],{"class":859,"line":1256},[857,2439,1621],{"class":1308},[857,2441,2442,2444,2446,2448],{"class":859,"line":1274},[857,2443,851],{"class":863},[857,2445,951],{"class":866},[857,2447,1076],{"class":866},[857,2449,1632],{"class":1079},[847,2451,2452],{"className":849,"code":1635,"filename":874,"language":852,"meta":853,"style":853},[831,2453,2454,2464],{"__ignoreMap":853},[857,2455,2456,2458,2460,2462],{"class":859,"line":860},[857,2457,874],{"class":863},[857,2459,951],{"class":866},[857,2461,1076],{"class":866},[857,2463,1612],{"class":1079},[857,2465,2466,2468,2470,2472],{"class":859,"line":1226},[857,2467,874],{"class":863},[857,2469,951],{"class":866},[857,2471,1076],{"class":866},[857,2473,1632],{"class":1079},[847,2475,2476],{"className":849,"code":1660,"filename":888,"language":852,"meta":853,"style":853},[831,2477,2478,2486],{"__ignoreMap":853},[857,2479,2480,2482,2484],{"class":859,"line":860},[857,2481,976],{"class":863},[857,2483,1076],{"class":866},[857,2485,1612],{"class":1079},[857,2487,2488,2490,2492],{"class":859,"line":1226},[857,2489,976],{"class":863},[857,2491,1076],{"class":866},[857,2493,1632],{"class":1079},[847,2495,2496],{"className":849,"code":1681,"filename":903,"language":852,"meta":853,"style":853},[831,2497,2498,2506],{"__ignoreMap":853},[857,2499,2500,2502,2504],{"class":859,"line":860},[857,2501,988],{"class":863},[857,2503,1076],{"class":866},[857,2505,1612],{"class":1079},[857,2507,2508,2510,2512],{"class":859,"line":1226},[857,2509,988],{"class":863},[857,2511,1076],{"class":866},[857,2513,1632],{"class":1079},[847,2515,2516],{"className":1179,"code":1702,"filename":1181,"language":1182,"meta":853,"style":853},[831,2517,2518,2538,2542,2558,2562,2566],{"__ignoreMap":853},[857,2519,2520,2522,2524,2526,2528,2530,2532,2534,2536],{"class":859,"line":860},[857,2521,1190],{"class":1189},[857,2523,1194],{"class":1193},[857,2525,1713],{"class":1204},[857,2527,1208],{"class":1193},[857,2529,1211],{"class":1189},[857,2531,1214],{"class":1089},[857,2533,1217],{"class":866},[857,2535,1220],{"class":1089},[857,2537,1223],{"class":1193},[857,2539,2540],{"class":859,"line":1226},[857,2541,1229],{"emptyLinePlaceholder":8},[857,2543,2544,2546,2548,2550,2552,2554,2556],{"class":859,"line":1232},[857,2545,1236],{"class":1235},[857,2547,1240],{"class":1239},[857,2549,1244],{"class":1243},[857,2551,1214],{"class":1089},[857,2553,1249],{"class":866},[857,2555,1220],{"class":1089},[857,2557,1223],{"class":1193},[857,2559,2560],{"class":859,"line":1256},[857,2561,1229],{"emptyLinePlaceholder":8},[857,2563,2564],{"class":859,"line":1274},[857,2565,1754],{"class":1308},[857,2567,2568,2570,2572,2574,2576,2578,2580],{"class":859,"line":1292},[857,2569,1320],{"class":1189},[857,2571,1761],{"class":863},[857,2573,1325],{"class":1193},[857,2575,1328],{"class":1204},[857,2577,1331],{"class":1193},[857,2579,1770],{"class":1079},[857,2581,1347],{"class":1193},[1774,2583,2584],{},[821,2585,1778,2586,1782],{},[831,2587,1781],{},[836,2589],{},[839,2591,1788],{"id":1787},[1790,2593,2594,2598,2602],{},[1793,2595,1795,2596,1798],{},[825,2597,77],{"href":78},[1793,2599,1801,2600,1804],{},[825,2601,81],{"href":82},[1793,2603,1801,2604,1809],{},[825,2605,123],{"href":124},[1811,2607,1813],{},{"title":853,"searchDepth":1226,"depth":1226,"links":2609},[2610,2611,2617,2618,2619,2620,2621],{"id":841,"depth":1226,"text":842},{"id":933,"depth":1226,"text":934,"children":2612},[2613,2614,2615,2616],{"id":1000,"depth":1232,"text":1001},{"id":1010,"depth":1232,"text":1011},{"id":1017,"depth":1232,"text":1018},{"id":1034,"depth":1232,"text":1035},{"id":1056,"depth":1226,"text":1057},{"id":1362,"depth":1226,"text":1363},{"id":1562,"depth":1226,"text":1563},{"id":1585,"depth":1226,"text":1586},{"id":1787,"depth":1226,"text":1788},{},{"title":14,"description":1828},1780436287588]