@riavzon/shield-base 1.3.1 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -3,12 +3,12 @@ import {n,m,b as b$1,c,e,f,d,l,g}from'./chunk-MZE5OD6T.js';import {parseArgs}fro
|
|
|
3
3
|
`)}function b(e){return typeof e=="function"?e():e}var A=class extends Error{code;constructor(e,i){super(e),this.name="CLIError",this.code=i;}};function ve(e=[],i={}){let o=new Set(i.boolean||[]),a=new Set(i.string||[]),n=i.alias||{},s=i.default||{},m=new Map,t=new Map;for(let[u,r]of Object.entries(n)){let d=r;for(let y of d)m.set(u,y),t.has(y)||t.set(y,[]),t.get(y).push(u),m.set(y,u),t.has(u)||t.set(u,[]),t.get(u).push(y);}let c={};function f(u){if(o.has(u))return "boolean";let r=t.get(u)||[];for(let d of r)if(o.has(d))return "boolean";return "string"}let p=new Set([...o,...a,...Object.keys(n),...Object.values(n).flat(),...Object.keys(s)]);for(let u of p)c[u]||(c[u]={type:f(u),default:s[u]});for(let[u,r]of m.entries())u.length===1&&c[r]&&!c[r].short&&(c[r].short=u);let w=[],v={};for(let u=0;u<e.length;u++){let r=e[u];if(r==="--"){w.push(...e.slice(u));break}if(r.startsWith("--no-")){let d=r.slice(5);v[d]=true;continue}w.push(r);}let l;try{l=parseArgs({args:w,options:Object.keys(c).length>0?c:void 0,allowPositionals:!0,strict:!1});}catch{l={values:{},positionals:w};}let g={_:[]};g._=l.positionals;for(let[u,r]of Object.entries(l.values))g[u]=r;for(let[u]of Object.entries(v)){g[u]=false;let r=m.get(u);r&&(g[r]=false);let d=t.get(u);if(d)for(let y of d)g[y]=false;}for(let[u,r]of m.entries())g[u]!==void 0&&g[r]===void 0&&(g[r]=g[u]),g[r]!==void 0&&g[u]===void 0&&(g[u]=g[r]);return g}var xe=(()=>{let e=globalThis.process?.env??{};return e.NO_COLOR==="1"||e.TERM==="dumb"||e.TEST||e.CI})(),T=(e,i=39)=>o=>xe?o:`\x1B[${e}m${o}\x1B[${i}m`,E=T(1,22),x=T(36),Se=T(90),N=T(4,24);function Ae(e,i){let o={boolean:[],string:[],alias:{},default:{}},a=te(i);for(let t of a){if(t.type==="positional")continue;t.type==="string"||t.type==="enum"?o.string.push(t.name):t.type==="boolean"&&o.boolean.push(t.name),t.default!==void 0&&(o.default[t.name]=t.default),t.alias&&(o.alias[t.name]=t.alias);let c=_(t.name),f=R(t.name);if(c!==t.name||f!==t.name){let p=ee(o.alias[t.name]||[]);c!==t.name&&!p.includes(c)&&p.push(c),f!==t.name&&!p.includes(f)&&p.push(f),p.length>0&&(o.alias[t.name]=p);}}let n=ve(e,o),[...s]=n._,m=new Proxy(n,{get(t,c){return t[c]??t[_(c)]??t[R(c)]}});for(let[,t]of a.entries())if(t.type==="positional"){let c=s.shift();if(c!==void 0)m[t.name]=c;else {if(t.default===void 0&&t.required!==false)throw new A(`Missing required positional argument: ${t.name.toUpperCase()}`,"EARG");m[t.name]=t.default;}}else if(t.type==="enum"){let c=m[t.name],f=t.options||[];if(c!==void 0&&f.length>0&&!f.includes(c))throw new A(`Invalid value for argument: ${x(`--${t.name}`)} (${x(c)}). Expected one of: ${f.map(p=>x(p)).join(", ")}.`,"EARG")}else if(t.required&&m[t.name]===void 0)throw new A(`Missing required argument: --${t.name}`,"EARG");return m}function te(e){let i=[];for(let[o,a]of Object.entries(e||{}))i.push({...a,name:o,alias:ee(a.alias)});return i}async function oe(e,i){let o=await b(e.args||{}),a=Ae(i.rawArgs,o),n={rawArgs:i.rawArgs,args:a,data:i.data,cmd:e};typeof e.setup=="function"&&await e.setup(n);let s;try{let m=await b(e.subCommands);if(m&&Object.keys(m).length>0){let t=i.rawArgs.findIndex(f=>!f.startsWith("-")),c=i.rawArgs[t];if(c){if(!m[c])throw new A(`Unknown command ${x(c)}`,"E_UNKNOWN_COMMAND");let f=await b(m[c]);f&&await oe(f,{rawArgs:i.rawArgs.slice(t+1)});}else if(!e.run)throw new A("No command specified.","E_NO_COMMAND")}typeof e.run=="function"&&(s=await e.run(n));}finally{typeof e.cleanup=="function"&&await e.cleanup(n);}return {result:s}}async function M(e,i,o){let a=await b(e.subCommands);if(a&&Object.keys(a).length>0){let n=i.findIndex(t=>!t.startsWith("-")),s=i[n],m=await b(a[s]);if(m)return M(m,i.slice(n+1),e)}return [e,o]}async function Ce(e,i){try{console.log(await Pe(e,i)+`
|
|
4
4
|
`);}catch(o){console.error(o);}}var $e=/^no[-A-Z]/;async function Pe(e,i){let o=await b(e.meta||{}),a=te(await b(e.args||{})),n=await b(i?.meta||{}),s=`${n.name?`${n.name} `:""}`+(o.name||process.argv[1]),m=[],t=[],c=[],f=[];for(let l of a)if(l.type==="positional"){let g=l.name.toUpperCase(),u=l.required!==false&&l.default===void 0,r=l.default?`="${l.default}"`:"";t.push([x(g+r),l.description||"",l.valueHint?`<${l.valueHint}>`:""]),f.push(u?`<${g}>`:`[${g}]`);}else {let g=l.required===true&&l.default===void 0,u=[...(l.alias||[]).map(r=>`-${r}`),`--${l.name}`].join(", ")+(l.type==="string"&&(l.valueHint||l.default)?`=${l.valueHint?`<${l.valueHint}>`:`"${l.default||""}"`}`:"")+(l.type==="enum"&&l.options?`=<${l.options.join("|")}>`:"");if(m.push([x(u+(g?" (required)":"")),l.description||""]),l.type==="boolean"&&(l.default===true||l.negativeDescription)&&!$e.test(l.name)){let r=[...(l.alias||[]).map(d=>`--no-${d}`),`--no-${l.name}`].join(", ");m.push([x(r+(g?" (required)":"")),l.negativeDescription||""]);}g&&f.push(u);}if(e.subCommands){let l=[],g=await b(e.subCommands);for(let[u,r]of Object.entries(g)){let d=await b((await b(r))?.meta);d?.hidden||(c.push([x(u),d?.description||""]),l.push(u));}f.push(l.join("|"));}let p=[],w=o.version||n.version;p.push(Se(`${o.description} (${s+(w?` v${w}`:"")})`),"");let v=m.length>0||t.length>0;return p.push(`${N(E("USAGE"))} ${x(`${s}${v?" [OPTIONS]":""} ${f.join(" ")}`)}`,""),t.length>0&&(p.push(N(E("ARGUMENTS")),""),p.push(F(t," ")),p.push("")),m.length>0&&(p.push(N(E("OPTIONS")),""),p.push(F(m," ")),p.push("")),c.length>0&&(p.push(N(E("COMMANDS")),""),p.push(F(c," ")),p.push("",`Use ${x(`${s} <command> --help`)} for more information about a command.`)),p.filter(l=>typeof l=="string").join(`
|
|
5
5
|
`)}async function ne(e,i={}){let o=i.rawArgs||process.argv.slice(2),a=i.showUsage||Ce;try{if(o.includes("--help")||o.includes("-h"))await a(...await M(e,o)),process.exit(0);else if(o.length===1&&o[0]==="--version"){let n=typeof e.meta=="function"?await e.meta():await e.meta;if(!n?.version)throw new A("No version specified","E_NO_VERSION");console.log(n.version);}else await oe(e,{rawArgs:o});}catch(n){n instanceof A?(await a(...await M(e,o)),console.error(n.message)):console.error(n,`
|
|
6
|
-
`),process.exit(1);}}var ie={acceptFireholRisk:{type:"boolean",description:"Acknowledge of FireHOL",required:false},all:{type:"boolean",description:"Skip interactive selection and fetch all available sources.",required:false},refresh:{type:"boolean",description:"Force re download and re compilation of data sources.",required:false},refreshAll:{type:"boolean",description:"Force re download and re compilation of all data sources using cached config.",required:false},parallel:{type:"boolean",description:"Run compilation tasks concurrently.",required:false},contact:{type:"string",description:"Provide User-Agent contact info to bypass the interactive BGP prompt",required:false},path:{type:"string",description:"Path for for the databases to be compiled into.",required:false},bgp:{type:"boolean",description:"Compile BGP data",required:false},city:{type:"boolean",description:"Compile City data",required:false},geo:{type:"boolean",description:"Compile Geography data",required:false},proxy:{type:"boolean",description:"Compile Proxy data",required:false},seo:{type:"boolean",description:"Compile common seo crawlers and bots data",required:false},tor:{type:"boolean",description:"Compile Tor data",required:false},l1:{type:"boolean",description:"Compile FireHOL Level 1",required:false},l2:{type:"boolean",description:"Compile FireHOL Level 2",required:false},l3:{type:"boolean",description:"Compile FireHOL Level 3",required:false},l4:{type:"boolean",description:"Compile FireHOL Level 4",required:false},anonymous:{type:"boolean",description:"Compile FireHOL Anonymous network list",required:false}},U=[{label:"BGP",value:"BGP",hint:"\u{1F310} Autonomous System numbers and prefix data"},{label:"City",value:"City",hint:"\u{1F3D9}\uFE0F IP to City geolocation data"},{label:"Geography",value:"Geography",hint:"\u{1F30D} Country and continent information"},{label:"Proxy",value:"Proxy",hint:"\u{1F575}\uFE0F Anonymous Proxy and VPN detection lists"},{label:"Tor",value:"Tor",hint:"\u{1F9C5} The Onion Router exit node IP lists, and more"},{label:"SEO",value:"SEO",hint:"\u{1F50D} Verified search engine crawlers and legitimate automated agents"},{label:"FireHOL Level 1",value:"firehol_l1",hint:"\u{1F6E1}\uFE0F Maximum protection, minimum false positives"},{label:"FireHOL Level 2",value:"firehol_l2",hint:"\u{1F6E1}\uFE0F Tracking attacks last 48h, includes dynamic IPs"},{label:"FireHOL Level 3",value:"firehol_l3",hint:"\u{1F6E1}\uFE0F Attacks, spyware, and viruses tracked last 30 days"},{label:"FireHOL Level 4",value:"firehol_l4",hint:"\u{1F6E1}\uFE0F Aggressive tracking, higher false positive risk"},{label:"Anonymous",value:"firehol_anonymous",hint:"\u{1F464} Tor exit nodes, I2P, VPNS, and other anonymity network relays"}];function q(e){if(!e||e.trim()==="")return "User agent is required";let i=charNotIn(" "),o=charNotIn(" @"),a=oneOrMore(o).and("@").and(oneOrMore(o)).and(".").and(oneOrMore(o)),n=oneOrMore(i).and(oneOrMore(exactly(" ").and(oneOrMore(i))).optionally());return createRegExp(n.and(exactly(" - ")).and(a).at.lineStart().at.lineEnd()).test(e)?true:"Invalid format. Expected: '<name> [url] - <email>' (e.g., 'acmeco bgp.tools - contact@acme.co')"}async function re(){let i=`To avoid getting blocked, bgp.tools requires contact information to reach you in case something went wrong.
|
|
6
|
+
`),process.exit(1);}}var ie={acceptFireholRisk:{type:"boolean",description:"Acknowledge of FireHOL",required:false},all:{type:"boolean",description:"Skip interactive selection and fetch all available sources.",required:false},refresh:{type:"boolean",description:"Force re download and re compilation of data sources.",required:false},refreshAll:{type:"boolean",description:"Force re download and re compilation of all data sources using cached config.",required:false},parallel:{type:"boolean",description:"Run compilation tasks concurrently.",required:false},contact:{type:"string",description:"Provide User-Agent contact info to bypass the interactive BGP prompt",required:false},path:{type:"string",description:"Path for for the databases to be compiled into. Will start the interactive wizard if no data sources chosen",required:false},bgp:{type:"boolean",description:"Compile BGP data",required:false},city:{type:"boolean",description:"Compile City data",required:false},geo:{type:"boolean",description:"Compile Geography data",required:false},proxy:{type:"boolean",description:"Compile Proxy data",required:false},seo:{type:"boolean",description:"Compile common seo crawlers and bots data",required:false},tor:{type:"boolean",description:"Compile Tor data",required:false},l1:{type:"boolean",description:"Compile FireHOL Level 1",required:false},l2:{type:"boolean",description:"Compile FireHOL Level 2",required:false},l3:{type:"boolean",description:"Compile FireHOL Level 3",required:false},l4:{type:"boolean",description:"Compile FireHOL Level 4",required:false},anonymous:{type:"boolean",description:"Compile FireHOL Anonymous network list",required:false}},U=[{label:"BGP",value:"BGP",hint:"\u{1F310} Autonomous System numbers and prefix data"},{label:"City",value:"City",hint:"\u{1F3D9}\uFE0F IP to City geolocation data"},{label:"Geography",value:"Geography",hint:"\u{1F30D} Country and continent information"},{label:"Proxy",value:"Proxy",hint:"\u{1F575}\uFE0F Anonymous Proxy and VPN detection lists"},{label:"Tor",value:"Tor",hint:"\u{1F9C5} The Onion Router exit node IP lists, and more"},{label:"SEO",value:"SEO",hint:"\u{1F50D} Verified search engine crawlers and legitimate automated agents"},{label:"FireHOL Level 1",value:"firehol_l1",hint:"\u{1F6E1}\uFE0F Maximum protection, minimum false positives"},{label:"FireHOL Level 2",value:"firehol_l2",hint:"\u{1F6E1}\uFE0F Tracking attacks last 48h, includes dynamic IPs"},{label:"FireHOL Level 3",value:"firehol_l3",hint:"\u{1F6E1}\uFE0F Attacks, spyware, and viruses tracked last 30 days"},{label:"FireHOL Level 4",value:"firehol_l4",hint:"\u{1F6E1}\uFE0F Aggressive tracking, higher false positive risk"},{label:"Anonymous",value:"firehol_anonymous",hint:"\u{1F464} Tor exit nodes, I2P, VPNS, and other anonymity network relays"}];function q(e){if(!e||e.trim()==="")return "User agent is required";let i=charNotIn(" "),o=charNotIn(" @"),a=oneOrMore(o).and("@").and(oneOrMore(o)).and(".").and(oneOrMore(o)),n=oneOrMore(i).and(oneOrMore(exactly(" ").and(oneOrMore(i))).optionally());return createRegExp(n.and(exactly(" - ")).and(a).at.lineStart().at.lineEnd()).test(e)?true:"Invalid format. Expected: '<name> [url] - <email>' (e.g., 'acmeco bgp.tools - contact@acme.co')"}async function re(){let i=`To avoid getting blocked, bgp.tools requires contact information to reach you in case something went wrong.
|
|
7
7
|
This data will be included in the user agent header each time you get data from them.
|
|
8
8
|
More information is available at: https://bgp.tools/kb/api.
|
|
9
9
|
|
|
10
10
|
Required format: '<your-name or company> <optional site url> - <Your email address>'
|
|
11
11
|
`,o="",a=false;for(;!a;){let n=await B.prompt(i,{type:"text",placeholder:"acmeco bgp.tools - contact@acme.co",cancel:"null"});n===null&&(B.fail("Operation cancelled. Exiting Shield-Base..."),process.exit(1)),o=n;let s=q(o);s===true?a=true:B.error(s);}return o}var G="1.4.8",P=I.join(H.homedir(),".shield-base","bin");function Ne(){let e=H.platform(),i=H.arch(),o="",a="",n=".tar.gz",s=false;if(e==="darwin")o="darwin";else if(e==="linux")o="linux";else if(e==="win32")o="windows",n=".zip",s=true;else throw new Error(`Unsupported OS: ${e}`);if(i==="x64")a="amd64";else if(i==="arm64")a="arm64";else if(i==="ia32")a="386";else if(i==="arm")a="arm";else throw new Error(`Unsupported Architecture: ${i}`);return {plat:`${o}_${a}`,ext:n,isWindows:s}}async function ce(){let{plat:e,ext:i,isWindows:o}=Ne(),a=o?"mmdbctl.exe":"mmdbctl",n=I.join(P,a);try{return execSync("mmdbctl --help",{stdio:"ignore"}),"mmdbctl"}catch{}if(C.existsSync(n))return n;consola.warn('The required engine "mmdbctl" is missing from your system.'),await consola.prompt("Would you like Shield-Base to automatically download and configure it locally?",{type:"confirm",initial:true})||(consola.error("Cannot proceed without mmdbctl. Exiting..."),process.exit(1)),C.mkdirSync(P,{recursive:true});let m=`mmdbctl_${G}_${e}`,t=`https://github.com/ipinfo/mmdbctl/releases/download/mmdbctl-${G}/${m}${i}`,c=I.join(P,`${m}${i}`);consola.start(`Downloading mmdbctl v${G} for ${e}...`);try{let f=await fetch(t);if(!f.ok||!f.body)throw new Error(`Failed to fetch: ${f.statusText}`);let p=C.createWriteStream(c);await pipeline(f.body,p),consola.success("Download complete. Extracting..."),o?await Ee(c,{dir:P}):await le.x({file:c,cwd:P});let v=C.readdirSync(P).find(l=>l.includes("mmdbctl")&&l!==`${m}${i}`);return v&&v!==a&&C.renameSync(I.join(P,v),n),C.unlinkSync(c),o||C.chmodSync(n,493),consola.success("mmdbctl engine successfully installed locally!"),n}catch(f){consola.error("Failed to install mmdbctl automatically:",f),process.exit(1);}}function ue(e,i,o){let a="https://github.com/firehol/blocklist-ipsets",n=e.some(m=>m.startsWith("firehol_")||m==="Proxy"),s=o||i.license;return o&&!i.license||n&&!s&&B.warn(`Some data included in "Threats" and "Proxy" may include specific fields that have different types of licensing.
|
|
12
|
-
Please check for more info: ${a}`),true}var _e={meta:{name:"shield-base",version:"1.
|
|
12
|
+
Please check for more info: ${a}`),true}var _e={meta:{name:"shield-base",version:"1.3.1",description:"Offline IP threat intelligence & GeoIP MMDB compiler"},args:{...ie},async run({args:e$1}){consola.box("Welcome to Shield-Base!");let i=e$1.acceptFireholRisk,o=I.join(H.homedir(),".shield-base",".cache.json"),a={};if(C.existsSync(o)){let r=await readFile(o,"utf-8");a=JSON.parse(r);}let n$1="";a.mmdbctlPath&&C.existsSync(a.mmdbctlPath)?n$1=a.mmdbctlPath:(consola.start("Verifying system dependencies..."),n$1=await ce(),a.mmdbctlPath=n$1);let s=[],m$1=U.map(r=>r.value),t=[];if(e$1.refreshAll||e$1.refresh){consola.info("Initializing data restart...");let r=!!e$1.refreshAll,d=I.resolve(process.cwd(),e$1.path??".");await n(d,r);return}if(e$1.bgp&&t.push("BGP"),e$1.city&&t.push("City"),e$1.geo&&t.push("Geography"),e$1.proxy&&t.push("Proxy"),e$1.seo&&t.push("SEO"),e$1.tor&&t.push("Tor"),e$1.l1&&t.push("firehol_l1"),e$1.l2&&t.push("firehol_l2"),e$1.l3&&t.push("firehol_l3"),e$1.l4&&t.push("firehol_l4"),e$1.anonymous&&t.push("firehol_anonymous"),e$1.all)consola.info("Argument --all passed. Selecting all available sources..."),s=[...m$1];else if(t.length>0)consola.info(`Specific sources selected via flags: ${t.join(", ")}`),s=t;else {let r=await consola.prompt("Choose your data",{type:"select",options:[{label:"All (Recommended)",value:"all"},{label:"Select Multiple",value:"custom"}],cancel:"null"});r===null&&(consola.fail("Operation cancelled. Exiting Shield-Base..."),process.exit(1)),r==="all"?s=[...m$1]:s=await consola.prompt("Select data sources to compile",{type:"multiselect",options:U.map(d=>({label:d.label,value:d.value,hint:d.hint,cancel:"null"}))});}(!s||s.length===0)&&(consola.error("No data sources selected for compilation. Exiting..."),process.exit(1));let c$1=ue(s,a,i??false);a.license=c$1,a.selectedDataTypes=s;let f$1=e$1.contact;if(s.includes("BGP"))if(f$1){let r=q(f$1);r!==true&&(consola.error(`Invalid --contact flag provided: ${String(r)}`),process.exit(1)),a.useragent=f$1,consola.success("Valid contact info provided via --contact flag. Skipping prompt.");}else if(a.useragent)f$1=a.useragent,consola.info("Loaded BGP contact info from cache.");else {let r=await consola.prompt("BGP.tools requires contact information (User-Agent) to prevent API blocking. How would you like to proceed?",{type:"select",options:[{label:"Provide details",value:"provide"},{label:"Exclude BGP Data",value:"exclude"}],cancel:"null"});r||(consola.fail("Operation cancelled. Exiting Shield-Base..."),process.exit(1)),r==="provide"?(f$1=await re(),a.useragent=f$1):(consola.info("Excluding BGP from the compilation queue..."),s=s.filter(d=>d!=="BGP"),s.length===0&&(consola.error("No data sources remaining for compilation. Exiting..."),process.exit(1)));}consola.start(`Compiling data sources: ${s.join(", ")}...`);let p=I.resolve(process.cwd(),e$1.path??".");C.existsSync(p)||C.mkdirSync(p),a.outPutPath=p,consola.info(`Output directory mapped to: ${p}`);let w=s.length===m$1.length,v=performance.now();if(w)consola.start("\u{1F680} Compiling all data sources..."),await m(p,f$1??"",c$1,n$1);else {consola.info("Running partial pipeline for selected sources...");let r=s.filter(S=>S.startsWith("firehol_")),d$1=s.filter(S=>!S.startsWith("firehol_")),y=[];if(d$1.includes("BGP")&&y.push({name:"BGP & ASN",task:()=>b$1(f$1??"",p,n$1)}),d$1.includes("City")&&y.push({name:"City (Geofeed)",task:()=>c(p,n$1)}),d$1.includes("Geography")&&y.push({name:"Country (Sapics)",task:()=>e(p,n$1)}),d$1.includes("Proxy")&&y.push({name:"Proxies",task:()=>f(p,n$1)}),d$1.includes("Tor")&&y.push({name:"Tor Nodes",task:()=>d(p,n$1)}),d$1.includes("SEO")&&y.push({name:"SEO Bots",task:()=>l(p,n$1)}),r.length>0&&y.push({name:`Threats (${String(r.length)} lists)`,task:()=>g(p,n$1,r)}),e$1.parallel)consola.start(`Running ${String(y.length)} compilation jobs...`),(await Promise.allSettled(y.map(L=>L.task()))).forEach((L,pe)=>{L.status==="rejected"&&consola.error(`[${y[pe].name}] Failed:`,L.reason);});else {consola.start(`Running ${String(y.length)} compilation jobs sequentially...`);for(let S of y)consola.start(`Initializing ${S.name} compiler...`),await S.task(),consola.success(`${S.name} compilation complete.`);}}let l$1=I.dirname(o);C.existsSync(l$1)||C.mkdirSync(l$1,{recursive:true}),await writeFile(o,JSON.stringify(a,null,2),"utf-8");let u=((performance.now()-v)/1e3).toFixed(2);consola.success(`\u2728 All data successfully compiled in ${u}s!
|
|
13
13
|
You can view it at ${p}`);}};await ne(_e);//# sourceMappingURL=cli.js.map
|
|
14
14
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/citty/dist/_chunks/libs/scule.mjs","../node_modules/citty/dist/index.mjs","../src/utils/commands.ts","../src/utils/validateUserAgent.ts","../src/utils/userAgentInput.ts","../src/utils/mmdbctlInstaller.ts","../src/utils/fireHolWarning.ts","../src/index.ts"],"names":["NUMBER_CHAR_RE","STR_SPLITTERS","isUppercase","char","splitByCase","str","separators","splitters","parts","buff","previousUpper","previousSplitter","isSplitter","isUpper","lastChar","upperFirst","lowerFirst","pascalCase","opts","p","camelCase","kebabCase","joiner","toArray","val","formatLineColumns","lines","linePrefix","maxLength","line","i","element","l","c","resolveValue","input","CLIError","message","code","parseRawArgs","args","booleans","strings","aliasMap","defaults","aliasToMain","mainToAliases","key","value","targets","target","options","getType","name","aliases","alias","allOptions","main","processedArgs","negatedFlags","arg","flagName","parsed","parseArgs$1","out","mainName","noColor","env","_c","r","t","bold","cyan","gray","underline","parseArgs","rawArgs","argsDef","parseOptions","resolveArgs","camelName","kebabName","existingAliases","positionalArguments","parsedArgsProxy","prop","nextPositionalArgument","argument","o","argDef","runCommand","cmd","cmdArgs","parsedArgs","context","result","subCommands","subCommandArgIndex","subCommandName","subCommand","resolveSubCommand","parent","showUsage","renderUsage","error","negativePrefixRe","cmdMeta","parentMeta","commandName","argLines","posLines","commandsLines","usageLine","isRequired","defaultHint","argStr","a","negativeArgStr","commandNames","sub","meta","usageLines","version","hasOptions","runMain","showUsage$1","commands","sources","isValidUserAgent","ua","nonSpace","charNotIn","nonAtOrSpace","emailPart","oneOrMore","nameOrUrlPart","exactly","createRegExp","askForUserAgent","contactInfo","isValid","consola","validationResult","VERSION","LOCAL_BIN_DIR","path","os","getTargetPlatform","platform","arch","osName","archName","ext","isWindows","ensureMmdbctl","plat","binaryName","localBinaryPath","execSync","fs","fileName","url","archivePath","response","fileStream","pipeline","extractZip","extractedBinary","f","checkLicenseAgree","selectedSources","cache","fireholUrl","intendsToUseFirehol","s","hasLicense","start","includeFirehol","cacheOutput","cacheedFile","readFile","mmdbPath","allSourceValues","flaggedSources","isAll","outputPath","restartData","mode","licenseResult","validation","bgpAction","source","output","isRunningAll","startTime","performance","generateData","fireholSources","standardSources","executionQueue","getBGPAndASN","buildCitiesData","getGeoDatas","getListOfProxies","getTorLists","getCrawlersIps","getThreatLists","q","res","index","cacheDir","writeFile","duration"],"mappings":"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","file":"cli.js","sourcesContent":["const NUMBER_CHAR_RE = /\\d/;\nconst STR_SPLITTERS = [\n\t\"-\",\n\t\"_\",\n\t\"/\",\n\t\".\"\n];\nfunction isUppercase(char = \"\") {\n\tif (NUMBER_CHAR_RE.test(char)) return;\n\treturn char !== char.toLowerCase();\n}\nfunction splitByCase(str, separators) {\n\tconst splitters = separators ?? STR_SPLITTERS;\n\tconst parts = [];\n\tif (!str || typeof str !== \"string\") return parts;\n\tlet buff = \"\";\n\tlet previousUpper;\n\tlet previousSplitter;\n\tfor (const char of str) {\n\t\tconst isSplitter = splitters.includes(char);\n\t\tif (isSplitter === true) {\n\t\t\tparts.push(buff);\n\t\t\tbuff = \"\";\n\t\t\tpreviousUpper = void 0;\n\t\t\tcontinue;\n\t\t}\n\t\tconst isUpper = isUppercase(char);\n\t\tif (previousSplitter === false) {\n\t\t\tif (previousUpper === false && isUpper === true) {\n\t\t\t\tparts.push(buff);\n\t\t\t\tbuff = char;\n\t\t\t\tpreviousUpper = isUpper;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (previousUpper === true && isUpper === false && buff.length > 1) {\n\t\t\t\tconst lastChar = buff.at(-1);\n\t\t\t\tparts.push(buff.slice(0, Math.max(0, buff.length - 1)));\n\t\t\t\tbuff = lastChar + char;\n\t\t\t\tpreviousUpper = isUpper;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tbuff += char;\n\t\tpreviousUpper = isUpper;\n\t\tpreviousSplitter = isSplitter;\n\t}\n\tparts.push(buff);\n\treturn parts;\n}\nfunction upperFirst(str) {\n\treturn str ? str[0].toUpperCase() + str.slice(1) : \"\";\n}\nfunction lowerFirst(str) {\n\treturn str ? str[0].toLowerCase() + str.slice(1) : \"\";\n}\nfunction pascalCase(str, opts) {\n\treturn str ? (Array.isArray(str) ? str : splitByCase(str)).map((p) => upperFirst(opts?.normalize ? p.toLowerCase() : p)).join(\"\") : \"\";\n}\nfunction camelCase(str, opts) {\n\treturn lowerFirst(pascalCase(str || \"\", opts));\n}\nfunction kebabCase(str, joiner) {\n\treturn str ? (Array.isArray(str) ? str : splitByCase(str)).map((p) => p.toLowerCase()).join(joiner ?? \"-\") : \"\";\n}\nexport { kebabCase as n, camelCase as t };\n","import { n as kebabCase, t as camelCase } from \"./_chunks/libs/scule.mjs\";\nimport { parseArgs as parseArgs$1 } from \"node:util\";\nfunction toArray(val) {\n\tif (Array.isArray(val)) return val;\n\treturn val === void 0 ? [] : [val];\n}\nfunction formatLineColumns(lines, linePrefix = \"\") {\n\tconst maxLength = [];\n\tfor (const line of lines) for (const [i, element] of line.entries()) maxLength[i] = Math.max(maxLength[i] || 0, element.length);\n\treturn lines.map((l) => l.map((c, i) => linePrefix + c[i === 0 ? \"padStart\" : \"padEnd\"](maxLength[i])).join(\" \")).join(\"\\n\");\n}\nfunction resolveValue(input) {\n\treturn typeof input === \"function\" ? input() : input;\n}\nvar CLIError = class extends Error {\n\tcode;\n\tconstructor(message, code) {\n\t\tsuper(message);\n\t\tthis.name = \"CLIError\";\n\t\tthis.code = code;\n\t}\n};\nfunction parseRawArgs(args = [], opts = {}) {\n\tconst booleans = new Set(opts.boolean || []);\n\tconst strings = new Set(opts.string || []);\n\tconst aliasMap = opts.alias || {};\n\tconst defaults = opts.default || {};\n\tconst aliasToMain = /* @__PURE__ */ new Map();\n\tconst mainToAliases = /* @__PURE__ */ new Map();\n\tfor (const [key, value] of Object.entries(aliasMap)) {\n\t\tconst targets = value;\n\t\tfor (const target of targets) {\n\t\t\taliasToMain.set(key, target);\n\t\t\tif (!mainToAliases.has(target)) mainToAliases.set(target, []);\n\t\t\tmainToAliases.get(target).push(key);\n\t\t\taliasToMain.set(target, key);\n\t\t\tif (!mainToAliases.has(key)) mainToAliases.set(key, []);\n\t\t\tmainToAliases.get(key).push(target);\n\t\t}\n\t}\n\tconst options = {};\n\tfunction getType(name) {\n\t\tif (booleans.has(name)) return \"boolean\";\n\t\tconst aliases = mainToAliases.get(name) || [];\n\t\tfor (const alias of aliases) if (booleans.has(alias)) return \"boolean\";\n\t\treturn \"string\";\n\t}\n\tconst allOptions = new Set([\n\t\t...booleans,\n\t\t...strings,\n\t\t...Object.keys(aliasMap),\n\t\t...Object.values(aliasMap).flat(),\n\t\t...Object.keys(defaults)\n\t]);\n\tfor (const name of allOptions) if (!options[name]) options[name] = {\n\t\ttype: getType(name),\n\t\tdefault: defaults[name]\n\t};\n\tfor (const [alias, main] of aliasToMain.entries()) if (alias.length === 1 && options[main] && !options[main].short) options[main].short = alias;\n\tconst processedArgs = [];\n\tconst negatedFlags = {};\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\t\tif (arg === \"--\") {\n\t\t\tprocessedArgs.push(...args.slice(i));\n\t\t\tbreak;\n\t\t}\n\t\tif (arg.startsWith(\"--no-\")) {\n\t\t\tconst flagName = arg.slice(5);\n\t\t\tnegatedFlags[flagName] = true;\n\t\t\tcontinue;\n\t\t}\n\t\tprocessedArgs.push(arg);\n\t}\n\tlet parsed;\n\ttry {\n\t\tparsed = parseArgs$1({\n\t\t\targs: processedArgs,\n\t\t\toptions: Object.keys(options).length > 0 ? options : void 0,\n\t\t\tallowPositionals: true,\n\t\t\tstrict: false\n\t\t});\n\t} catch {\n\t\tparsed = {\n\t\t\tvalues: {},\n\t\t\tpositionals: processedArgs\n\t\t};\n\t}\n\tconst out = { _: [] };\n\tout._ = parsed.positionals;\n\tfor (const [key, value] of Object.entries(parsed.values)) out[key] = value;\n\tfor (const [name] of Object.entries(negatedFlags)) {\n\t\tout[name] = false;\n\t\tconst mainName = aliasToMain.get(name);\n\t\tif (mainName) out[mainName] = false;\n\t\tconst aliases = mainToAliases.get(name);\n\t\tif (aliases) for (const alias of aliases) out[alias] = false;\n\t}\n\tfor (const [alias, main] of aliasToMain.entries()) {\n\t\tif (out[alias] !== void 0 && out[main] === void 0) out[main] = out[alias];\n\t\tif (out[main] !== void 0 && out[alias] === void 0) out[alias] = out[main];\n\t}\n\treturn out;\n}\nconst noColor = /* @__PURE__ */ (() => {\n\tconst env = globalThis.process?.env ?? {};\n\treturn env.NO_COLOR === \"1\" || env.TERM === \"dumb\" || env.TEST || env.CI;\n})();\nconst _c = (c, r = 39) => (t) => noColor ? t : `\\u001B[${c}m${t}\\u001B[${r}m`;\nconst bold = /* @__PURE__ */ _c(1, 22);\nconst cyan = /* @__PURE__ */ _c(36);\nconst gray = /* @__PURE__ */ _c(90);\nconst underline = /* @__PURE__ */ _c(4, 24);\nfunction parseArgs(rawArgs, argsDef) {\n\tconst parseOptions = {\n\t\tboolean: [],\n\t\tstring: [],\n\t\talias: {},\n\t\tdefault: {}\n\t};\n\tconst args = resolveArgs(argsDef);\n\tfor (const arg of args) {\n\t\tif (arg.type === \"positional\") continue;\n\t\tif (arg.type === \"string\" || arg.type === \"enum\") parseOptions.string.push(arg.name);\n\t\telse if (arg.type === \"boolean\") parseOptions.boolean.push(arg.name);\n\t\tif (arg.default !== void 0) parseOptions.default[arg.name] = arg.default;\n\t\tif (arg.alias) parseOptions.alias[arg.name] = arg.alias;\n\t\tconst camelName = camelCase(arg.name);\n\t\tconst kebabName = kebabCase(arg.name);\n\t\tif (camelName !== arg.name || kebabName !== arg.name) {\n\t\t\tconst existingAliases = toArray(parseOptions.alias[arg.name] || []);\n\t\t\tif (camelName !== arg.name && !existingAliases.includes(camelName)) existingAliases.push(camelName);\n\t\t\tif (kebabName !== arg.name && !existingAliases.includes(kebabName)) existingAliases.push(kebabName);\n\t\t\tif (existingAliases.length > 0) parseOptions.alias[arg.name] = existingAliases;\n\t\t}\n\t}\n\tconst parsed = parseRawArgs(rawArgs, parseOptions);\n\tconst [ ...positionalArguments] = parsed._;\n\tconst parsedArgsProxy = new Proxy(parsed, { get(target, prop) {\n\t\treturn target[prop] ?? target[camelCase(prop)] ?? target[kebabCase(prop)];\n\t} });\n\tfor (const [, arg] of args.entries()) if (arg.type === \"positional\") {\n\t\tconst nextPositionalArgument = positionalArguments.shift();\n\t\tif (nextPositionalArgument !== void 0) parsedArgsProxy[arg.name] = nextPositionalArgument;\n\t\telse if (arg.default === void 0 && arg.required !== false) throw new CLIError(`Missing required positional argument: ${arg.name.toUpperCase()}`, \"EARG\");\n\t\telse parsedArgsProxy[arg.name] = arg.default;\n\t} else if (arg.type === \"enum\") {\n\t\tconst argument = parsedArgsProxy[arg.name];\n\t\tconst options = arg.options || [];\n\t\tif (argument !== void 0 && options.length > 0 && !options.includes(argument)) throw new CLIError(`Invalid value for argument: ${cyan(`--${arg.name}`)} (${cyan(argument)}). Expected one of: ${options.map((o) => cyan(o)).join(\", \")}.`, \"EARG\");\n\t} else if (arg.required && parsedArgsProxy[arg.name] === void 0) throw new CLIError(`Missing required argument: --${arg.name}`, \"EARG\");\n\treturn parsedArgsProxy;\n}\nfunction resolveArgs(argsDef) {\n\tconst args = [];\n\tfor (const [name, argDef] of Object.entries(argsDef || {})) args.push({\n\t\t...argDef,\n\t\tname,\n\t\talias: toArray(argDef.alias)\n\t});\n\treturn args;\n}\nfunction defineCommand(def) {\n\treturn def;\n}\nasync function runCommand(cmd, opts) {\n\tconst cmdArgs = await resolveValue(cmd.args || {});\n\tconst parsedArgs = parseArgs(opts.rawArgs, cmdArgs);\n\tconst context = {\n\t\trawArgs: opts.rawArgs,\n\t\targs: parsedArgs,\n\t\tdata: opts.data,\n\t\tcmd\n\t};\n\tif (typeof cmd.setup === \"function\") await cmd.setup(context);\n\tlet result;\n\ttry {\n\t\tconst subCommands = await resolveValue(cmd.subCommands);\n\t\tif (subCommands && Object.keys(subCommands).length > 0) {\n\t\t\tconst subCommandArgIndex = opts.rawArgs.findIndex((arg) => !arg.startsWith(\"-\"));\n\t\t\tconst subCommandName = opts.rawArgs[subCommandArgIndex];\n\t\t\tif (subCommandName) {\n\t\t\t\tif (!subCommands[subCommandName]) throw new CLIError(`Unknown command ${cyan(subCommandName)}`, \"E_UNKNOWN_COMMAND\");\n\t\t\t\tconst subCommand = await resolveValue(subCommands[subCommandName]);\n\t\t\t\tif (subCommand) await runCommand(subCommand, { rawArgs: opts.rawArgs.slice(subCommandArgIndex + 1) });\n\t\t\t} else if (!cmd.run) throw new CLIError(`No command specified.`, \"E_NO_COMMAND\");\n\t\t}\n\t\tif (typeof cmd.run === \"function\") result = await cmd.run(context);\n\t} finally {\n\t\tif (typeof cmd.cleanup === \"function\") await cmd.cleanup(context);\n\t}\n\treturn { result };\n}\nasync function resolveSubCommand(cmd, rawArgs, parent) {\n\tconst subCommands = await resolveValue(cmd.subCommands);\n\tif (subCommands && Object.keys(subCommands).length > 0) {\n\t\tconst subCommandArgIndex = rawArgs.findIndex((arg) => !arg.startsWith(\"-\"));\n\t\tconst subCommandName = rawArgs[subCommandArgIndex];\n\t\tconst subCommand = await resolveValue(subCommands[subCommandName]);\n\t\tif (subCommand) return resolveSubCommand(subCommand, rawArgs.slice(subCommandArgIndex + 1), cmd);\n\t}\n\treturn [cmd, parent];\n}\nasync function showUsage(cmd, parent) {\n\ttry {\n\t\tconsole.log(await renderUsage(cmd, parent) + \"\\n\");\n\t} catch (error) {\n\t\tconsole.error(error);\n\t}\n}\nconst negativePrefixRe = /^no[-A-Z]/;\nasync function renderUsage(cmd, parent) {\n\tconst cmdMeta = await resolveValue(cmd.meta || {});\n\tconst cmdArgs = resolveArgs(await resolveValue(cmd.args || {}));\n\tconst parentMeta = await resolveValue(parent?.meta || {});\n\tconst commandName = `${parentMeta.name ? `${parentMeta.name} ` : \"\"}` + (cmdMeta.name || process.argv[1]);\n\tconst argLines = [];\n\tconst posLines = [];\n\tconst commandsLines = [];\n\tconst usageLine = [];\n\tfor (const arg of cmdArgs) if (arg.type === \"positional\") {\n\t\tconst name = arg.name.toUpperCase();\n\t\tconst isRequired = arg.required !== false && arg.default === void 0;\n\t\tconst defaultHint = arg.default ? `=\"${arg.default}\"` : \"\";\n\t\tposLines.push([\n\t\t\tcyan(name + defaultHint),\n\t\t\targ.description || \"\",\n\t\t\targ.valueHint ? `<${arg.valueHint}>` : \"\"\n\t\t]);\n\t\tusageLine.push(isRequired ? `<${name}>` : `[${name}]`);\n\t} else {\n\t\tconst isRequired = arg.required === true && arg.default === void 0;\n\t\tconst argStr = [...(arg.alias || []).map((a) => `-${a}`), `--${arg.name}`].join(\", \") + (arg.type === \"string\" && (arg.valueHint || arg.default) ? `=${arg.valueHint ? `<${arg.valueHint}>` : `\"${arg.default || \"\"}\"`}` : \"\") + (arg.type === \"enum\" && arg.options ? `=<${arg.options.join(\"|\")}>` : \"\");\n\t\targLines.push([cyan(argStr + (isRequired ? \" (required)\" : \"\")), arg.description || \"\"]);\n\t\tif (arg.type === \"boolean\" && (arg.default === true || arg.negativeDescription) && !negativePrefixRe.test(arg.name)) {\n\t\t\tconst negativeArgStr = [...(arg.alias || []).map((a) => `--no-${a}`), `--no-${arg.name}`].join(\", \");\n\t\t\targLines.push([cyan(negativeArgStr + (isRequired ? \" (required)\" : \"\")), arg.negativeDescription || \"\"]);\n\t\t}\n\t\tif (isRequired) usageLine.push(argStr);\n\t}\n\tif (cmd.subCommands) {\n\t\tconst commandNames = [];\n\t\tconst subCommands = await resolveValue(cmd.subCommands);\n\t\tfor (const [name, sub] of Object.entries(subCommands)) {\n\t\t\tconst meta = await resolveValue((await resolveValue(sub))?.meta);\n\t\t\tif (meta?.hidden) continue;\n\t\t\tcommandsLines.push([cyan(name), meta?.description || \"\"]);\n\t\t\tcommandNames.push(name);\n\t\t}\n\t\tusageLine.push(commandNames.join(\"|\"));\n\t}\n\tconst usageLines = [];\n\tconst version = cmdMeta.version || parentMeta.version;\n\tusageLines.push(gray(`${cmdMeta.description} (${commandName + (version ? ` v${version}` : \"\")})`), \"\");\n\tconst hasOptions = argLines.length > 0 || posLines.length > 0;\n\tusageLines.push(`${underline(bold(\"USAGE\"))} ${cyan(`${commandName}${hasOptions ? \" [OPTIONS]\" : \"\"} ${usageLine.join(\" \")}`)}`, \"\");\n\tif (posLines.length > 0) {\n\t\tusageLines.push(underline(bold(\"ARGUMENTS\")), \"\");\n\t\tusageLines.push(formatLineColumns(posLines, \" \"));\n\t\tusageLines.push(\"\");\n\t}\n\tif (argLines.length > 0) {\n\t\tusageLines.push(underline(bold(\"OPTIONS\")), \"\");\n\t\tusageLines.push(formatLineColumns(argLines, \" \"));\n\t\tusageLines.push(\"\");\n\t}\n\tif (commandsLines.length > 0) {\n\t\tusageLines.push(underline(bold(\"COMMANDS\")), \"\");\n\t\tusageLines.push(formatLineColumns(commandsLines, \" \"));\n\t\tusageLines.push(\"\", `Use ${cyan(`${commandName} <command> --help`)} for more information about a command.`);\n\t}\n\treturn usageLines.filter((l) => typeof l === \"string\").join(\"\\n\");\n}\nasync function runMain(cmd, opts = {}) {\n\tconst rawArgs = opts.rawArgs || process.argv.slice(2);\n\tconst showUsage$1 = opts.showUsage || showUsage;\n\ttry {\n\t\tif (rawArgs.includes(\"--help\") || rawArgs.includes(\"-h\")) {\n\t\t\tawait showUsage$1(...await resolveSubCommand(cmd, rawArgs));\n\t\t\tprocess.exit(0);\n\t\t} else if (rawArgs.length === 1 && rawArgs[0] === \"--version\") {\n\t\t\tconst meta = typeof cmd.meta === \"function\" ? await cmd.meta() : await cmd.meta;\n\t\t\tif (!meta?.version) throw new CLIError(\"No version specified\", \"E_NO_VERSION\");\n\t\t\tconsole.log(meta.version);\n\t\t} else await runCommand(cmd, { rawArgs });\n\t} catch (error) {\n\t\tif (error instanceof CLIError) {\n\t\t\tawait showUsage$1(...await resolveSubCommand(cmd, rawArgs));\n\t\t\tconsole.error(error.message);\n\t\t} else console.error(error, \"\\n\");\n\t\tprocess.exit(1);\n\t}\n}\nfunction createMain(cmd) {\n\treturn (opts = {}) => runMain(cmd, opts);\n}\nexport { createMain, defineCommand, parseArgs, renderUsage, runCommand, runMain, showUsage };\n","export const commands = {\n acceptFireholRisk: {\n type: 'boolean',\n description: 'Acknowledge of FireHOL',\n required: false,\n },\n\n all: {\n type: 'boolean',\n description: 'Skip interactive selection and fetch all available sources.',\n required: false,\n },\n refresh: {\n type: 'boolean',\n description: 'Force re download and re compilation of data sources.',\n required: false,\n },\n\n refreshAll: {\n type: 'boolean',\n description: 'Force re download and re compilation of all data sources using cached config.',\n required: false,\n },\n\n parallel: { type: 'boolean', description: 'Run compilation tasks concurrently.', required: false },\n contact: { type: 'string', description: 'Provide User-Agent contact info to bypass the interactive BGP prompt', required: false },\n path: { type: 'string', description: 'Path for for the databases to be compiled into.', required: false },\n bgp: { type: 'boolean', description: 'Compile BGP data', required: false },\n city: { type: 'boolean', description: 'Compile City data', required: false },\n geo: { type: 'boolean', description: 'Compile Geography data', required: false },\n proxy: { type: 'boolean', description: 'Compile Proxy data', required: false },\n seo: {type: 'boolean', description: 'Compile common seo crawlers and bots data', required: false },\n tor: { type: 'boolean', description: 'Compile Tor data', required: false },\n l1: { type: 'boolean', description: 'Compile FireHOL Level 1', required: false },\n l2: { type: 'boolean', description: 'Compile FireHOL Level 2', required: false },\n l3: { type: 'boolean', description: 'Compile FireHOL Level 3', required: false },\n l4: { type: 'boolean', description: 'Compile FireHOL Level 4', required: false },\n anonymous: { \n type: 'boolean', \n description: 'Compile FireHOL Anonymous network list', \n required: false \n }\n } as const\n;\nexport const sources = [\n { label: 'BGP', value: 'BGP', hint: '🌐 Autonomous System numbers and prefix data' },\n { label: 'City', value: 'City', hint: '🏙️ IP to City geolocation data' },\n { label: 'Geography', value: 'Geography', hint: '🌍 Country and continent information' },\n { label: 'Proxy', value: 'Proxy', hint: '🕵️ Anonymous Proxy and VPN detection lists' },\n { label: 'Tor', value: 'Tor', hint: '🧅 The Onion Router exit node IP lists, and more' },\n { label: 'SEO', value: 'SEO', hint: '🔍 Verified search engine crawlers and legitimate automated agents' },\n { label: 'FireHOL Level 1', value: 'firehol_l1', hint: '🛡️ Maximum protection, minimum false positives' },\n { label: 'FireHOL Level 2', value: 'firehol_l2', hint: '🛡️ Tracking attacks last 48h, includes dynamic IPs' },\n { label: 'FireHOL Level 3', value: 'firehol_l3', hint: '🛡️ Attacks, spyware, and viruses tracked last 30 days' },\n { label: 'FireHOL Level 4', value: 'firehol_l4', hint: '🛡️ Aggressive tracking, higher false positive risk' },\n { label: 'Anonymous', value: 'firehol_anonymous', hint: '👤 Tor exit nodes, I2P, VPNS, and other anonymity network relays' }\n ] as const;\n","import { exactly, createRegExp, charNotIn, oneOrMore } from \"magic-regexp\";\n\nexport function isValidUserAgent(ua: string): boolean | string {\n if (!ua || ua.trim() === '') return \"User agent is required\";\n\n const nonSpace = charNotIn(\" \");\n const nonAtOrSpace = charNotIn(\" @\");\n \n\n const emailPart = oneOrMore(nonAtOrSpace)\n .and(\"@\")\n .and(oneOrMore(nonAtOrSpace))\n .and(\".\")\n .and(oneOrMore(nonAtOrSpace));\n\n\n const nameOrUrlPart = oneOrMore(nonSpace)\n .and(\n oneOrMore(\n exactly(\" \").and(oneOrMore(nonSpace))\n ).optionally()\n );\n\n const regex = createRegExp(\n nameOrUrlPart\n .and(exactly(\" - \"))\n .and(emailPart)\n .at.lineStart()\n .at.lineEnd()\n );\n\n if (regex.test(ua)) {\n return true;\n }\n\n return \"Invalid format. Expected: '<name> [url] - <email>' (e.g., 'acmeco bgp.tools - contact@acme.co')\";\n}","import consola from \"consola\";\nimport { isValidUserAgent } from \"./validateUserAgent.js\";\n\n\nexport async function askForUserAgent(): Promise<string> {\n const bgpTools = 'https://bgp.tools/kb/api';\n const message = `To avoid getting blocked, bgp.tools requires contact information to reach you in case something went wrong.\n This data will be included in the user agent header each time you get data from them.\n More information is available at: ${bgpTools}.\\n\n Required format: '<your-name or company> <optional site url> - <Your email address>'\\n`;\n\n let contactInfo = '';\n let isValid = false;\n\n while (!isValid) {\n const input = await consola.prompt(message, {\n type: 'text',\n placeholder: 'acmeco bgp.tools - contact@acme.co',\n cancel: 'null' \n });\n\n if (input === null) {\n consola.fail('Operation cancelled. Exiting Shield-Base...');\n process.exit(1); \n }\n\n contactInfo = input;\n const validationResult = isValidUserAgent(contactInfo);\n \n if (validationResult === true) {\n isValid = true;\n } else {\n consola.error(validationResult); \n }\n }\n\n return contactInfo;\n};","import fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\nimport { pipeline } from 'node:stream/promises';\nimport { consola } from 'consola';\nimport { execSync } from 'node:child_process';\nimport * as tar from 'tar';\nimport extractZip from 'extract-zip';\n\nconst VERSION = '1.4.8';\nconst LOCAL_BIN_DIR = path.join(os.homedir(), '.shield-base', 'bin');\n\nfunction getTargetPlatform(): { plat: string; ext: string; isWindows: boolean } {\n const platform = os.platform();\n const arch = os.arch();\n\n let osName = '';\n let archName = '';\n let ext = '.tar.gz';\n let isWindows = false;\n\n if (platform === 'darwin') osName = 'darwin';\n else if (platform === 'linux') osName = 'linux';\n else if (platform === 'win32') {\n osName = 'windows';\n ext = '.zip';\n isWindows = true;\n } else throw new Error(`Unsupported OS: ${platform}`);\n\n if (arch === 'x64') archName = 'amd64';\n else if (arch === 'arm64') archName = 'arm64';\n else if (arch === 'ia32') archName = '386';\n else if (arch === 'arm') archName = 'arm';\n else throw new Error(`Unsupported Architecture: ${arch}`);\n\n return { plat: `${osName}_${archName}`, ext, isWindows };\n}\n\n\nexport async function ensureMmdbctl(): Promise<string> {\n const { plat, ext, isWindows } = getTargetPlatform();\n const binaryName = isWindows ? 'mmdbctl.exe' : 'mmdbctl';\n const localBinaryPath = path.join(LOCAL_BIN_DIR, binaryName);\n\n try {\n execSync('mmdbctl --help', { stdio: 'ignore' });\n return 'mmdbctl';\n } catch {\n \n }\n\n if (fs.existsSync(localBinaryPath)) {\n return localBinaryPath;\n }\n\n consola.warn('The required engine \"mmdbctl\" is missing from your system.');\n const consent = await consola.prompt(\n 'Would you like Shield-Base to automatically download and configure it locally?', \n { type: 'confirm', initial: true }\n );\n\n if (!consent) {\n consola.error('Cannot proceed without mmdbctl. Exiting...');\n process.exit(1);\n }\n\n fs.mkdirSync(LOCAL_BIN_DIR, { recursive: true });\n \n const fileName = `mmdbctl_${VERSION}_${plat}`;\n const url = `https://github.com/ipinfo/mmdbctl/releases/download/mmdbctl-${VERSION}/${fileName}${ext}`;\n const archivePath = path.join(LOCAL_BIN_DIR, `${fileName}${ext}`);\n\n consola.start(`Downloading mmdbctl v${VERSION} for ${plat}...`);\n \n try {\n const response = await fetch(url);\n if (!response.ok || !response.body) throw new Error(`Failed to fetch: ${response.statusText}`);\n \n const fileStream = fs.createWriteStream(archivePath);\n await pipeline(response.body, fileStream);\n consola.success('Download complete. Extracting...');\n\n if (isWindows) {\n await extractZip(archivePath, { dir: LOCAL_BIN_DIR });\n } else {\n await tar.x({\n file: archivePath,\n cwd: LOCAL_BIN_DIR\n });\n }\n\n\n const extractedFiles = fs.readdirSync(LOCAL_BIN_DIR);\n const extractedBinary = extractedFiles.find(f => f.includes('mmdbctl') && f !== `${fileName}${ext}`);\n\n if (extractedBinary && extractedBinary !== binaryName) {\n fs.renameSync(\n path.join(LOCAL_BIN_DIR, extractedBinary), \n localBinaryPath\n );\n }\n\n fs.unlinkSync(archivePath);\n \n if (!isWindows) {\n fs.chmodSync(localBinaryPath, 0o755);\n }\n\n consola.success('mmdbctl engine successfully installed locally!');\n return localBinaryPath;\n\n } catch (error) {\n consola.error('Failed to install mmdbctl automatically:', error);\n process.exit(1);\n }\n}","import consola from \"consola\";\nimport { InputCache } from \"../types/input.js\";\n\n\n\nexport function checkLicenseAgree(selectedSources: string[], cache: Partial<InputCache>, arg: boolean): boolean {\n\n const fireholUrl = 'https://github.com/firehol/blocklist-ipsets';\n\n const intendsToUseFirehol = selectedSources.some(s => s.startsWith('firehol_') || s === 'Proxy');\n \n const hasLicense = arg || cache.license;\n\n if (arg && !cache.license) return true;\n \n if (intendsToUseFirehol && !hasLicense) {\n consola.warn(`Some data included in \"Threats\" and \"Proxy\" may include specific fields that have different types of licensing.\\nPlease check for more info: ${fireholUrl}`);\n }\n\n return true;\n}\n\n\n","#!/usr/bin/env node\nimport { defineCommand, runMain } from 'citty';\nimport { consola } from 'consola';\nimport { commands, sources } from './utils/commands.js';\nimport { askForUserAgent } from './utils/userAgentInput.js';\nimport { isValidUserAgent } from \"./utils/validateUserAgent.js\";\nimport { performance } from 'node:perf_hooks';\nimport path from 'node:path';\nimport { \n getBGPAndASN,\n buildCitiesData,\n generateData as executeAll,\n getGeoDatas,\n getListOfProxies,\n getThreatLists,\n getTorLists,\n getCrawlersIps\n} from './scripts/index.js';\nimport { ensureMmdbctl } from './utils/mmdbctlInstaller.js';\nimport type { InputCache } from './types/input.js';\nimport fs from 'node:fs';\nimport { readFile, writeFile } from 'node:fs/promises';\nimport os from 'node:os';\nimport { restartData } from './utils/restart.js';\nimport { checkLicenseAgree } from './utils/fireHolWarning.js';\n\n\nconst start = defineCommand({\n meta: {\n name: 'shield-base',\n version: '1.0.0',\n description: 'Offline IP threat intelligence & GeoIP MMDB compiler',\n },\n\n args: {\n ...commands\n },\n \nasync run({ args }) {\n consola.box('Welcome to Shield-Base!');\n\n\n const includeFirehol = args.acceptFireholRisk;\n\n const cacheOutput = path.join(os.homedir(), '.shield-base', '.cache.json');\n let cache: Partial<InputCache> = {};\n\n if (fs.existsSync(cacheOutput)) { \n const cacheedFile = await readFile(cacheOutput, 'utf-8');\n cache = JSON.parse(cacheedFile) as InputCache;\n }\n\n let mmdbPath = '';\n if (cache.mmdbctlPath && fs.existsSync(cache.mmdbctlPath)) {\n mmdbPath = cache.mmdbctlPath;\n } else {\n consola.start('Verifying system dependencies...');\n mmdbPath = await ensureMmdbctl();\n cache.mmdbctlPath = mmdbPath;\n }\n\n\n\n type Source = typeof sources[number]['value'];\n let selectedSources: Source[] = [];\n const allSourceValues = sources.map(s => s.value);\n\n const flaggedSources: Source[] = [];\n\n if (args.refreshAll || args.refresh) {\n consola.info('Initializing data restart...');\n const isAll = !!args.refreshAll;\n const outputPath = path.resolve(process.cwd(), args.path ?? '.');\n \n await restartData(outputPath, isAll);\n return;\n }\n \n if (args.bgp) flaggedSources.push('BGP');\n if (args.city) flaggedSources.push('City');\n if (args.geo) flaggedSources.push('Geography');\n if (args.proxy) flaggedSources.push('Proxy');\n if (args.seo) flaggedSources.push('SEO');\n if (args.tor) flaggedSources.push('Tor');\n if (args.l1) flaggedSources.push('firehol_l1');\n if (args.l2) flaggedSources.push('firehol_l2');\n if (args.l3) flaggedSources.push('firehol_l3');\n if (args.l4) flaggedSources.push('firehol_l4');\n if (args.anonymous) flaggedSources.push('firehol_anonymous');\n \n if (args.all) {\n consola.info('Argument --all passed. Selecting all available sources...');\n selectedSources = [...allSourceValues];\n } else if (flaggedSources.length > 0) {\n consola.info(`Specific sources selected via flags: ${flaggedSources.join(', ')}`);\n selectedSources = flaggedSources;\n } else {\n const mode = await consola.prompt('Choose your data', {\n type: 'select',\n options: [\n { label: 'All (Recommended)', value: 'all' },\n { label: 'Select Multiple', value: 'custom' }\n ],\n cancel: 'null' \n });\n\n if (mode === null) {\n consola.fail('Operation cancelled. Exiting Shield-Base...');\n process.exit(1); \n }\n\n if (mode === 'all') {\n selectedSources = [...allSourceValues];\n } else {\n selectedSources = await consola.prompt('Select data sources to compile', {\n type: 'multiselect',\n options: sources.map(s => ({\n label: s.label,\n value: s.value,\n hint: s.hint,\n cancel: 'null'\n }))\n }) as unknown as Source[];\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!selectedSources || selectedSources.length === 0) {\n consola.error('No data sources selected for compilation. Exiting...');\n process.exit(1);\n }\n\n const licenseResult = checkLicenseAgree(selectedSources, cache, includeFirehol ?? false);\n \n cache.license = licenseResult;\n cache.selectedDataTypes = selectedSources;\n let contactInfo = args.contact;\n\nif (selectedSources.includes('BGP')) {\n if (contactInfo) {\n const validation = isValidUserAgent(contactInfo);\n if (validation !== true) {\n consola.error(`Invalid --contact flag provided: ${String(validation)}`);\n process.exit(1);\n }\n cache.useragent = contactInfo;\n consola.success('Valid contact info provided via --contact flag. Skipping prompt.');\n } else if (cache.useragent) {\n contactInfo = cache.useragent;\n consola.info('Loaded BGP contact info from cache.');\n } else {\n const bgpAction = await consola.prompt(\n 'BGP.tools requires contact information (User-Agent) to prevent API blocking. How would you like to proceed?',\n {\n type: 'select',\n options: [\n { label: 'Provide details', value: 'provide' },\n { label: 'Exclude BGP Data', value: 'exclude' }\n ],\n cancel: 'null'\n }\n );\n\n if (!bgpAction) {\n consola.fail('Operation cancelled. Exiting Shield-Base...');\n process.exit(1); \n }\n\n if (bgpAction === 'provide') {\n contactInfo = await askForUserAgent();\n cache.useragent = contactInfo;\n } else {\n consola.info('Excluding BGP from the compilation queue...');\n selectedSources = selectedSources.filter(source => source !== 'BGP');\n \n if (selectedSources.length === 0) {\n consola.error('No data sources remaining for compilation. Exiting...');\n process.exit(1);\n }\n }\n }\n }\n\n\n consola.start(`Compiling data sources: ${selectedSources.join(', ')}...`);\n const output = path.resolve(process.cwd(), args.path ?? '.');\n if (!fs.existsSync(output)) fs.mkdirSync(output);\n cache.outPutPath = output;\n\n consola.info(`Output directory mapped to: ${output}`);\n const isRunningAll = selectedSources.length === allSourceValues.length;\n const startTime = performance.now(); \n if (isRunningAll) {\n consola.start('🚀 Compiling all data sources...');\n await executeAll(output, contactInfo ?? '', licenseResult, mmdbPath);\n } else {\n\n consola.info('Running partial pipeline for selected sources...');\n \n const fireholSources = selectedSources.filter(s => s.startsWith('firehol_'));\n const standardSources = selectedSources.filter(s => !s.startsWith('firehol_'));\n\n const executionQueue: { name: string, task: () => Promise<void> }[] = [];\n\n if (standardSources.includes('BGP')) {\n executionQueue.push({ name: 'BGP & ASN', task: () => getBGPAndASN(contactInfo ?? '', output, mmdbPath) });\n }\n if (standardSources.includes('City')) {\n executionQueue.push({ name: 'City (Geofeed)', task: () => buildCitiesData(output, mmdbPath) });\n }\n if (standardSources.includes('Geography')) {\n executionQueue.push({ name: 'Country (Sapics)', task: () => getGeoDatas(output, mmdbPath) });\n }\n if (standardSources.includes('Proxy')) {\n executionQueue.push({ name: 'Proxies', task: () => getListOfProxies(output, mmdbPath) });\n }\n if (standardSources.includes('Tor')) {\n executionQueue.push({ name: 'Tor Nodes', task: () => getTorLists(output, mmdbPath) });\n }\n if (standardSources.includes('SEO')) {\n executionQueue.push({ name: 'SEO Bots', task: () => getCrawlersIps(output, mmdbPath) });\n }\n if (fireholSources.length > 0) {\n executionQueue.push({ name: `Threats (${String(fireholSources.length)} lists)`, task: () => getThreatLists(output, mmdbPath, fireholSources) });\n }\n\n if (args.parallel) {\n consola.start(`Running ${String(executionQueue.length)} compilation jobs...`);\n const results = await Promise.allSettled(executionQueue.map(q => q.task()));\n \n results.forEach((res, index) => {\n if (res.status === 'rejected') {\n consola.error(`[${executionQueue[index].name}] Failed:`, res.reason);\n }\n });\n } else {\n consola.start(`Running ${String(executionQueue.length)} compilation jobs sequentially...`);\n for (const q of executionQueue) {\n consola.start(`Initializing ${q.name} compiler...`);\n await q.task();\n consola.success(`${q.name} compilation complete.`);\n }\n }\n }\n\n\n const cacheDir = path.dirname(cacheOutput);\n if (!fs.existsSync(cacheDir)) {\n fs.mkdirSync(cacheDir, { recursive: true });\n }\n\n await writeFile(cacheOutput, JSON.stringify(cache, null, 2), 'utf-8');\n const endTime = performance.now();\n const duration = ((endTime - startTime) / 1000).toFixed(2);\n consola.success(`✨ All data successfully compiled in ${duration}s!\\n You can view it at ${output}`);\n}\n});\n\nawait runMain(start);"]}
|
|
1
|
+
{"version":3,"sources":["../node_modules/citty/dist/_chunks/libs/scule.mjs","../node_modules/citty/dist/index.mjs","../src/utils/commands.ts","../src/utils/validateUserAgent.ts","../src/utils/userAgentInput.ts","../src/utils/mmdbctlInstaller.ts","../src/utils/fireHolWarning.ts","../src/index.ts"],"names":["NUMBER_CHAR_RE","STR_SPLITTERS","isUppercase","char","splitByCase","str","separators","splitters","parts","buff","previousUpper","previousSplitter","isSplitter","isUpper","lastChar","upperFirst","lowerFirst","pascalCase","opts","p","camelCase","kebabCase","joiner","toArray","val","formatLineColumns","lines","linePrefix","maxLength","line","i","element","l","c","resolveValue","input","CLIError","message","code","parseRawArgs","args","booleans","strings","aliasMap","defaults","aliasToMain","mainToAliases","key","value","targets","target","options","getType","name","aliases","alias","allOptions","main","processedArgs","negatedFlags","arg","flagName","parsed","parseArgs$1","out","mainName","noColor","env","_c","r","t","bold","cyan","gray","underline","parseArgs","rawArgs","argsDef","parseOptions","resolveArgs","camelName","kebabName","existingAliases","positionalArguments","parsedArgsProxy","prop","nextPositionalArgument","argument","o","argDef","runCommand","cmd","cmdArgs","parsedArgs","context","result","subCommands","subCommandArgIndex","subCommandName","subCommand","resolveSubCommand","parent","showUsage","renderUsage","error","negativePrefixRe","cmdMeta","parentMeta","commandName","argLines","posLines","commandsLines","usageLine","isRequired","defaultHint","argStr","a","negativeArgStr","commandNames","sub","meta","usageLines","version","hasOptions","runMain","showUsage$1","commands","sources","isValidUserAgent","ua","nonSpace","charNotIn","nonAtOrSpace","emailPart","oneOrMore","nameOrUrlPart","exactly","createRegExp","askForUserAgent","contactInfo","isValid","consola","validationResult","VERSION","LOCAL_BIN_DIR","path","os","getTargetPlatform","platform","arch","osName","archName","ext","isWindows","ensureMmdbctl","plat","binaryName","localBinaryPath","execSync","fs","fileName","url","archivePath","response","fileStream","pipeline","extractZip","extractedBinary","f","checkLicenseAgree","selectedSources","cache","fireholUrl","intendsToUseFirehol","s","hasLicense","start","includeFirehol","cacheOutput","cacheedFile","readFile","mmdbPath","allSourceValues","flaggedSources","isAll","outputPath","restartData","mode","licenseResult","validation","bgpAction","source","output","isRunningAll","startTime","performance","generateData","fireholSources","standardSources","executionQueue","getBGPAndASN","buildCitiesData","getGeoDatas","getListOfProxies","getTorLists","getCrawlersIps","getThreatLists","q","res","index","cacheDir","writeFile","duration"],"mappings":"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","file":"cli.js","sourcesContent":["const NUMBER_CHAR_RE = /\\d/;\nconst STR_SPLITTERS = [\n\t\"-\",\n\t\"_\",\n\t\"/\",\n\t\".\"\n];\nfunction isUppercase(char = \"\") {\n\tif (NUMBER_CHAR_RE.test(char)) return;\n\treturn char !== char.toLowerCase();\n}\nfunction splitByCase(str, separators) {\n\tconst splitters = separators ?? STR_SPLITTERS;\n\tconst parts = [];\n\tif (!str || typeof str !== \"string\") return parts;\n\tlet buff = \"\";\n\tlet previousUpper;\n\tlet previousSplitter;\n\tfor (const char of str) {\n\t\tconst isSplitter = splitters.includes(char);\n\t\tif (isSplitter === true) {\n\t\t\tparts.push(buff);\n\t\t\tbuff = \"\";\n\t\t\tpreviousUpper = void 0;\n\t\t\tcontinue;\n\t\t}\n\t\tconst isUpper = isUppercase(char);\n\t\tif (previousSplitter === false) {\n\t\t\tif (previousUpper === false && isUpper === true) {\n\t\t\t\tparts.push(buff);\n\t\t\t\tbuff = char;\n\t\t\t\tpreviousUpper = isUpper;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (previousUpper === true && isUpper === false && buff.length > 1) {\n\t\t\t\tconst lastChar = buff.at(-1);\n\t\t\t\tparts.push(buff.slice(0, Math.max(0, buff.length - 1)));\n\t\t\t\tbuff = lastChar + char;\n\t\t\t\tpreviousUpper = isUpper;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tbuff += char;\n\t\tpreviousUpper = isUpper;\n\t\tpreviousSplitter = isSplitter;\n\t}\n\tparts.push(buff);\n\treturn parts;\n}\nfunction upperFirst(str) {\n\treturn str ? str[0].toUpperCase() + str.slice(1) : \"\";\n}\nfunction lowerFirst(str) {\n\treturn str ? str[0].toLowerCase() + str.slice(1) : \"\";\n}\nfunction pascalCase(str, opts) {\n\treturn str ? (Array.isArray(str) ? str : splitByCase(str)).map((p) => upperFirst(opts?.normalize ? p.toLowerCase() : p)).join(\"\") : \"\";\n}\nfunction camelCase(str, opts) {\n\treturn lowerFirst(pascalCase(str || \"\", opts));\n}\nfunction kebabCase(str, joiner) {\n\treturn str ? (Array.isArray(str) ? str : splitByCase(str)).map((p) => p.toLowerCase()).join(joiner ?? \"-\") : \"\";\n}\nexport { kebabCase as n, camelCase as t };\n","import { n as kebabCase, t as camelCase } from \"./_chunks/libs/scule.mjs\";\nimport { parseArgs as parseArgs$1 } from \"node:util\";\nfunction toArray(val) {\n\tif (Array.isArray(val)) return val;\n\treturn val === void 0 ? [] : [val];\n}\nfunction formatLineColumns(lines, linePrefix = \"\") {\n\tconst maxLength = [];\n\tfor (const line of lines) for (const [i, element] of line.entries()) maxLength[i] = Math.max(maxLength[i] || 0, element.length);\n\treturn lines.map((l) => l.map((c, i) => linePrefix + c[i === 0 ? \"padStart\" : \"padEnd\"](maxLength[i])).join(\" \")).join(\"\\n\");\n}\nfunction resolveValue(input) {\n\treturn typeof input === \"function\" ? input() : input;\n}\nvar CLIError = class extends Error {\n\tcode;\n\tconstructor(message, code) {\n\t\tsuper(message);\n\t\tthis.name = \"CLIError\";\n\t\tthis.code = code;\n\t}\n};\nfunction parseRawArgs(args = [], opts = {}) {\n\tconst booleans = new Set(opts.boolean || []);\n\tconst strings = new Set(opts.string || []);\n\tconst aliasMap = opts.alias || {};\n\tconst defaults = opts.default || {};\n\tconst aliasToMain = /* @__PURE__ */ new Map();\n\tconst mainToAliases = /* @__PURE__ */ new Map();\n\tfor (const [key, value] of Object.entries(aliasMap)) {\n\t\tconst targets = value;\n\t\tfor (const target of targets) {\n\t\t\taliasToMain.set(key, target);\n\t\t\tif (!mainToAliases.has(target)) mainToAliases.set(target, []);\n\t\t\tmainToAliases.get(target).push(key);\n\t\t\taliasToMain.set(target, key);\n\t\t\tif (!mainToAliases.has(key)) mainToAliases.set(key, []);\n\t\t\tmainToAliases.get(key).push(target);\n\t\t}\n\t}\n\tconst options = {};\n\tfunction getType(name) {\n\t\tif (booleans.has(name)) return \"boolean\";\n\t\tconst aliases = mainToAliases.get(name) || [];\n\t\tfor (const alias of aliases) if (booleans.has(alias)) return \"boolean\";\n\t\treturn \"string\";\n\t}\n\tconst allOptions = new Set([\n\t\t...booleans,\n\t\t...strings,\n\t\t...Object.keys(aliasMap),\n\t\t...Object.values(aliasMap).flat(),\n\t\t...Object.keys(defaults)\n\t]);\n\tfor (const name of allOptions) if (!options[name]) options[name] = {\n\t\ttype: getType(name),\n\t\tdefault: defaults[name]\n\t};\n\tfor (const [alias, main] of aliasToMain.entries()) if (alias.length === 1 && options[main] && !options[main].short) options[main].short = alias;\n\tconst processedArgs = [];\n\tconst negatedFlags = {};\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\t\tif (arg === \"--\") {\n\t\t\tprocessedArgs.push(...args.slice(i));\n\t\t\tbreak;\n\t\t}\n\t\tif (arg.startsWith(\"--no-\")) {\n\t\t\tconst flagName = arg.slice(5);\n\t\t\tnegatedFlags[flagName] = true;\n\t\t\tcontinue;\n\t\t}\n\t\tprocessedArgs.push(arg);\n\t}\n\tlet parsed;\n\ttry {\n\t\tparsed = parseArgs$1({\n\t\t\targs: processedArgs,\n\t\t\toptions: Object.keys(options).length > 0 ? options : void 0,\n\t\t\tallowPositionals: true,\n\t\t\tstrict: false\n\t\t});\n\t} catch {\n\t\tparsed = {\n\t\t\tvalues: {},\n\t\t\tpositionals: processedArgs\n\t\t};\n\t}\n\tconst out = { _: [] };\n\tout._ = parsed.positionals;\n\tfor (const [key, value] of Object.entries(parsed.values)) out[key] = value;\n\tfor (const [name] of Object.entries(negatedFlags)) {\n\t\tout[name] = false;\n\t\tconst mainName = aliasToMain.get(name);\n\t\tif (mainName) out[mainName] = false;\n\t\tconst aliases = mainToAliases.get(name);\n\t\tif (aliases) for (const alias of aliases) out[alias] = false;\n\t}\n\tfor (const [alias, main] of aliasToMain.entries()) {\n\t\tif (out[alias] !== void 0 && out[main] === void 0) out[main] = out[alias];\n\t\tif (out[main] !== void 0 && out[alias] === void 0) out[alias] = out[main];\n\t}\n\treturn out;\n}\nconst noColor = /* @__PURE__ */ (() => {\n\tconst env = globalThis.process?.env ?? {};\n\treturn env.NO_COLOR === \"1\" || env.TERM === \"dumb\" || env.TEST || env.CI;\n})();\nconst _c = (c, r = 39) => (t) => noColor ? t : `\\u001B[${c}m${t}\\u001B[${r}m`;\nconst bold = /* @__PURE__ */ _c(1, 22);\nconst cyan = /* @__PURE__ */ _c(36);\nconst gray = /* @__PURE__ */ _c(90);\nconst underline = /* @__PURE__ */ _c(4, 24);\nfunction parseArgs(rawArgs, argsDef) {\n\tconst parseOptions = {\n\t\tboolean: [],\n\t\tstring: [],\n\t\talias: {},\n\t\tdefault: {}\n\t};\n\tconst args = resolveArgs(argsDef);\n\tfor (const arg of args) {\n\t\tif (arg.type === \"positional\") continue;\n\t\tif (arg.type === \"string\" || arg.type === \"enum\") parseOptions.string.push(arg.name);\n\t\telse if (arg.type === \"boolean\") parseOptions.boolean.push(arg.name);\n\t\tif (arg.default !== void 0) parseOptions.default[arg.name] = arg.default;\n\t\tif (arg.alias) parseOptions.alias[arg.name] = arg.alias;\n\t\tconst camelName = camelCase(arg.name);\n\t\tconst kebabName = kebabCase(arg.name);\n\t\tif (camelName !== arg.name || kebabName !== arg.name) {\n\t\t\tconst existingAliases = toArray(parseOptions.alias[arg.name] || []);\n\t\t\tif (camelName !== arg.name && !existingAliases.includes(camelName)) existingAliases.push(camelName);\n\t\t\tif (kebabName !== arg.name && !existingAliases.includes(kebabName)) existingAliases.push(kebabName);\n\t\t\tif (existingAliases.length > 0) parseOptions.alias[arg.name] = existingAliases;\n\t\t}\n\t}\n\tconst parsed = parseRawArgs(rawArgs, parseOptions);\n\tconst [ ...positionalArguments] = parsed._;\n\tconst parsedArgsProxy = new Proxy(parsed, { get(target, prop) {\n\t\treturn target[prop] ?? target[camelCase(prop)] ?? target[kebabCase(prop)];\n\t} });\n\tfor (const [, arg] of args.entries()) if (arg.type === \"positional\") {\n\t\tconst nextPositionalArgument = positionalArguments.shift();\n\t\tif (nextPositionalArgument !== void 0) parsedArgsProxy[arg.name] = nextPositionalArgument;\n\t\telse if (arg.default === void 0 && arg.required !== false) throw new CLIError(`Missing required positional argument: ${arg.name.toUpperCase()}`, \"EARG\");\n\t\telse parsedArgsProxy[arg.name] = arg.default;\n\t} else if (arg.type === \"enum\") {\n\t\tconst argument = parsedArgsProxy[arg.name];\n\t\tconst options = arg.options || [];\n\t\tif (argument !== void 0 && options.length > 0 && !options.includes(argument)) throw new CLIError(`Invalid value for argument: ${cyan(`--${arg.name}`)} (${cyan(argument)}). Expected one of: ${options.map((o) => cyan(o)).join(\", \")}.`, \"EARG\");\n\t} else if (arg.required && parsedArgsProxy[arg.name] === void 0) throw new CLIError(`Missing required argument: --${arg.name}`, \"EARG\");\n\treturn parsedArgsProxy;\n}\nfunction resolveArgs(argsDef) {\n\tconst args = [];\n\tfor (const [name, argDef] of Object.entries(argsDef || {})) args.push({\n\t\t...argDef,\n\t\tname,\n\t\talias: toArray(argDef.alias)\n\t});\n\treturn args;\n}\nfunction defineCommand(def) {\n\treturn def;\n}\nasync function runCommand(cmd, opts) {\n\tconst cmdArgs = await resolveValue(cmd.args || {});\n\tconst parsedArgs = parseArgs(opts.rawArgs, cmdArgs);\n\tconst context = {\n\t\trawArgs: opts.rawArgs,\n\t\targs: parsedArgs,\n\t\tdata: opts.data,\n\t\tcmd\n\t};\n\tif (typeof cmd.setup === \"function\") await cmd.setup(context);\n\tlet result;\n\ttry {\n\t\tconst subCommands = await resolveValue(cmd.subCommands);\n\t\tif (subCommands && Object.keys(subCommands).length > 0) {\n\t\t\tconst subCommandArgIndex = opts.rawArgs.findIndex((arg) => !arg.startsWith(\"-\"));\n\t\t\tconst subCommandName = opts.rawArgs[subCommandArgIndex];\n\t\t\tif (subCommandName) {\n\t\t\t\tif (!subCommands[subCommandName]) throw new CLIError(`Unknown command ${cyan(subCommandName)}`, \"E_UNKNOWN_COMMAND\");\n\t\t\t\tconst subCommand = await resolveValue(subCommands[subCommandName]);\n\t\t\t\tif (subCommand) await runCommand(subCommand, { rawArgs: opts.rawArgs.slice(subCommandArgIndex + 1) });\n\t\t\t} else if (!cmd.run) throw new CLIError(`No command specified.`, \"E_NO_COMMAND\");\n\t\t}\n\t\tif (typeof cmd.run === \"function\") result = await cmd.run(context);\n\t} finally {\n\t\tif (typeof cmd.cleanup === \"function\") await cmd.cleanup(context);\n\t}\n\treturn { result };\n}\nasync function resolveSubCommand(cmd, rawArgs, parent) {\n\tconst subCommands = await resolveValue(cmd.subCommands);\n\tif (subCommands && Object.keys(subCommands).length > 0) {\n\t\tconst subCommandArgIndex = rawArgs.findIndex((arg) => !arg.startsWith(\"-\"));\n\t\tconst subCommandName = rawArgs[subCommandArgIndex];\n\t\tconst subCommand = await resolveValue(subCommands[subCommandName]);\n\t\tif (subCommand) return resolveSubCommand(subCommand, rawArgs.slice(subCommandArgIndex + 1), cmd);\n\t}\n\treturn [cmd, parent];\n}\nasync function showUsage(cmd, parent) {\n\ttry {\n\t\tconsole.log(await renderUsage(cmd, parent) + \"\\n\");\n\t} catch (error) {\n\t\tconsole.error(error);\n\t}\n}\nconst negativePrefixRe = /^no[-A-Z]/;\nasync function renderUsage(cmd, parent) {\n\tconst cmdMeta = await resolveValue(cmd.meta || {});\n\tconst cmdArgs = resolveArgs(await resolveValue(cmd.args || {}));\n\tconst parentMeta = await resolveValue(parent?.meta || {});\n\tconst commandName = `${parentMeta.name ? `${parentMeta.name} ` : \"\"}` + (cmdMeta.name || process.argv[1]);\n\tconst argLines = [];\n\tconst posLines = [];\n\tconst commandsLines = [];\n\tconst usageLine = [];\n\tfor (const arg of cmdArgs) if (arg.type === \"positional\") {\n\t\tconst name = arg.name.toUpperCase();\n\t\tconst isRequired = arg.required !== false && arg.default === void 0;\n\t\tconst defaultHint = arg.default ? `=\"${arg.default}\"` : \"\";\n\t\tposLines.push([\n\t\t\tcyan(name + defaultHint),\n\t\t\targ.description || \"\",\n\t\t\targ.valueHint ? `<${arg.valueHint}>` : \"\"\n\t\t]);\n\t\tusageLine.push(isRequired ? `<${name}>` : `[${name}]`);\n\t} else {\n\t\tconst isRequired = arg.required === true && arg.default === void 0;\n\t\tconst argStr = [...(arg.alias || []).map((a) => `-${a}`), `--${arg.name}`].join(\", \") + (arg.type === \"string\" && (arg.valueHint || arg.default) ? `=${arg.valueHint ? `<${arg.valueHint}>` : `\"${arg.default || \"\"}\"`}` : \"\") + (arg.type === \"enum\" && arg.options ? `=<${arg.options.join(\"|\")}>` : \"\");\n\t\targLines.push([cyan(argStr + (isRequired ? \" (required)\" : \"\")), arg.description || \"\"]);\n\t\tif (arg.type === \"boolean\" && (arg.default === true || arg.negativeDescription) && !negativePrefixRe.test(arg.name)) {\n\t\t\tconst negativeArgStr = [...(arg.alias || []).map((a) => `--no-${a}`), `--no-${arg.name}`].join(\", \");\n\t\t\targLines.push([cyan(negativeArgStr + (isRequired ? \" (required)\" : \"\")), arg.negativeDescription || \"\"]);\n\t\t}\n\t\tif (isRequired) usageLine.push(argStr);\n\t}\n\tif (cmd.subCommands) {\n\t\tconst commandNames = [];\n\t\tconst subCommands = await resolveValue(cmd.subCommands);\n\t\tfor (const [name, sub] of Object.entries(subCommands)) {\n\t\t\tconst meta = await resolveValue((await resolveValue(sub))?.meta);\n\t\t\tif (meta?.hidden) continue;\n\t\t\tcommandsLines.push([cyan(name), meta?.description || \"\"]);\n\t\t\tcommandNames.push(name);\n\t\t}\n\t\tusageLine.push(commandNames.join(\"|\"));\n\t}\n\tconst usageLines = [];\n\tconst version = cmdMeta.version || parentMeta.version;\n\tusageLines.push(gray(`${cmdMeta.description} (${commandName + (version ? ` v${version}` : \"\")})`), \"\");\n\tconst hasOptions = argLines.length > 0 || posLines.length > 0;\n\tusageLines.push(`${underline(bold(\"USAGE\"))} ${cyan(`${commandName}${hasOptions ? \" [OPTIONS]\" : \"\"} ${usageLine.join(\" \")}`)}`, \"\");\n\tif (posLines.length > 0) {\n\t\tusageLines.push(underline(bold(\"ARGUMENTS\")), \"\");\n\t\tusageLines.push(formatLineColumns(posLines, \" \"));\n\t\tusageLines.push(\"\");\n\t}\n\tif (argLines.length > 0) {\n\t\tusageLines.push(underline(bold(\"OPTIONS\")), \"\");\n\t\tusageLines.push(formatLineColumns(argLines, \" \"));\n\t\tusageLines.push(\"\");\n\t}\n\tif (commandsLines.length > 0) {\n\t\tusageLines.push(underline(bold(\"COMMANDS\")), \"\");\n\t\tusageLines.push(formatLineColumns(commandsLines, \" \"));\n\t\tusageLines.push(\"\", `Use ${cyan(`${commandName} <command> --help`)} for more information about a command.`);\n\t}\n\treturn usageLines.filter((l) => typeof l === \"string\").join(\"\\n\");\n}\nasync function runMain(cmd, opts = {}) {\n\tconst rawArgs = opts.rawArgs || process.argv.slice(2);\n\tconst showUsage$1 = opts.showUsage || showUsage;\n\ttry {\n\t\tif (rawArgs.includes(\"--help\") || rawArgs.includes(\"-h\")) {\n\t\t\tawait showUsage$1(...await resolveSubCommand(cmd, rawArgs));\n\t\t\tprocess.exit(0);\n\t\t} else if (rawArgs.length === 1 && rawArgs[0] === \"--version\") {\n\t\t\tconst meta = typeof cmd.meta === \"function\" ? await cmd.meta() : await cmd.meta;\n\t\t\tif (!meta?.version) throw new CLIError(\"No version specified\", \"E_NO_VERSION\");\n\t\t\tconsole.log(meta.version);\n\t\t} else await runCommand(cmd, { rawArgs });\n\t} catch (error) {\n\t\tif (error instanceof CLIError) {\n\t\t\tawait showUsage$1(...await resolveSubCommand(cmd, rawArgs));\n\t\t\tconsole.error(error.message);\n\t\t} else console.error(error, \"\\n\");\n\t\tprocess.exit(1);\n\t}\n}\nfunction createMain(cmd) {\n\treturn (opts = {}) => runMain(cmd, opts);\n}\nexport { createMain, defineCommand, parseArgs, renderUsage, runCommand, runMain, showUsage };\n","export const commands = {\n acceptFireholRisk: {\n type: 'boolean',\n description: 'Acknowledge of FireHOL',\n required: false,\n },\n\n all: {\n type: 'boolean',\n description: 'Skip interactive selection and fetch all available sources.',\n required: false,\n },\n refresh: {\n type: 'boolean',\n description: 'Force re download and re compilation of data sources.',\n required: false,\n },\n\n refreshAll: {\n type: 'boolean',\n description: 'Force re download and re compilation of all data sources using cached config.',\n required: false,\n },\n\n parallel: { type: 'boolean', description: 'Run compilation tasks concurrently.', required: false },\n contact: { type: 'string', description: 'Provide User-Agent contact info to bypass the interactive BGP prompt', required: false },\n path: { type: 'string', description: 'Path for for the databases to be compiled into. Will start the interactive wizard if no data sources chosen', required: false },\n bgp: { type: 'boolean', description: 'Compile BGP data', required: false },\n city: { type: 'boolean', description: 'Compile City data', required: false },\n geo: { type: 'boolean', description: 'Compile Geography data', required: false },\n proxy: { type: 'boolean', description: 'Compile Proxy data', required: false },\n seo: {type: 'boolean', description: 'Compile common seo crawlers and bots data', required: false },\n tor: { type: 'boolean', description: 'Compile Tor data', required: false },\n l1: { type: 'boolean', description: 'Compile FireHOL Level 1', required: false },\n l2: { type: 'boolean', description: 'Compile FireHOL Level 2', required: false },\n l3: { type: 'boolean', description: 'Compile FireHOL Level 3', required: false },\n l4: { type: 'boolean', description: 'Compile FireHOL Level 4', required: false },\n anonymous: { \n type: 'boolean', \n description: 'Compile FireHOL Anonymous network list', \n required: false \n }\n } as const\n;\nexport const sources = [\n { label: 'BGP', value: 'BGP', hint: '🌐 Autonomous System numbers and prefix data' },\n { label: 'City', value: 'City', hint: '🏙️ IP to City geolocation data' },\n { label: 'Geography', value: 'Geography', hint: '🌍 Country and continent information' },\n { label: 'Proxy', value: 'Proxy', hint: '🕵️ Anonymous Proxy and VPN detection lists' },\n { label: 'Tor', value: 'Tor', hint: '🧅 The Onion Router exit node IP lists, and more' },\n { label: 'SEO', value: 'SEO', hint: '🔍 Verified search engine crawlers and legitimate automated agents' },\n { label: 'FireHOL Level 1', value: 'firehol_l1', hint: '🛡️ Maximum protection, minimum false positives' },\n { label: 'FireHOL Level 2', value: 'firehol_l2', hint: '🛡️ Tracking attacks last 48h, includes dynamic IPs' },\n { label: 'FireHOL Level 3', value: 'firehol_l3', hint: '🛡️ Attacks, spyware, and viruses tracked last 30 days' },\n { label: 'FireHOL Level 4', value: 'firehol_l4', hint: '🛡️ Aggressive tracking, higher false positive risk' },\n { label: 'Anonymous', value: 'firehol_anonymous', hint: '👤 Tor exit nodes, I2P, VPNS, and other anonymity network relays' }\n ] as const;\n","import { exactly, createRegExp, charNotIn, oneOrMore } from \"magic-regexp\";\n\nexport function isValidUserAgent(ua: string): boolean | string {\n if (!ua || ua.trim() === '') return \"User agent is required\";\n\n const nonSpace = charNotIn(\" \");\n const nonAtOrSpace = charNotIn(\" @\");\n \n\n const emailPart = oneOrMore(nonAtOrSpace)\n .and(\"@\")\n .and(oneOrMore(nonAtOrSpace))\n .and(\".\")\n .and(oneOrMore(nonAtOrSpace));\n\n\n const nameOrUrlPart = oneOrMore(nonSpace)\n .and(\n oneOrMore(\n exactly(\" \").and(oneOrMore(nonSpace))\n ).optionally()\n );\n\n const regex = createRegExp(\n nameOrUrlPart\n .and(exactly(\" - \"))\n .and(emailPart)\n .at.lineStart()\n .at.lineEnd()\n );\n\n if (regex.test(ua)) {\n return true;\n }\n\n return \"Invalid format. Expected: '<name> [url] - <email>' (e.g., 'acmeco bgp.tools - contact@acme.co')\";\n}","import consola from \"consola\";\nimport { isValidUserAgent } from \"./validateUserAgent.js\";\n\n\nexport async function askForUserAgent(): Promise<string> {\n const bgpTools = 'https://bgp.tools/kb/api';\n const message = `To avoid getting blocked, bgp.tools requires contact information to reach you in case something went wrong.\n This data will be included in the user agent header each time you get data from them.\n More information is available at: ${bgpTools}.\\n\n Required format: '<your-name or company> <optional site url> - <Your email address>'\\n`;\n\n let contactInfo = '';\n let isValid = false;\n\n while (!isValid) {\n const input = await consola.prompt(message, {\n type: 'text',\n placeholder: 'acmeco bgp.tools - contact@acme.co',\n cancel: 'null' \n });\n\n if (input === null) {\n consola.fail('Operation cancelled. Exiting Shield-Base...');\n process.exit(1); \n }\n\n contactInfo = input;\n const validationResult = isValidUserAgent(contactInfo);\n \n if (validationResult === true) {\n isValid = true;\n } else {\n consola.error(validationResult); \n }\n }\n\n return contactInfo;\n};","import fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\nimport { pipeline } from 'node:stream/promises';\nimport { consola } from 'consola';\nimport { execSync } from 'node:child_process';\nimport * as tar from 'tar';\nimport extractZip from 'extract-zip';\n\nconst VERSION = '1.4.8';\nconst LOCAL_BIN_DIR = path.join(os.homedir(), '.shield-base', 'bin');\n\nfunction getTargetPlatform(): { plat: string; ext: string; isWindows: boolean } {\n const platform = os.platform();\n const arch = os.arch();\n\n let osName = '';\n let archName = '';\n let ext = '.tar.gz';\n let isWindows = false;\n\n if (platform === 'darwin') osName = 'darwin';\n else if (platform === 'linux') osName = 'linux';\n else if (platform === 'win32') {\n osName = 'windows';\n ext = '.zip';\n isWindows = true;\n } else throw new Error(`Unsupported OS: ${platform}`);\n\n if (arch === 'x64') archName = 'amd64';\n else if (arch === 'arm64') archName = 'arm64';\n else if (arch === 'ia32') archName = '386';\n else if (arch === 'arm') archName = 'arm';\n else throw new Error(`Unsupported Architecture: ${arch}`);\n\n return { plat: `${osName}_${archName}`, ext, isWindows };\n}\n\n\nexport async function ensureMmdbctl(): Promise<string> {\n const { plat, ext, isWindows } = getTargetPlatform();\n const binaryName = isWindows ? 'mmdbctl.exe' : 'mmdbctl';\n const localBinaryPath = path.join(LOCAL_BIN_DIR, binaryName);\n\n try {\n execSync('mmdbctl --help', { stdio: 'ignore' });\n return 'mmdbctl';\n } catch {\n \n }\n\n if (fs.existsSync(localBinaryPath)) {\n return localBinaryPath;\n }\n\n consola.warn('The required engine \"mmdbctl\" is missing from your system.');\n const consent = await consola.prompt(\n 'Would you like Shield-Base to automatically download and configure it locally?', \n { type: 'confirm', initial: true }\n );\n\n if (!consent) {\n consola.error('Cannot proceed without mmdbctl. Exiting...');\n process.exit(1);\n }\n\n fs.mkdirSync(LOCAL_BIN_DIR, { recursive: true });\n \n const fileName = `mmdbctl_${VERSION}_${plat}`;\n const url = `https://github.com/ipinfo/mmdbctl/releases/download/mmdbctl-${VERSION}/${fileName}${ext}`;\n const archivePath = path.join(LOCAL_BIN_DIR, `${fileName}${ext}`);\n\n consola.start(`Downloading mmdbctl v${VERSION} for ${plat}...`);\n \n try {\n const response = await fetch(url);\n if (!response.ok || !response.body) throw new Error(`Failed to fetch: ${response.statusText}`);\n \n const fileStream = fs.createWriteStream(archivePath);\n await pipeline(response.body, fileStream);\n consola.success('Download complete. Extracting...');\n\n if (isWindows) {\n await extractZip(archivePath, { dir: LOCAL_BIN_DIR });\n } else {\n await tar.x({\n file: archivePath,\n cwd: LOCAL_BIN_DIR\n });\n }\n\n\n const extractedFiles = fs.readdirSync(LOCAL_BIN_DIR);\n const extractedBinary = extractedFiles.find(f => f.includes('mmdbctl') && f !== `${fileName}${ext}`);\n\n if (extractedBinary && extractedBinary !== binaryName) {\n fs.renameSync(\n path.join(LOCAL_BIN_DIR, extractedBinary), \n localBinaryPath\n );\n }\n\n fs.unlinkSync(archivePath);\n \n if (!isWindows) {\n fs.chmodSync(localBinaryPath, 0o755);\n }\n\n consola.success('mmdbctl engine successfully installed locally!');\n return localBinaryPath;\n\n } catch (error) {\n consola.error('Failed to install mmdbctl automatically:', error);\n process.exit(1);\n }\n}","import consola from \"consola\";\nimport { InputCache } from \"../types/input.js\";\n\n\n\nexport function checkLicenseAgree(selectedSources: string[], cache: Partial<InputCache>, arg: boolean): boolean {\n\n const fireholUrl = 'https://github.com/firehol/blocklist-ipsets';\n\n const intendsToUseFirehol = selectedSources.some(s => s.startsWith('firehol_') || s === 'Proxy');\n \n const hasLicense = arg || cache.license;\n\n if (arg && !cache.license) return true;\n \n if (intendsToUseFirehol && !hasLicense) {\n consola.warn(`Some data included in \"Threats\" and \"Proxy\" may include specific fields that have different types of licensing.\\nPlease check for more info: ${fireholUrl}`);\n }\n\n return true;\n}\n\n\n","#!/usr/bin/env node\nimport { defineCommand, runMain } from 'citty';\nimport { consola } from 'consola';\nimport { commands, sources } from './utils/commands.js';\nimport { askForUserAgent } from './utils/userAgentInput.js';\nimport { isValidUserAgent } from \"./utils/validateUserAgent.js\";\nimport { performance } from 'node:perf_hooks';\nimport path from 'node:path';\nimport { \n getBGPAndASN,\n buildCitiesData,\n generateData as executeAll,\n getGeoDatas,\n getListOfProxies,\n getThreatLists,\n getTorLists,\n getCrawlersIps\n} from './scripts/index.js';\nimport { ensureMmdbctl } from './utils/mmdbctlInstaller.js';\nimport type { InputCache } from './types/input.js';\nimport fs from 'node:fs';\nimport { readFile, writeFile } from 'node:fs/promises';\nimport os from 'node:os';\nimport { restartData } from './utils/restart.js';\nimport { checkLicenseAgree } from './utils/fireHolWarning.js';\n\n\nconst start = defineCommand({\n meta: {\n name: 'shield-base',\n version: '1.3.1',\n description: 'Offline IP threat intelligence & GeoIP MMDB compiler',\n },\n\n args: {\n ...commands\n },\n \nasync run({ args }) {\n consola.box('Welcome to Shield-Base!');\n\n\n const includeFirehol = args.acceptFireholRisk;\n\n const cacheOutput = path.join(os.homedir(), '.shield-base', '.cache.json');\n let cache: Partial<InputCache> = {};\n\n if (fs.existsSync(cacheOutput)) { \n const cacheedFile = await readFile(cacheOutput, 'utf-8');\n cache = JSON.parse(cacheedFile) as InputCache;\n }\n\n let mmdbPath = '';\n if (cache.mmdbctlPath && fs.existsSync(cache.mmdbctlPath)) {\n mmdbPath = cache.mmdbctlPath;\n } else {\n consola.start('Verifying system dependencies...');\n mmdbPath = await ensureMmdbctl();\n cache.mmdbctlPath = mmdbPath;\n }\n\n\n\n type Source = typeof sources[number]['value'];\n let selectedSources: Source[] = [];\n const allSourceValues = sources.map(s => s.value);\n\n const flaggedSources: Source[] = [];\n\n if (args.refreshAll || args.refresh) {\n consola.info('Initializing data restart...');\n const isAll = !!args.refreshAll;\n const outputPath = path.resolve(process.cwd(), args.path ?? '.');\n \n await restartData(outputPath, isAll);\n return;\n }\n \n if (args.bgp) flaggedSources.push('BGP');\n if (args.city) flaggedSources.push('City');\n if (args.geo) flaggedSources.push('Geography');\n if (args.proxy) flaggedSources.push('Proxy');\n if (args.seo) flaggedSources.push('SEO');\n if (args.tor) flaggedSources.push('Tor');\n if (args.l1) flaggedSources.push('firehol_l1');\n if (args.l2) flaggedSources.push('firehol_l2');\n if (args.l3) flaggedSources.push('firehol_l3');\n if (args.l4) flaggedSources.push('firehol_l4');\n if (args.anonymous) flaggedSources.push('firehol_anonymous');\n \n if (args.all) {\n consola.info('Argument --all passed. Selecting all available sources...');\n selectedSources = [...allSourceValues];\n } else if (flaggedSources.length > 0) {\n consola.info(`Specific sources selected via flags: ${flaggedSources.join(', ')}`);\n selectedSources = flaggedSources;\n } else {\n const mode = await consola.prompt('Choose your data', {\n type: 'select',\n options: [\n { label: 'All (Recommended)', value: 'all' },\n { label: 'Select Multiple', value: 'custom' }\n ],\n cancel: 'null' \n });\n\n if (mode === null) {\n consola.fail('Operation cancelled. Exiting Shield-Base...');\n process.exit(1); \n }\n\n if (mode === 'all') {\n selectedSources = [...allSourceValues];\n } else {\n selectedSources = await consola.prompt('Select data sources to compile', {\n type: 'multiselect',\n options: sources.map(s => ({\n label: s.label,\n value: s.value,\n hint: s.hint,\n cancel: 'null'\n }))\n }) as unknown as Source[];\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!selectedSources || selectedSources.length === 0) {\n consola.error('No data sources selected for compilation. Exiting...');\n process.exit(1);\n }\n\n const licenseResult = checkLicenseAgree(selectedSources, cache, includeFirehol ?? false);\n \n cache.license = licenseResult;\n cache.selectedDataTypes = selectedSources;\n let contactInfo = args.contact;\n\nif (selectedSources.includes('BGP')) {\n if (contactInfo) {\n const validation = isValidUserAgent(contactInfo);\n if (validation !== true) {\n consola.error(`Invalid --contact flag provided: ${String(validation)}`);\n process.exit(1);\n }\n cache.useragent = contactInfo;\n consola.success('Valid contact info provided via --contact flag. Skipping prompt.');\n } else if (cache.useragent) {\n contactInfo = cache.useragent;\n consola.info('Loaded BGP contact info from cache.');\n } else {\n const bgpAction = await consola.prompt(\n 'BGP.tools requires contact information (User-Agent) to prevent API blocking. How would you like to proceed?',\n {\n type: 'select',\n options: [\n { label: 'Provide details', value: 'provide' },\n { label: 'Exclude BGP Data', value: 'exclude' }\n ],\n cancel: 'null'\n }\n );\n\n if (!bgpAction) {\n consola.fail('Operation cancelled. Exiting Shield-Base...');\n process.exit(1); \n }\n\n if (bgpAction === 'provide') {\n contactInfo = await askForUserAgent();\n cache.useragent = contactInfo;\n } else {\n consola.info('Excluding BGP from the compilation queue...');\n selectedSources = selectedSources.filter(source => source !== 'BGP');\n \n if (selectedSources.length === 0) {\n consola.error('No data sources remaining for compilation. Exiting...');\n process.exit(1);\n }\n }\n }\n }\n\n\n consola.start(`Compiling data sources: ${selectedSources.join(', ')}...`);\n const output = path.resolve(process.cwd(), args.path ?? '.');\n if (!fs.existsSync(output)) fs.mkdirSync(output);\n cache.outPutPath = output;\n\n consola.info(`Output directory mapped to: ${output}`);\n const isRunningAll = selectedSources.length === allSourceValues.length;\n const startTime = performance.now(); \n if (isRunningAll) {\n consola.start('🚀 Compiling all data sources...');\n await executeAll(output, contactInfo ?? '', licenseResult, mmdbPath);\n } else {\n\n consola.info('Running partial pipeline for selected sources...');\n \n const fireholSources = selectedSources.filter(s => s.startsWith('firehol_'));\n const standardSources = selectedSources.filter(s => !s.startsWith('firehol_'));\n\n const executionQueue: { name: string, task: () => Promise<void> }[] = [];\n\n if (standardSources.includes('BGP')) {\n executionQueue.push({ name: 'BGP & ASN', task: () => getBGPAndASN(contactInfo ?? '', output, mmdbPath) });\n }\n if (standardSources.includes('City')) {\n executionQueue.push({ name: 'City (Geofeed)', task: () => buildCitiesData(output, mmdbPath) });\n }\n if (standardSources.includes('Geography')) {\n executionQueue.push({ name: 'Country (Sapics)', task: () => getGeoDatas(output, mmdbPath) });\n }\n if (standardSources.includes('Proxy')) {\n executionQueue.push({ name: 'Proxies', task: () => getListOfProxies(output, mmdbPath) });\n }\n if (standardSources.includes('Tor')) {\n executionQueue.push({ name: 'Tor Nodes', task: () => getTorLists(output, mmdbPath) });\n }\n if (standardSources.includes('SEO')) {\n executionQueue.push({ name: 'SEO Bots', task: () => getCrawlersIps(output, mmdbPath) });\n }\n if (fireholSources.length > 0) {\n executionQueue.push({ name: `Threats (${String(fireholSources.length)} lists)`, task: () => getThreatLists(output, mmdbPath, fireholSources) });\n }\n\n if (args.parallel) {\n consola.start(`Running ${String(executionQueue.length)} compilation jobs...`);\n const results = await Promise.allSettled(executionQueue.map(q => q.task()));\n \n results.forEach((res, index) => {\n if (res.status === 'rejected') {\n consola.error(`[${executionQueue[index].name}] Failed:`, res.reason);\n }\n });\n } else {\n consola.start(`Running ${String(executionQueue.length)} compilation jobs sequentially...`);\n for (const q of executionQueue) {\n consola.start(`Initializing ${q.name} compiler...`);\n await q.task();\n consola.success(`${q.name} compilation complete.`);\n }\n }\n }\n\n\n const cacheDir = path.dirname(cacheOutput);\n if (!fs.existsSync(cacheDir)) {\n fs.mkdirSync(cacheDir, { recursive: true });\n }\n\n await writeFile(cacheOutput, JSON.stringify(cache, null, 2), 'utf-8');\n const endTime = performance.now();\n const duration = ((endTime - startTime) / 1000).toFixed(2);\n consola.success(`✨ All data successfully compiled in ${duration}s!\\n You can view it at ${output}`);\n}\n});\n\nawait runMain(start);"]}
|