@riavzon/shield-base 1.2.2 → 1.3.0
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/README.md +188 -130
- package/dist/chunk-MZE5OD6T.js +53 -0
- package/dist/chunk-MZE5OD6T.js.map +1 -0
- package/dist/cli.js +7 -8
- package/dist/cli.js.map +1 -1
- package/dist/main.d.ts +20 -2
- package/dist/main.js +1 -1
- package/package.json +2 -1
- package/dist/chunk-IXNJSTI7.js +0 -45
- package/dist/chunk-IXNJSTI7.js.map +0 -1
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/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","fireholUrl","start","includeFirehol","cacheOutput","cache","cacheedFile","readFile","mmdbPath","selectedSources","allSourceValues","s","flaggedSources","isAll","outputPath","restartData","mode","validation","bgpAction","source","output","generateData","fireholSources","standardSources","executionQueue","getBGPAndASN","buildCitiesData","getGeoDatas","getListOfProxies","getTorLists","getThreatLists","q","res","index","cacheDir","writeFile"],"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 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: '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}","#!/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 path from 'node:path';\nimport { \n getBGPAndASN,\n buildCitiesData,\n generateData as executeAll,\n getGeoDatas,\n getListOfProxies,\n getThreatLists,\n getTorLists\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';\n\nconst fireholUrl = 'https://github.com/firehol/blocklist-ipsets';\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 if (includeFirehol && !cache.license) {\n cache.license = true;\n consola.success('FireHOL databases included in scope.');\n } else {\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 consola.info('Skipping FireHOL datasets.');\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.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.length === 0 || !selectedSources) {\n consola.error('No data sources selected for compilation. Exiting...');\n process.exit(1);\n }\n\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 consola.info(`Output directory mapped to: ${output}`);\n const isRunningAll = selectedSources.length === allSourceValues.length;\n if (isRunningAll) {\n consola.start('🚀 Compiling all data sources...');\n await executeAll(output, contactInfo ?? '', true, 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 (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\n consola.success(`✨ All data successfully compiled!\\n You can view 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.', 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}\n});\n\nawait runMain(start);"]}
|
package/dist/main.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ExecOptions } from 'node:child_process';
|
|
2
|
+
import * as magic_regexp from 'magic-regexp';
|
|
2
3
|
|
|
3
4
|
declare function getBGPAndASN(userAgent: string, outputPath: string, mmdbPath: string): Promise<void>;
|
|
4
5
|
|
|
@@ -20,6 +21,23 @@ interface RunResult {
|
|
|
20
21
|
stdout: string | Buffer;
|
|
21
22
|
stderr: string | Buffer;
|
|
22
23
|
}
|
|
23
|
-
|
|
24
|
+
interface RunOptions extends ExecOptions {
|
|
25
|
+
silent?: boolean;
|
|
26
|
+
}
|
|
27
|
+
declare const run: (command: string, options?: RunOptions) => Promise<RunResult>;
|
|
28
|
+
|
|
29
|
+
declare const ipBase: magic_regexp.Input<"(?<!(?:[a-zA-Z]|\\d|:))(?:(?:(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d))|(?:(?:(?:\\d|[abcdefABCDEF]){1,4}:){7}(?:\\d|[abcdefABCDEF]){1,4}|(?:(?:\\d|[abcdefABCDEF]){1,4}:){3,7}:|(?:(?:\\d|[abcdefABCDEF]){1,4}:){1,5}::(?:(?:\\d|[abcdefABCDEF]){1,4}:)*(?:\\d|[abcdefABCDEF]){1,4}|::(?:(?:\\d|[abcdefABCDEF]){1,4}|(?:(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d))|(?:(?:\\d|[abcdefABCDEF]){1,4}:)*(?:\\d|[abcdefABCDEF]){1,4})|(?:(?:\\d|[abcdefABCDEF]){1,4}:){1,7}:))", never, [undefined, ...any[]]>;
|
|
30
|
+
declare const botIpExtractor: magic_regexp.MagicRegExp<"/(?<ip1>(?<!(?:[a-zA-Z]|\\d|:))(?:(?:(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d))|(?:(?:(?:\\d|[abcdefABCDEF]){1,4}:){7}(?:\\d|[abcdefABCDEF]){1,4}|(?:(?:\\d|[abcdefABCDEF]){1,4}:){3,7}:|(?:(?:\\d|[abcdefABCDEF]){1,4}:){1,5}::(?:(?:\\d|[abcdefABCDEF]){1,4}:)*(?:\\d|[abcdefABCDEF]){1,4}|::(?:(?:\\d|[abcdefABCDEF]){1,4}|(?:(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d))|(?:(?:\\d|[abcdefABCDEF]){1,4}:)*(?:\\d|[abcdefABCDEF]){1,4})|(?:(?:\\d|[abcdefABCDEF]){1,4}:){1,7}:)))(?:\\/(?<mask>\\d{1,3})|(?: to | - |-| and )(?<ip2>(?<!(?:[a-zA-Z]|\\d|:))(?:(?:(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d))|(?:(?:(?:\\d|[abcdefABCDEF]){1,4}:){7}(?:\\d|[abcdefABCDEF]){1,4}|(?:(?:\\d|[abcdefABCDEF]){1,4}:){3,7}:|(?:(?:\\d|[abcdefABCDEF]){1,4}:){1,5}::(?:(?:\\d|[abcdefABCDEF]){1,4}:)*(?:\\d|[abcdefABCDEF]){1,4}|::(?:(?:\\d|[abcdefABCDEF]){1,4}|(?:(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d))|(?:(?:\\d|[abcdefABCDEF]){1,4}:)*(?:\\d|[abcdefABCDEF]){1,4})|(?:(?:\\d|[abcdefABCDEF]){1,4}:){1,7}:))))?/gi", "mask" | "ip1" | "ip2", ["(?<ip1>(?<!(?:[a-zA-Z]|\\d|:))(?:(?:(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d))|(?:(?:(?:\\d|[abcdefABCDEF]){1,4}:){7}(?:\\d|[abcdefABCDEF]){1,4}|(?:(?:\\d|[abcdefABCDEF]){1,4}:){3,7}:|(?:(?:\\d|[abcdefABCDEF]){1,4}:){1,5}::(?:(?:\\d|[abcdefABCDEF]){1,4}:)*(?:\\d|[abcdefABCDEF]){1,4}|::(?:(?:\\d|[abcdefABCDEF]){1,4}|(?:(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d)\\.(?:25[012345]|2[01234]\\d|[01]\\d\\d|\\d\\d|\\d))|(?:(?:\\d|[abcdefABCDEF]){1,4}:)*(?:\\d|[abcdefABCDEF]){1,4})|(?:(?:\\d|[abcdefABCDEF]){1,4}:){1,7}:)))", undefined, ...any[]], "g" | "i">;
|
|
31
|
+
|
|
32
|
+
declare const normalizeIp: (ip: string) => string;
|
|
33
|
+
declare const normalizeExtractedMatch: (ip1: string, ip2?: string, mask?: string) => string | string[];
|
|
34
|
+
|
|
35
|
+
interface ProvidersLists {
|
|
36
|
+
name: string;
|
|
37
|
+
type: 'HTML' | 'JSON' | 'CSV';
|
|
38
|
+
urls: string[];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
declare function getCrawlersIps(outputPath: string, mmdbPath: string, customUrls?: ProvidersLists[]): Promise<void>;
|
|
24
42
|
|
|
25
|
-
export { type RunResult, buildCitiesData, generateData, getBGPAndASN, getGeoDatas, getListOfProxies, getThreatLists, getTorLists, restartData, run };
|
|
43
|
+
export { type RunOptions, type RunResult, botIpExtractor, buildCitiesData, generateData, getBGPAndASN, getCrawlersIps, getGeoDatas, getListOfProxies, getThreatLists, getTorLists, ipBase, normalizeExtractedMatch, normalizeIp, restartData, run };
|
package/dist/main.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{c as buildCitiesData,
|
|
1
|
+
export{k as botIpExtractor,c as buildCitiesData,m as generateData,b as getBGPAndASN,l as getCrawlersIps,e as getGeoDatas,f as getListOfProxies,g as getThreatLists,d as getTorLists,j as ipBase,i as normalizeExtractedMatch,h as normalizeIp,n as restartData,a as run}from'./chunk-MZE5OD6T.js';//# sourceMappingURL=main.js.map
|
|
2
2
|
//# sourceMappingURL=main.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@riavzon/shield-base",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/main.js",
|
|
6
6
|
"types": "./dist/main.d.ts",
|
|
@@ -56,6 +56,7 @@
|
|
|
56
56
|
"lint": "eslint ."
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
+
"cidr-calc": "^1.0.4",
|
|
59
60
|
"consola": "^3.4.2",
|
|
60
61
|
"extract-zip": "^2.0.1",
|
|
61
62
|
"ipaddr.js": "^2.3.0",
|
package/dist/chunk-IXNJSTI7.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import {createRegExp,exactly,oneOrMore,digit,charNotIn,anyOf}from'magic-regexp';import*as G from'fs';import G__default,{existsSync}from'fs';import bt from'child_process';import wt from'util';import*as j from'path';import j__default from'path';import O,{consola}from'consola';import {fileURLToPath}from'url';import at from'ipaddr.js';import kt from'os';import {readFile}from'fs/promises';var _t=wt.promisify(bt.exec),v=async(o,S={})=>{try{let{stdout:a,stderr:e}=await _t(o,{...S,maxBuffer:S.maxBuffer??10485760}),i={stdout:typeof a=="string"?a.trim():a,stderr:typeof e=="string"?e.trim():e};return console.log(`[run]: ${o}`),i.stdout&&console.log("stdout:",i.stdout),i.stderr&&console.error("stderr:",i.stderr),i}catch(a){if(console.error(`Execution failed for command: "${o}"`),typeof a=="object"&&a!==null){let e=a;e.stderr&&console.error("Error Output:",e.stderr);}throw a}};async function Q(o,S,a){let e=["https://bgp.tools/asns.csv","https://bgp.tools/table.jsonl"],i=j__default.resolve(S,"asn.mmdb"),n=j__default.resolve(S,"temp_asn_data.json");try{consola.info(`
|
|
2
|
-
[ASN/BGP] Fetching ASN Dictionary from BGP.tools...`);let l=await(await fetch(e[0],{method:"GET",headers:{"User-Agent":o}})).text(),r=new Map,R=l.split(`
|
|
3
|
-
`).slice(1),y=createRegExp(exactly("AS").and(oneOrMore(digit).groupedAs("asnNumber"))),t=charNotIn('"').times.any(),h=t.and(exactly('"')).times(2),b=createRegExp(exactly(",").before(h.times.any().and(t).at.lineEnd()));for(let x of R){if(!x)continue;let w=x.split(b),C=w[0].match(y),d=C?.groups.asnNumber?parseInt(C.groups.asnNumber,10):null,_=createRegExp(exactly('"').at.lineStart().or(exactly('"').at.lineEnd()),["g"]),N=w[1]?.replace(_,"").trim()||"Unknown",m=w[2]?.trim()||"Unknown";d!==null&&r.set(d,{name:N,type:m});}consola.success(`[ASN/BGP] SUCCESS: Loaded ${String(r.size)} ASN definitions.`),consola.info("[ASN/BGP] Fetching Routing Table...");let g=await(await fetch(e[1],{method:"GET",headers:{"User-Agent":o}})).text();consola.info("[ASN/BGP] Mapping CIDR to ASN data...");let T=g.split(`
|
|
4
|
-
`),f=[];for(let x of T){if(!x)continue;let w=JSON.parse(x);if(w.Hits<10)continue;let C=r.get(w.ASN)??{name:"Unknown",type:"Unknown"},d={range:w.CIDR,asn_id:String(w.ASN),asn_name:C.name,classification:C.type,hits:String(w.Hits)};f.push(JSON.stringify(d));}f.length>0&&consola.log("[ASN/BGP] SAMPLE:",f[0]),consola.info(`[ASN/BGP] Writing ${String(f.length)} enriched entries to temporary JSON...`),G.writeFileSync(n,f.join(`
|
|
5
|
-
`),"utf-8"),consola.info(`[ASN/BGP] Compiling MMDB with mmdbctl to ${i}...`);let u=`${a} import --in ${n} --out ${i}`,s=await v(u);s.stdout&&consola.log(`[ASN/BGP] mmdbctl: ${s.stdout.toString().trim()}`),consola.success(`[ASN/BGP] COMPLETED: Successfully compiled ASN MMDB to ${i}
|
|
6
|
-
`);}catch(c){consola.error(`
|
|
7
|
-
[ASN/BGP] ERROR during processing:`,c),process.exit(1);}finally{G.existsSync(n)&&G.unlinkSync(n);}}var it=j.dirname(fileURLToPath(import.meta.url)),$t=[j.resolve(it,"./countries+states+cities.json"),j.resolve(it,"../../public/countries+states+cities.json")].find(o=>G.existsSync(o))??j.resolve(it,"./countries+states+cities.json");async function Z(o,S){consola.info(`
|
|
8
|
-
[CITY/GEO] Building global geographic index from hierarchical database...`);let a=j.resolve(o,"city.mmdb"),e=j.resolve(o,"temp_city_data.json"),i=G.readFileSync($t,"utf8"),n=JSON.parse(i),c=new Map;for(let l of n){let r=new Map;if(l.states)for(let R of l.states){let y=new Map;if(R.cities)for(let t of R.cities)y.set(t.name.toLowerCase(),t);r.set(R.state_code,{meta:R,cities:y});}c.set(l.iso2.toUpperCase(),{meta:l,states:r});}try{consola.info("[CITY/GEO] Fetching validated geofeed CSV...");let R=(await(await fetch("https://geolocatemuch.com/geofeeds/validated-all.csv")).text()).split(`
|
|
9
|
-
`),y=createRegExp(exactly("#").at.lineStart());consola.success(`[CITY/GEO] SUCCESS: Received ${String(R.length)} IP ranges. Mapping to geographic index...`);let t=[];for(let p of R){if(!p.trim()||y.test(p))continue;let g=p.split(","),T=g[0]?.trim()||"",f=g[1]?.trim()||"",u=g[2]?.trim()||"",s=g[3]?.trim()||"",x=g[4]?.trim()||"";if(!f&&!s&&!x)continue;let w=f.toUpperCase()||"",C="",d="",_="",N="",m={},I=c.get(w);if(I){if(m=I.meta,C=I.meta.emoji||"",u){let J=u.includes("-")?u.split("-").pop():u,E=I.states.get(J);if(E){if(N=E.meta.name||E.meta.state_code||"",s){let nt=E.cities.get(s.toLowerCase());nt&&(d=nt.latitude||"",_=nt.longitude||"");}!d&&E.meta.latitude&&E.meta.longitude&&(d=E.meta.latitude||"",_=E.meta.longitude||"");}}if(!d&&s)for(let[,J]of I.states){let E=J.cities.get(s.toLowerCase());if(E){d=E.latitude||"",_=E.longitude||"",N||(N=J.meta.name||J.meta.state_code||"");break}}!d&&m.latitude&&m.longitude&&(d=m.latitude||"",_=m.longitude||"");}let Ot={range:T,country_code:f,region:u||(m.region??""),subregion:m.subregion??"",city:s,zip_code:x,latitude:d,longitude:_,state:N,name:m.name??"Unknown",native:m.native??"",phone:m.phonecode??"",numericCode:m.numeric_code??"",continent:m.region??"",capital:m.capital??"",currency:m.currency??"",currency_name:m.currency_name??"",languages:m.translations?Object.values(m.translations)[0]??"":"",emoji:C,timezone:m.timezones?.[0]?.zoneName??"",utc_offset:m.timezones?.[0]?.gmtOffsetName??"",timeZoneName:m.timezones?.[0]?.tzName??"",tld:m.tld??"",nationality:m.nationality??""};t.push(JSON.stringify(Ot));}consola.info(`[CITY/GEO] Writing ${String(t.length)} enriched entries to temporary JSON...`),G.writeFileSync(e,t.join(`
|
|
10
|
-
`),"utf-8"),consola.start("[CITY/GEO] Compiling MMDB with mmdbctl...");let h=`${S} import --in ${e} --out ${a}`,b=await v(h);b.stdout&&consola.log(`[CITY/GEO] mmdbctl: ${b.stdout.toString().trim()}`),consola.success(`[CITY/GEO] COMPLETED: Successfully compiled City MMDB to ${a}
|
|
11
|
-
`);}catch(l){consola.error(`
|
|
12
|
-
[CITY/GEO] ERROR during processing:`,l),process.exit(1);}finally{G.existsSync(e)&&G.unlinkSync(e);}}async function V(o,S){let a="https://onionoo.torproject.org/details",e=j__default.resolve(o,"tor.mmdb"),i=j__default.resolve(o,"temp_tor_nodes.json");try{O.info(`
|
|
13
|
-
[TOR] Fetching node data from Onionoo API...`);let n=await fetch(a,{method:"GET",headers:{"Accept-Encoding":"gzip",Accept:"application/json"}});if(!n.ok){O.error(`[TOR] ERROR: API fetch failed with status ${String(n.status)}`);return}let c=await n.json();O.success("[TOR] SUCCESS: Data received, mapping relay nodes...");let r=(c.relays||[]).filter(t=>{let h=t.flags?.map(b=>b.toLowerCase())??[];return h.includes("exit")||h.includes("valid")||h.includes("running")||h.includes("stable")||h.includes("hsdir")&&t.exit_addresses&&t.or_addresses});if(r.length===0){O.warn("[TOR] WARNING: No relay nodes found matching criteria.");return}let R=[];for(let t of r){let h=[...t.exit_addresses??[],...t.or_addresses??[]];if(h)for(let b of h){let p=b;p.startsWith("[")?p=p.split("]:")[0].substring(1):p=p.split(":")[0];let g=at.parse(p),T;if(g.kind()==="ipv4"){let f=g;T=`${at.IPv4.networkAddressFromCIDR(`${f.toString()}/24`).toString()}/24`;}else if(g.kind()==="ipv6"){let f=g;T=`${at.IPv6.networkAddressFromCIDR(`${f.toString()}/64`).toString()}/64`;}else continue;R.push({range:T,or_addresses:t.or_addresses?.join(",")??"",exit_addresses:t.exit_addresses?.join(",")??"",last_seen:t.last_seen??"",last_changed_address_or_port:t.last_changed_address_or_port??"",first_seen:t.first_seen??"",running:t.running??!1,flags:t.flags?.join(",")??"",country:t.country??"",country_name:t.country_name??"",as:t.as??"",as_name:t.as_name??"",last_restarted:t.last_restarted??"",exit_policy:t.exit_policy?.join(",")??"",exit_policy_summary:JSON.stringify(t.exit_policy_summary)||"",exit_policy_v6_summary:t.exit_policy_v6_summary?JSON.stringify(t.exit_policy_v6_summary):void 0,contact:t.contact??"Unknown",version_status:t.version_status??"",guard_probability:t.guard_probability??0,middle_probability:t.middle_probability??0,exit_probability:t.exit_probability??0,recommended_version:t.recommended_version??!1,measured:t.measured??!1});}}O.info("[TOR] SAMPLE:",R[0]);let y=R.map(t=>JSON.stringify(t)).join(`
|
|
14
|
-
`);G.writeFileSync(i,y,"utf-8");try{O.info("[TOR] Compiling MMDB with mmdbctl...");let t=await v(`${S} import -j -i ${i} -o ${e}`);t.stdout&&O.info(`[TOR] mmdbctl: ${t.stdout.toString().trim()}`),O.success(`[TOR] COMPLETED: Successfully compiled Tor MMDB to ${e}
|
|
15
|
-
`);}catch(t){O.error("[TOR] ERROR: MMDB compilation failed:",t);return}}catch(n){O.error("[TOR] ERROR: Unexpected failure while fetching node list:",n);return}finally{G.existsSync(i)&&G.unlinkSync(i);}}var ct=j.dirname(fileURLToPath(import.meta.url)),Gt=[j.resolve(ct,"./countries+states+cities.json"),j.resolve(ct,"../../public/countries+states+cities.json")].find(o=>G.existsSync(o))??j.resolve(ct,"./countries+states+cities.json");async function K(o,S){O.info(`
|
|
16
|
-
[GEO/COUNTRY] Building country index from local database...`);let a=j.resolve(o,"country.mmdb"),e=j.resolve(o,"temp_country_data.json"),i=G.readFileSync(Gt,"utf8"),n=JSON.parse(i),c=new Map;for(let r of n)c.set(r.iso2.toUpperCase(),r);O.info("[GEO/COUNTRY] Fetching global IPv4 Country mapping from Sapics...");let l="https://raw.githubusercontent.com/sapics/ip-location-db/refs/heads/main/geo-asn-country/geo-asn-country-ipv4.csv";try{let r=await fetch(l);if(!r.ok)throw new Error(`[GEO/COUNTRY] ERROR: Failed to fetch country data: ${r.statusText}`);let y=(await r.text()).split(`
|
|
17
|
-
`);O.success(`[GEO/COUNTRY] SUCCESS: Received ${String(y.length)} global IP ranges. Enriching data...`);let t=[];for(let p of y){if(!p.trim())continue;let g=p.split(","),T=g[0]?.trim(),f=g[1]?.trim(),u=g[2]?.trim().toUpperCase();if(!T||!f||!u)continue;let s=c.get(u),x={range:`${T}-${f}`,country_code:u,region:s?.region??"",numericCode:s?.numeric_code??"",name:s?.name??"",native:s?.native??"",phone:s?.phonecode??"",capital:s?.capital??"",currency:s?.currency??"",currency_name:s?.currency_name??"",currency_symbol:s?.currency_symbol??"",languages:s?.translations?Object.values(s.translations)[0]??"":"",emoji:s?.emoji??"",timezone:s?.timezones?.[0]?.zoneName??"",utc_offset:s?.timezones?.[0]?.gmtOffsetName??"",timeZoneName:s?.timezones?.[0]?.tzName??"",tld:s?.tld??"",nationality:s?.nationality??"",subregion:s?.subregion??""};t.push(JSON.stringify(x));}O.info(`[GEO/COUNTRY] Writing ${String(t.length)} enriched entries to temporary JSON...`),G.writeFileSync(e,t.join(`
|
|
18
|
-
`),"utf-8"),O.start("[GEO/COUNTRY] Compiling MMDB with mmdbctl...");let h=`${S} import --in ${e} --out ${a}`,b=await v(h);b.stdout&&O.log(`[GEO/COUNTRY] mmdbctl: ${b.stdout.toString().trim()}`),O.success(`[GEO/COUNTRY] COMPLETED: Successfully compiled Country MMDB to ${a}
|
|
19
|
-
`);}catch(r){O.error(`
|
|
20
|
-
[GEO/COUNTRY] ERROR during processing:`,r),process.exit(1);}finally{G.existsSync(e)&&G.unlinkSync(e);}}async function et(o,S){O.log(`
|
|
21
|
-
[PROXY] Fetching initial Proxy list from Awesome-lists...`);let a=j__default.resolve(o,"proxy.mmdb"),e=j__default.resolve(o,"temp_proxy_data.json"),i=new Set,n=[],c=["https://raw.githubusercontent.com/mthcht/awesome-lists/refs/heads/main/Lists/PROXY/ALL_PROXY_Lists.csv","https://raw.githubusercontent.com/firehol/blocklist-ipsets/refs/heads/master/firehol_proxies.netset"],l=createRegExp(exactly(oneOrMore(digit),".",oneOrMore(digit),".",oneOrMore(digit),".",oneOrMore(digit)).and(exactly("/",oneOrMore(digit)).optionally()).at.lineStart().at.lineEnd());try{let r=await fetch(c[0]);if(!r.ok)throw new Error(`[PROXY] ERROR: Failed to fetch awesome list: ${r.statusText}`);let y=(await r.text()).split(`
|
|
22
|
-
`).slice(1),t=charNotIn('"').times.any(),h=t.and(exactly('"')).times(2),b=createRegExp(exactly(",").before(h.times.any().and(t).at.lineEnd())),p=createRegExp(anyOf(exactly("PROXY_ALL_"),exactly("_list.csv"),exactly('"')),["g","i"]);for(let C of y){if(!C.trim())continue;let[d,_,N]=C.split(b);if(!d||!l.test(d)||i.has(d))continue;i.add(d);let m=N.replace(p,"").trim(),I={range:`${d}/32`,port:_,comment:m};n.push(JSON.stringify(I));}O.success(`[PROXY] SUCCESS: Finished Awesome-list. Discovered ${String(n.length)} unique IPs.`),O.log("[PROXY] Fetching secondary data from FireHOL proxy list...");let g=await fetch(c[1]);if(!g.ok)throw new Error(`[PROXY] ERROR: Failed to fetch FireHOL list: ${g.statusText}`);let f=(await g.text()).split(`
|
|
23
|
-
`),u=createRegExp(exactly("#").at.lineStart()),s=0;for(let C of f){let d=C.trim();if(!d||u.test(d))continue;let _=d;if(!l.test(_)||i.has(_))continue;i.add(_);let N={range:_,port:"unknown",comment:"Ip from Firehol"};n.push(JSON.stringify(N)),s++;}O.success(`[PROXY] SUCCESS: Finished FireHOL. Added ${String(s)} NEW unique proxies. Total unique: ${String(n.length)}`),n.length>0&&O.log("[PROXY] SAMPLE:",n[0]),O.log(`[PROXY] Writing ${String(n.length)} unique proxies to temporary JSON...`),G__default.writeFileSync(e,n.join(`
|
|
24
|
-
`),"utf-8"),O.log("[PROXY] Compiling MMDB with mmdbctl...");let x=`${S} import --in ${e} --out ${a}`,w=await v(x);w.stdout&&O.log(`[PROXY] mmdbctl: ${w.stdout.toString().trim()}`),O.success(`[PROXY] COMPLETED: Successfully compiled Proxy MMDB to ${a}
|
|
25
|
-
`);}catch(r){O.error(`
|
|
26
|
-
[PROXY] ERROR during processing:`,r),process.exit(1);}finally{G__default.existsSync(e)&&G__default.unlinkSync(e);}}var ht={firehol_anonymous:"https://github.com/firehol/blocklist-ipsets/raw/refs/heads/master/firehol_anonymous.netset",firehol_l1:"https://github.com/firehol/blocklist-ipsets/raw/refs/heads/master/firehol_level1.netset",firehol_l2:"https://github.com/firehol/blocklist-ipsets/raw/refs/heads/master/firehol_level2.netset",firehol_l3:"https://github.com/firehol/blocklist-ipsets/raw/refs/heads/master/firehol_level3.netset",firehol_l4:"https://github.com/firehol/blocklist-ipsets/raw/refs/heads/master/firehol_level4.netset"};async function ot(o,S,a){let e=" Maintainer: http://iplists.firehol.org/",i=createRegExp(exactly(oneOrMore(digit),".",oneOrMore(digit),".",oneOrMore(digit),".",oneOrMore(digit)).and(exactly("/",oneOrMore(digit)).optionally()).at.lineStart().at.lineEnd()),n=createRegExp(exactly("#").at.lineStart()),c=[];if(Array.isArray(a)?c=Object.entries(ht).filter(([l])=>a.includes(l)).map(([l,r])=>({id:l,url:r})):a&&(c=Object.entries(ht).map(([l,r])=>({id:l,url:r}))),c.length===0){O.info("No valid FireHOL data sources selected. Skipping.");return}try{O.start(`Initializing fetch for ${String(c.length)} FireHOL stream(s)...`);let l=c.map(async y=>{let t=await fetch(y.url);return {id:y.id,res:t}}),r=await Promise.allSettled(l);O.success(`[THREATS] SUCCESS: Fetched ${String(r.length)} data streams from FireHOL.`);let R=0;for(let y of r){if(y.status==="rejected"){O.error("Promise rejected:",y.reason);continue}let{id:t,res:h}=y.value,b=`${t} ${e}`,p=[];if(O.info(`[THREATS] Processing stream: ${t}...`),!h.ok){O.error(`Failed fetching ${t}: ${h.statusText}`);continue}let T=(await h.text()).split(`
|
|
27
|
-
`);for(let f of T){let u=f.trim();if(!u||n.test(u))continue;let s=u;if(!i.test(s))continue;let x={range:s,comment:b};R++,p.push(JSON.stringify(x));}if(O.info(`[THREATS] ${t} summary:`),O.info(` -> IPs Discovered: ${String(p.length)}`),O.info(` -> Rolling Total: ${String(R)}`),p.length>0){O.info(`[THREATS] SAMPLE: ${p[0]}`),O.info(`[THREATS] Writing entries to temporary JSON: temp_${t}.json`);let f=j__default.resolve(o,`temp_${t}.json`),u=j__default.resolve(o,`${t}.mmdb`);G__default.writeFileSync(f,p.join(`
|
|
28
|
-
`),"utf-8"),console.log(`[THREATS] Compiling MMDB with mmdbctl to ${u}...`);let s=`${S} import --in ${f} --out ${u}`,x=await v(s);x.stdout&&O.box(`[THREATS] mmdbctl: ${x.stdout.toString().trim()}`),G__default.existsSync(f)&&G__default.unlinkSync(f),O.success(`[THREATS] SUCCESS: Compiled ${t}.mmdb
|
|
29
|
-
`);}else O.warn(`[THREATS] WARNING: No valid IPs found for ${t}. Skipping.
|
|
30
|
-
`);}O.success(`[THREATS] COMPLETED: All threat intelligence sources processed successfully.
|
|
31
|
-
`);}catch(l){O.error(`
|
|
32
|
-
[THREATS] FATAL ERROR during processing:`,l),process.exit(1);}}async function Rt(o,S,a,e){O.box(`
|
|
33
|
-
=========================================
|
|
34
|
-
=== Starting data generation pipeline ===
|
|
35
|
-
=========================================
|
|
36
|
-
`);let i=j__default.resolve(o,"threats-lists");G__default.existsSync(i)||G__default.mkdirSync(i,{recursive:true});try{(await Promise.allSettled([Q(S,o,e),Z(o,e),V(o,e),K(o,e),et(o,e),ot(o,e,a)])).forEach((c,l)=>{c.status==="rejected"&&O.error(`Script cluster [${String(l)}] failed:`,String(c.reason));}),O.info(`
|
|
37
|
-
====================================
|
|
38
|
-
Pipeline execution finished.
|
|
39
|
-
====================================
|
|
40
|
-
`);}catch(n){O.error(`
|
|
41
|
-
====================================
|
|
42
|
-
Fatal error in pipeline: ${String(n)}
|
|
43
|
-
====================================
|
|
44
|
-
`);}}var xt=j__default.join(kt.homedir(),".shield-base",".cache.json");async function Le(o,S){existsSync(xt)||(O.error("No cache found. Cannot restart. Please run a standard compilation first."),process.exit(1));let a=await readFile(xt,"utf-8"),e=JSON.parse(a);if(!e.selectedDataTypes||e.selectedDataTypes.length===0){O.warn("Cache is empty. No data sources to restart.");return}if(S){O.info("Restarting ALL data sources..."),await Rt(o,e.useragent,true,e.mmdbctlPath),O.success("\u2728 All data successfully refreshed!");return}O.info(`Restarting data compilation from cache: ${e.selectedDataTypes.join(", ")}`);let i=e.selectedDataTypes.filter(c=>c.startsWith("firehol_")||c==="anonymous"),n=e.selectedDataTypes.filter(c=>!c.startsWith("firehol_")&&c!=="anonymous");n.includes("BGP")&&await Q(e.useragent||"",o,e.mmdbctlPath),n.includes("City")&&await Z(o,e.mmdbctlPath),n.includes("Geography")&&await K(o,e.mmdbctlPath),n.includes("Proxy")&&await et(o,e.mmdbctlPath),n.includes("Tor")&&await V(o,e.mmdbctlPath),i.length>0&&await ot(o,e.mmdbctlPath,i),O.success("\u2728 Cached data successfully refreshed!");}export{v as a,Q as b,Z as c,V as d,K as e,et as f,ot as g,Rt as h,Le as i};//# sourceMappingURL=chunk-IXNJSTI7.js.map
|
|
45
|
-
//# sourceMappingURL=chunk-IXNJSTI7.js.map
|