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