@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.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/run.ts","../src/scripts/bgp.ts","../src/scripts/city.ts","../src/scripts/tor.ts","../src/scripts/geo.ts","../src/scripts/proxy.ts","../src/scripts/threats.ts","../src/scripts/executeAll.ts","../src/utils/restart.ts"],"names":["execAsync","util","child","run","command","options","stdout","stderr","result","error","getBGPAndASN","userAgent","outputPath","mmdbPath","urls","output","path","tempASNJson","consola","rawAsnCsv","asnDictionary","asnLines","regex","createRegExp","exactly","oneOrMore","digit","nonQuotes","charNotIn","quotePair","splitRegex","line","parts","match","asnNumber","quoteStripRegex","asnName","asnClass","rawTable","routes","results","route","parsed","dictionaryLookup","record","B","cmd","convert","currentDir","fileURLToPath","dbPath","p","buildCitiesData","tempGeoJson","rawData","dbJson","countryIndex","country","stateMap","state","cityMap","city","lines","commentRegex","prefix","region","zip","cc","emoji","lat","lon","stateName","countryMeta","countryData","regionCode","stateData","cityData","geoRecord","getTorLists","url","tempFileName","response","data","toMap","flags","fl","f","node","ipsToProcess","ip","cleanIp","parsedIp","ipaddr","finalNetworkAddress","ipv4","ipv6","ndjsonOutput","U","k","D","getGeoDatas","res","start","end","getListOfProxies","tempProxyJson","seenIps","ipv4Regex","resAwesome","splitAwesomeListRegex","stripAwesomeListRegex","anyOf","dest_ip","dest_port","metadata_comment","cleanComment","resFirehol","fireholLines","fireholCount","trimmed","fs","THREAT_CONFIG","getThreatLists","selectedSources","maintainerUrl","tasks","id","promises","task","resultsSettled","ipsCount","finalMsg","jsonName","generateData","threatsPath","index","cacheOutput","os","restartData","all","existsSync","cachedFile","readFile","cache","fireholSources","s","standardSources"],"mappings":"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","file":"chunk-IXNJSTI7.js","sourcesContent":["import child from 'node:child_process';\nimport util from 'node:util';\nimport type { ExecOptions } from 'node:child_process';\n\nexport interface RunResult {\n stdout: string | Buffer;\n stderr: string | Buffer;\n}\n\nconst execAsync = util.promisify(child.exec);\n\nexport const run = async (command: string, options: ExecOptions = {}): Promise<RunResult> => {\n try {\n const { stdout, stderr } = await execAsync(command, {\n ...options,\n maxBuffer: options.maxBuffer ?? 1024 * 1024 * 10, \n });\n\n const result: RunResult = {\n stdout: typeof stdout === 'string' ? stdout.trim() : stdout,\n stderr: typeof stderr === 'string' ? stderr.trim() : stderr,\n };\n\n console.log(`[run]: ${command}`);\n if (result.stdout) console.log('stdout:', result.stdout);\n if (result.stderr) console.error('stderr:', result.stderr);\n\n return result;\n } catch (error: unknown) {\n console.error(`Execution failed for command: \"${command}\"`);\n \n if (typeof error === 'object' && error !== null) {\n const e = error as { stderr?: string; stdout?: string };\n if (e.stderr) console.error('Error Output:', e.stderr);\n }\n \n throw error;\n }\n};","import { createRegExp, exactly, digit, oneOrMore, charNotIn } from \"magic-regexp\";\nimport * as fs from 'fs';\nimport { run } from \"../utils/run.js\";\nimport path from \"path\";\nimport { AsnDictionaryEntry, BGPRouteRaw, BgpRecord } from \"../types/bgp.js\";\nimport { consola } from \"consola\";\n\n\nexport async function getBGPAndASN(userAgent: string, outputPath: string, mmdbPath: string) {\n const urls = ['https://bgp.tools/asns.csv', 'https://bgp.tools/table.jsonl'];\n const output = path.resolve(outputPath, 'asn.mmdb');\n const tempASNJson = path.resolve(outputPath, 'temp_asn_data.json');\n try {\n consola.info(\"\\n[ASN/BGP] Fetching ASN Dictionary from BGP.tools...\");\n const ansRes = await fetch(urls[0], {\n method: 'GET',\n headers: {\n 'User-Agent': userAgent\n }\n });\n\n // AS1,\"Level 3 Parent, LLC\",Unknown\n // AS10,CSNET Coordination and Information Center,Unknown\n\n const rawAsnCsv = await ansRes.text();\n const asnDictionary = new Map<number, AsnDictionaryEntry>();\n const asnLines = rawAsnCsv.split('\\n').slice(1);\n \n const regex = createRegExp(exactly('AS').and(oneOrMore(digit).groupedAs('asnNumber')));\n \n const nonQuotes = charNotIn('\"').times.any();\n const quotePair = nonQuotes.and(exactly('\"')).times(2);\n const splitRegex = createRegExp(\n exactly(',').before(quotePair.times.any().and(nonQuotes).at.lineEnd())\n );\n\n for (const line of asnLines) {\n if (!line) continue;\n const parts = line.split(splitRegex);\n\n const match = parts[0].match(regex);\n const asnNumber = match?.groups.asnNumber ? parseInt(match.groups.asnNumber, 10) : null;\n \n const quoteStripRegex = createRegExp(exactly('\"').at.lineStart().or(exactly('\"').at.lineEnd()), ['g']);\n const asnName = parts[1]?.replace(quoteStripRegex, '').trim() || 'Unknown';\n const asnClass = parts[2]?.trim() || 'Unknown';\n \n if (asnNumber !== null) {\n asnDictionary.set(asnNumber, { name: asnName, type: asnClass });\n }\n }\n consola.success(`[ASN/BGP] SUCCESS: Loaded ${String(asnDictionary.size)} ASN definitions.`);\n consola.info(\"[ASN/BGP] Fetching Routing Table...\");\n const tableRes = await fetch(urls[1], {\n method: 'GET',\n headers: {\n 'User-Agent': userAgent\n }\n });\n\n const rawTable = await tableRes.text();\n consola.info(\"[ASN/BGP] Mapping CIDR to ASN data...\");\n const routes = rawTable.split('\\n');\n const results = [];\n\n for (const route of routes) {\n if (!route) continue;\n // {\"CIDR\":\"1.1.1.0/24\",\"ASN\":13335,\"Hits\":509}\n const parsed = JSON.parse(route) as BGPRouteRaw;\n if (parsed.Hits < 10) continue; \n \n const dictionaryLookup = asnDictionary.get(parsed.ASN) ?? { name: 'Unknown', type: 'Unknown' };\n\n const record: BgpRecord = {\n range: parsed.CIDR,\n asn_id: String(parsed.ASN),\n asn_name: dictionaryLookup.name,\n classification: dictionaryLookup.type,\n hits: String(parsed.Hits)\n };\n results.push(JSON.stringify(record));\n }\n\n if (results.length > 0) {\n consola.log('[ASN/BGP] SAMPLE:', results[0]);\n }\n\n consola.info(`[ASN/BGP] Writing ${String(results.length)} enriched entries to temporary JSON...`);\n fs.writeFileSync(tempASNJson, results.join('\\n'), 'utf-8');\n consola.info(`[ASN/BGP] Compiling MMDB with mmdbctl to ${output}...`);\n \n const cmd = `${mmdbPath} import --in ${tempASNJson} --out ${output}`;\n const convert = await run(cmd);\n\n if (convert.stdout) consola.log(`[ASN/BGP] mmdbctl: ${convert.stdout.toString().trim()}`);\n consola.success(`[ASN/BGP] COMPLETED: Successfully compiled ASN MMDB to ${output}\\n`);\n\n } catch (error) {\n consola.error(`\\n[ASN/BGP] ERROR during processing:`, error);\n process.exit(1);\n } finally {\n if (fs.existsSync(tempASNJson)) {\n fs.unlinkSync(tempASNJson);\n }\n }\n}\n","import { run } from \"../utils/run.js\";\nimport * as fs from 'fs';\nimport type { GlobalCountry, GlobalState, GlobalCity, CityGeoRecord } from \"../types/geography.js\";\nimport * as path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { createRegExp, exactly } from \"magic-regexp\";\nimport { consola } from \"consola\";\n\nconst currentDir = path.dirname(fileURLToPath(import.meta.url));\nconst dbPath = [\n path.resolve(currentDir, './countries+states+cities.json'),\n path.resolve(currentDir, '../../public/countries+states+cities.json')\n].find(p => fs.existsSync(p)) ?? path.resolve(currentDir, './countries+states+cities.json');\n\nexport async function buildCitiesData(outputPath: string, mmdbPath: string) {\n consola.info('\\n[CITY/GEO] Building global geographic index from hierarchical database...');\n const output = path.resolve(outputPath, 'city.mmdb');\n const tempGeoJson = path.resolve(outputPath, 'temp_city_data.json');\n \n\n const rawData = fs.readFileSync(dbPath, 'utf8');\n const dbJson = JSON.parse(rawData) as GlobalCountry[];\n\n const countryIndex = new Map<string, { meta: GlobalCountry, states: Map<string, { meta: GlobalState, cities: Map<string, GlobalCity> }> }>();\n \n for (const country of dbJson) {\n const stateMap = new Map<string, { meta: GlobalState, cities: Map<string, GlobalCity> }>();\n \n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (country.states) {\n for (const state of country.states) {\n const cityMap = new Map<string, GlobalCity>();\n \n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (state.cities) {\n for (const city of state.cities) {\n cityMap.set(city.name.toLowerCase(), city);\n }\n }\n \n stateMap.set(state.state_code, { meta: state, cities: cityMap });\n }\n }\n \n countryIndex.set(country.iso2.toUpperCase(), { meta: country, states: stateMap });\n }\n\n try {\n consola.info('[CITY/GEO] Fetching validated geofeed CSV...');\n\n const res = await fetch('https://geolocatemuch.com/geofeeds/validated-all.csv');\n const csvText = await res.text();\n const lines = csvText.split('\\n');\n const commentRegex = createRegExp(exactly('#').at.lineStart());\n \n consola.success(`[CITY/GEO] SUCCESS: Received ${String(lines.length)} IP ranges. Mapping to geographic index...`);\n const results: string[] = [];\n\n for (const line of lines) {\n if (!line.trim() || commentRegex.test(line)) continue;\n\n const parts = line.split(',');\n const prefix = parts[0]?.trim() || \"\";\n const country = parts[1]?.trim() || \"\";\n const region = parts[2]?.trim() || \"\";\n const city = parts[3]?.trim() || \"\";\n const zip = parts[4]?.trim() || \"\";\n\n if (!country && !city && !zip) continue;\n\n const cc = country.toUpperCase() || \"\";\n\n let emoji = \"\";\n let lat = '';\n let lon = '';\n let stateName = '';\n let countryMeta: Partial<GlobalCountry> = {};\n \n const countryData = countryIndex.get(cc);\n if (countryData) {\n countryMeta = countryData.meta;\n emoji = countryData.meta.emoji || \"\";\n \n \n if (region) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const regionCode = region.includes('-') ? region.split('-').pop()! : region;\n const stateData = countryData.states.get(regionCode);\n \n if (stateData) {\n stateName = stateData.meta.name || stateData.meta.state_code || \"\";\n \n if (city) {\n const cityData = stateData.cities.get(city.toLowerCase());\n if (cityData) {\n lat = cityData.latitude || \"\";\n lon = cityData.longitude || \"\";\n }\n }\n\n if (!lat && stateData.meta.latitude && stateData.meta.longitude) {\n lat = stateData.meta.latitude || \"\";\n lon = stateData.meta.longitude || \"\";\n }\n }\n }\n \n\n if (!lat && city) {\n for (const [, stateData] of countryData.states) {\n const cityData = stateData.cities.get(city.toLowerCase());\n if (cityData) {\n lat = cityData.latitude || \"\";\n lon = cityData.longitude || \"\";\n if (!stateName) stateName = stateData.meta.name || stateData.meta.state_code || \"\";\n break;\n }\n }\n }\n\n if (!lat && countryMeta.latitude && countryMeta.longitude) {\n lat = countryMeta.latitude || \"\";\n lon = countryMeta.longitude || \"\";\n }\n }\n\n const geoRecord: CityGeoRecord = {\n range: prefix,\n country_code: country,\n region: region || (countryMeta.region ?? \"\"),\n subregion: countryMeta.subregion ?? \"\",\n city: city,\n zip_code: zip,\n latitude: lat,\n longitude: lon,\n state: stateName,\n name: countryMeta.name ?? \"Unknown\",\n native: countryMeta.native ?? \"\",\n phone: countryMeta.phonecode ?? '',\n numericCode: countryMeta.numeric_code ?? \"\",\n continent: countryMeta.region ?? \"\",\n capital: countryMeta.capital ?? \"\",\n currency: countryMeta.currency ?? '',\n currency_name: countryMeta.currency_name ?? \"\",\n languages: countryMeta.translations ? Object.values(countryMeta.translations)[0] ?? \"\" : \"\",\n emoji: emoji,\n timezone: countryMeta.timezones?.[0]?.zoneName ?? \"\",\n utc_offset: countryMeta.timezones?.[0]?.gmtOffsetName ?? \"\",\n timeZoneName: countryMeta.timezones?.[0]?.tzName ?? \"\",\n tld: countryMeta.tld ?? \"\",\n nationality: countryMeta.nationality ?? \"\",\n };\n \n results.push(JSON.stringify(geoRecord));\n }\n \n consola.info(`[CITY/GEO] Writing ${String(results.length)} enriched entries to temporary JSON...`);\n fs.writeFileSync(tempGeoJson, results.join('\\n'), 'utf-8');\n\n consola.start('[CITY/GEO] Compiling MMDB with mmdbctl...');\n \n const cmd = `${mmdbPath} import --in ${tempGeoJson} --out ${output}`;\n const convert = await run(cmd);\n if (convert.stdout) consola.log(`[CITY/GEO] mmdbctl: ${convert.stdout.toString().trim()}`);\n consola.success(`[CITY/GEO] COMPLETED: Successfully compiled City MMDB to ${output}\\n`);\n\n } catch (error) {\n consola.error('\\n[CITY/GEO] ERROR during processing:', error);\n process.exit(1);\n } finally {\n if (fs.existsSync(tempGeoJson)) {\n fs.unlinkSync(tempGeoJson);\n }\n }\n}\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { run } from \"../utils/run.js\";\nimport * as fs from 'fs';\nimport ipaddr from 'ipaddr.js';\nimport path from \"path\";\nimport type { OnionooPayload, TorRecord } from \"../types/tor.js\";\nimport consola from \"consola\";\n\n\n\nexport async function getTorLists(outputPath: string, mmdbPath: string): Promise<void> {\n const url = 'https://onionoo.torproject.org/details';\n const output = path.resolve(outputPath, 'tor.mmdb');\n const tempFileName = path.resolve(outputPath, 'temp_tor_nodes.json');\n\ntry {\n\n consola.info(\"\\n[TOR] Fetching node data from Onionoo API...\");\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Accept-Encoding': 'gzip',\n 'Accept': 'application/json'\n }\n\n });\n\n\n\n if (!response.ok) {\n consola.error(`[TOR] ERROR: API fetch failed with status ${String(response.status)}`);\n return;\n }\n\n const data = await response.json() as OnionooPayload;\n consola.success('[TOR] SUCCESS: Data received, mapping relay nodes...');\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const rawNodes = data.relays || [];\n const toMap = rawNodes.filter((flags) => {\n\n const fl = flags.flags?.map(f => f.toLowerCase()) ?? [];\n return fl.includes(\"exit\") ||\n fl.includes(\"valid\") ||\n fl.includes(\"running\") ||\n fl.includes(\"stable\") ||\n fl.includes(\"hsdir\") &&\n flags.exit_addresses &&\n flags.or_addresses;\n });\n\n\n\n if (toMap.length === 0) {\n consola.warn(\"[TOR] WARNING: No relay nodes found matching criteria.\");\n return;\n }\n\n const results: TorRecord[] = [];\n\n for (const node of toMap) {\n const ipsToProcess = [\n // eslint-disable-next-line @typescript-eslint/no-misused-spread\n ...(node.exit_addresses ?? []),\n ...(node.or_addresses ?? [])\n ];\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!ipsToProcess) continue;\n\n for (const ip of ipsToProcess) {\n\n let cleanIp = ip;\n if (cleanIp.startsWith('[')) {\n cleanIp = cleanIp.split(']:')[0].substring(1);\n } else {\n cleanIp = cleanIp.split(':')[0];\n }\n\n const parsedIp = ipaddr.parse(cleanIp);\n let finalNetworkAddress: string;\n\n if (parsedIp.kind() === 'ipv4') {\n const ipv4 = parsedIp as ipaddr.IPv4;\n const networkAddress = ipaddr.IPv4.networkAddressFromCIDR(`${ipv4.toString()}/24`);\n finalNetworkAddress = `${networkAddress.toString()}/24`;\n } else if (parsedIp.kind() === 'ipv6') {\n const ipv6 = parsedIp as ipaddr.IPv6;\n const networkAddress = ipaddr.IPv6.networkAddressFromCIDR(`${ipv6.toString()}/64`);\n finalNetworkAddress = `${networkAddress.toString()}/64`;\n } else {\n continue;\n }\n\n results.push({\n range: finalNetworkAddress,\n or_addresses: node.or_addresses?.join(',') ?? '',\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n exit_addresses: node.exit_addresses?.join(',') ?? '',\n last_seen: node.last_seen ?? \"\",\n last_changed_address_or_port: node.last_changed_address_or_port ?? \"\",\n first_seen: node.first_seen ?? \"\",\n running: node.running ?? false,\n flags: node.flags?.join(',') ?? \"\",\n country: node.country ?? \"\",\n country_name: node.country_name ?? \"\",\n as: node.as ?? \"\",\n as_name: node.as_name ?? \"\",\n last_restarted: node.last_restarted ?? \"\",\n exit_policy: node.exit_policy?.join(',') ?? '',\n exit_policy_summary: JSON.stringify(node.exit_policy_summary) || '',\n exit_policy_v6_summary: node.exit_policy_v6_summary ? JSON.stringify(node.exit_policy_v6_summary) : undefined,\n contact: node.contact ?? \"Unknown\",\n version_status: node.version_status ?? \"\",\n guard_probability: node.guard_probability ?? 0,\n middle_probability: node.middle_probability ?? 0,\n exit_probability: node.exit_probability ?? 0,\n recommended_version: node.recommended_version ?? false,\n measured: node.measured ?? false,\n });\n }\n\n }\n\n consola.info('[TOR] SAMPLE:', results[0]);\n const ndjsonOutput = results.map(record => JSON.stringify(record)).join('\\n');\n fs.writeFileSync(tempFileName, ndjsonOutput, 'utf-8');\n try {\n consola.info('[TOR] Compiling MMDB with mmdbctl...');\n const convert = await run(`${mmdbPath} import -j -i ${tempFileName} -o ${output}`);\n if (convert.stdout) consola.info(`[TOR] mmdbctl: ${convert.stdout.toString().trim()}`);\n\n consola.success(`[TOR] COMPLETED: Successfully compiled Tor MMDB to ${output}\\n`);\n\n } catch (error) {\n consola.error(\"[TOR] ERROR: MMDB compilation failed:\", error);\n return;\n }\n\n } catch (error: unknown) {\n consola.error(\"[TOR] ERROR: Unexpected failure while fetching node list:\", error);\n return;\n } finally {\n if (fs.existsSync(tempFileName)) {\n fs.unlinkSync(tempFileName);\n }\n \n }\n\n} ","import { run } from \"../utils/run.js\";\nimport * as fs from 'fs';\nimport * as path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport type { GlobalCountry, GeoRecord } from \"../types/geography.js\";\nimport consola from \"consola\";\n\nconst currentDir = path.dirname(fileURLToPath(import.meta.url));\nconst dbPath = [\n path.resolve(currentDir, './countries+states+cities.json'),\n path.resolve(currentDir, '../../public/countries+states+cities.json')\n].find(p => fs.existsSync(p)) ?? path.resolve(currentDir, './countries+states+cities.json');\n\nexport async function getGeoDatas(outputPath: string, mmdbPath: string) {\n consola.info(\"\\n[GEO/COUNTRY] Building country index from local database...\");\n\n const output = path.resolve(outputPath, 'country.mmdb');\n const tempGeoJson = path.resolve(outputPath, 'temp_country_data.json');\n const rawData = fs.readFileSync(dbPath, 'utf8');\n const dbJson = JSON.parse(rawData) as GlobalCountry[];\n\n const countryIndex = new Map<string, GlobalCountry>();\n for (const country of dbJson) {\n countryIndex.set(country.iso2.toUpperCase(), country);\n }\n\n consola.info('[GEO/COUNTRY] Fetching global IPv4 Country mapping from Sapics...');\n const url = 'https://raw.githubusercontent.com/sapics/ip-location-db/refs/heads/main/geo-asn-country/geo-asn-country-ipv4.csv';\n\n try {\n const res = await fetch(url);\n if (!res.ok) {\n throw new Error(`[GEO/COUNTRY] ERROR: Failed to fetch country data: ${res.statusText}`);\n }\n\n const csvText = await res.text();\n const lines = csvText.split('\\n');\n \n consola.success(`[GEO/COUNTRY] SUCCESS: Received ${String(lines.length)} global IP ranges. Enriching data...`);\n const results: string[] = [];\n\n for (const line of lines) {\n if (!line.trim()) continue;\n \n const parts = line.split(',');\n const start = parts[0]?.trim();\n const end = parts[1]?.trim();\n const cc = parts[2]?.trim().toUpperCase();\n \n if (!start || !end || !cc) continue;\n\n const countryMeta = countryIndex.get(cc);\n\n const record: GeoRecord = {\n range: `${start}-${end}`,\n country_code: cc,\n region: countryMeta?.region ?? '',\n numericCode: countryMeta?.numeric_code ?? \"\",\n name: countryMeta?.name ?? \"\",\n native: countryMeta?.native ?? \"\",\n phone: countryMeta?.phonecode ?? \"\",\n capital: countryMeta?.capital ?? \"\",\n currency: countryMeta?.currency ?? \"\",\n currency_name: countryMeta?.currency_name ?? \"\",\n currency_symbol: countryMeta?.currency_symbol ?? \"\",\n languages: countryMeta?.translations ? Object.values(countryMeta.translations)[0] ?? \"\" : \"\",\n emoji: countryMeta?.emoji ?? \"\",\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n timezone: countryMeta?.timezones?.[0]?.zoneName ?? \"\",\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n utc_offset: countryMeta?.timezones?.[0]?.gmtOffsetName ?? \"\",\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n timeZoneName: countryMeta?.timezones?.[0]?.tzName ?? \"\",\n tld: countryMeta?.tld ?? \"\",\n nationality: countryMeta?.nationality ?? \"\",\n subregion: countryMeta?.subregion ?? \"\"\n };\n\n results.push(JSON.stringify(record));\n }\n\n consola.info(`[GEO/COUNTRY] Writing ${String(results.length)} enriched entries to temporary JSON...`);\n fs.writeFileSync(tempGeoJson, results.join('\\n'), 'utf-8');\n\n consola.start('[GEO/COUNTRY] Compiling MMDB with mmdbctl...');\n\n const cmd = `${mmdbPath} import --in ${tempGeoJson} --out ${output}`;\n const convert = await run(cmd);\n \n if (convert.stdout) consola.log(`[GEO/COUNTRY] mmdbctl: ${convert.stdout.toString().trim()}`);\n consola.success(`[GEO/COUNTRY] COMPLETED: Successfully compiled Country MMDB to ${output}\\n`);\n\n } catch (error) {\n consola.error('\\n[GEO/COUNTRY] ERROR during processing:', error);\n process.exit(1);\n } finally {\n if (fs.existsSync(tempGeoJson)) {\n fs.unlinkSync(tempGeoJson);\n }\n }\n}\n","import fs from 'node:fs';\nimport { run } from \"../utils/run.js\";\nimport { createRegExp, exactly, charNotIn, anyOf, digit, oneOrMore } from 'magic-regexp';\nimport path from 'node:path';\nimport consola from 'consola';\n\n\nexport async function getListOfProxies(outputPath: string, mmdbPath: string) {\n consola.log(\"\\n[PROXY] Fetching initial Proxy list from Awesome-lists...\");\n const output = path.resolve(outputPath, 'proxy.mmdb');\n const tempProxyJson = path.resolve(outputPath, 'temp_proxy_data.json');\n\n const seenIps = new Set<string>();\n const results: string[] = [];\n const urls = ['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'];\n \n const ipv4Regex = createRegExp(\n exactly(oneOrMore(digit), '.', oneOrMore(digit), '.', oneOrMore(digit), '.', oneOrMore(digit))\n .and(exactly('/', oneOrMore(digit)).optionally()) \n .at.lineStart().at.lineEnd()\n );\n\n try {\n const resAwesome = await fetch(urls[0]);\n if (!resAwesome.ok) throw new Error(`[PROXY] ERROR: Failed to fetch awesome list: ${resAwesome.statusText}`);\n\n const csvText = await resAwesome.text();\n const lines = csvText.split('\\n').slice(1);\n\n const nonQuotes = charNotIn('\"').times.any();\n const quotePair = nonQuotes.and(exactly('\"')).times(2);\n const splitAwesomeListRegex = createRegExp(\n exactly(',').before(quotePair.times.any().and(nonQuotes).at.lineEnd())\n );\n\n const stripAwesomeListRegex = createRegExp(\n anyOf(exactly('PROXY_ALL_'), exactly('_list.csv'), exactly('\"')), \n ['g', 'i']\n );\n\n\n\n for (const line of lines) {\n if (!line.trim()) continue;\n \n const [dest_ip, dest_port, metadata_comment] = line.split(splitAwesomeListRegex);\n\n if (!dest_ip || !ipv4Regex.test(dest_ip)) continue;\n \n if (seenIps.has(dest_ip)) continue;\n seenIps.add(dest_ip);\n\n const cleanComment = metadata_comment.replace(stripAwesomeListRegex, '').trim();\n\n const record = {\n range: `${dest_ip}/32`, \n port: dest_port,\n comment: cleanComment\n };\n \n results.push(JSON.stringify(record));\n }\n \n consola.success(`[PROXY] SUCCESS: Finished Awesome-list. Discovered ${String(results.length)} unique IPs.`);\n consola.log('[PROXY] Fetching secondary data from FireHOL proxy list...');\n const resFirehol = await fetch(urls[1]);\n\n if (!resFirehol.ok) throw new Error(`[PROXY] ERROR: Failed to fetch FireHOL list: ${resFirehol.statusText}`);\n const textFirehol = await resFirehol.text();\n const fireholLines = textFirehol.split('\\n');\n const commentRegex = createRegExp(exactly('#').at.lineStart());\n let fireholCount = 0;\n\n\n for (const line of fireholLines) {\n const trimmed = line.trim();\n if (!trimmed || commentRegex.test(trimmed)) continue;\n\n const ip = trimmed;\n \n if (!ipv4Regex.test(ip)) continue;\n \n if (seenIps.has(ip)) continue;\n seenIps.add(ip);\n\n const record = {\n range: ip,\n port: 'unknown',\n comment: `Ip from Firehol`\n };\n\n results.push(JSON.stringify(record));\n fireholCount++;\n }\n\n consola.success(`[PROXY] SUCCESS: Finished FireHOL. Added ${String(fireholCount)} NEW unique proxies. Total unique: ${String(results.length)}`);\n\n if (results.length > 0) {\n consola.log('[PROXY] SAMPLE:', results[0]);\n }\n\n consola.log(`[PROXY] Writing ${String(results.length)} unique proxies to temporary JSON...`);\n fs.writeFileSync(tempProxyJson, results.join('\\n'), 'utf-8');\n consola.log('[PROXY] Compiling MMDB with mmdbctl...');\n\n const cmd = `${mmdbPath} import --in ${tempProxyJson} --out ${output}`;\n const convert = await run(cmd);\n if (convert.stdout) consola.log(`[PROXY] mmdbctl: ${convert.stdout.toString().trim()}`);\n consola.success(`[PROXY] COMPLETED: Successfully compiled Proxy MMDB to ${output}\\n`);\n\n\n } catch (error) {\n consola.error('\\n[PROXY] ERROR during processing:', error);\n process.exit(1);\n } finally {\n if (fs.existsSync(tempProxyJson)) {\n fs.unlinkSync(tempProxyJson);\n }\n } \n}\n","import fs from 'node:fs';\nimport { run } from \"../utils/run.js\";\nimport { createRegExp, exactly, digit, oneOrMore } from 'magic-regexp';\nimport path from 'node:path';\nimport consola from 'consola';\n\n\n\n\nconst THREAT_CONFIG = {\n firehol_anonymous: 'https://github.com/firehol/blocklist-ipsets/raw/refs/heads/master/firehol_anonymous.netset',\n firehol_l1: 'https://github.com/firehol/blocklist-ipsets/raw/refs/heads/master/firehol_level1.netset',\n firehol_l2: 'https://github.com/firehol/blocklist-ipsets/raw/refs/heads/master/firehol_level2.netset',\n firehol_l3: 'https://github.com/firehol/blocklist-ipsets/raw/refs/heads/master/firehol_level3.netset',\n firehol_l4: 'https://github.com/firehol/blocklist-ipsets/raw/refs/heads/master/firehol_level4.netset',\n} as const;\n\n\n\nexport async function getThreatLists(outputPath: string, mmdbPath: string, selectedSources?: string[] | boolean) {\n\n const maintainerUrl = ' Maintainer: http://iplists.firehol.org/';\n const ipv4Regex = createRegExp(\n exactly(oneOrMore(digit), '.', oneOrMore(digit), '.', oneOrMore(digit), '.', oneOrMore(digit))\n .and(exactly('/', oneOrMore(digit)).optionally()) \n .at.lineStart().at.lineEnd()\n );\n const commentRegex = createRegExp(exactly('#').at.lineStart());\n let tasks: { id: string, url: string }[] = [];\n\n if (Array.isArray(selectedSources)) {\n tasks = Object.entries(THREAT_CONFIG)\n .filter(([id]) => selectedSources.includes(id))\n .map(([id, url]) => ({ id, url }));\n } else if (Boolean(selectedSources)) {\n tasks = Object.entries(THREAT_CONFIG).map(([id, url]) => ({ id, url }));\n }\n \n if (tasks.length === 0) {\n consola.info('No valid FireHOL data sources selected. Skipping.');\n return;\n }\n try {\n consola.start(`Initializing fetch for ${String(tasks.length)} FireHOL stream(s)...`);\n\n const promises = tasks.map(async (task) => {\n const res = await fetch(task.url);\n return { id: task.id, res };\n });\n\n const resultsSettled = await Promise.allSettled(promises);\n consola.success(`[THREATS] SUCCESS: Fetched ${String(resultsSettled.length)} data streams from FireHOL.`);\n\n let ipsCount = 0;\n\n\n for (const result of resultsSettled) {\n\n if (result.status === 'rejected') {\n consola.error(`Promise rejected:`, result.reason);\n continue;\n }\n const { id, res } = result.value;\n const finalMsg = `${id} ${maintainerUrl}`;\n const results: string[] = [];\n consola.info(`[THREATS] Processing stream: ${id}...`);\n \n if (!res.ok) {\n consola.error(`Failed fetching ${id}: ${res.statusText}`);\n continue;\n }\n\n const rawTextData = await res.text();\n const lines = rawTextData.split('\\n');\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || commentRegex.test(trimmed)) continue;\n\n const ip = trimmed;\n if (!ipv4Regex.test(ip)) continue;\n\n const record = {\n range: ip,\n comment: finalMsg\n };\n\n ipsCount++;\n results.push(JSON.stringify(record));\n }\n\n consola.info(`[THREATS] ${id} summary:`);\n consola.info(` -> IPs Discovered: ${String(results.length)}`);\n consola.info(` -> Rolling Total: ${String(ipsCount)}`);\n \n if (results.length > 0) {\n consola.info(`[THREATS] SAMPLE: ${results[0]}`);\n consola.info(`[THREATS] Writing entries to temporary JSON: temp_${id}.json`);\n const jsonName = path.resolve(outputPath, `temp_${id}.json`);\n const output = path.resolve(outputPath, `${id}.mmdb`);\n\n fs.writeFileSync(jsonName, results.join('\\n'), 'utf-8');\n console.log(`[THREATS] Compiling MMDB with mmdbctl to ${output}...`);\n\n const cmd = `${mmdbPath} import --in ${jsonName} --out ${output}`;\n const convert = await run(cmd);\n if (convert.stdout) consola.box(`[THREATS] mmdbctl: ${convert.stdout.toString().trim()}`);\n\n if (fs.existsSync(jsonName)) {\n fs.unlinkSync(jsonName);\n }\n consola.success(`[THREATS] SUCCESS: Compiled ${id}.mmdb\\n`);\n } else {\n consola.warn(`[THREATS] WARNING: No valid IPs found for ${id}. Skipping.\\n`);\n }\n }\n \n consola.success(\"[THREATS] COMPLETED: All threat intelligence sources processed successfully.\\n\");\n\n } catch (error) {\n consola.error('\\n[THREATS] FATAL ERROR during processing:', error);\n process.exit(1);\n }\n}","import { getBGPAndASN } from \"./bgp.js\";\nimport { buildCitiesData } from \"./city.js\";\nimport { getTorLists } from \"./tor.js\";\nimport { getGeoDatas } from \"./geo.js\";\nimport { getListOfProxies } from \"./proxy.js\";\nimport { getThreatLists } from \"./threats.js\";\nimport fs from 'node:fs';\nimport path from \"path\";\nimport consola from \"consola\";\n\n\nexport async function generateData(outputPath: string, userAgent: string, selectedSources: string[] | boolean, mmdbPath: string) {\n consola.box(\"\\n=========================================\\n\" +\n \" === Starting data generation pipeline === \" +\n \"\\n=========================================\\n\");\n\n const threatsPath = path.resolve(outputPath, 'threats-lists');\n \n if (!fs.existsSync(threatsPath)) {\n fs.mkdirSync(threatsPath, { recursive: true });\n }\n \n try {\n\n const results = await Promise.allSettled([\n getBGPAndASN(userAgent, outputPath, mmdbPath),\n buildCitiesData(outputPath, mmdbPath),\n getTorLists(outputPath, mmdbPath),\n getGeoDatas(outputPath, mmdbPath),\n getListOfProxies(outputPath, mmdbPath),\n getThreatLists(outputPath, mmdbPath, selectedSources)\n ]);\n \n results.forEach((result, index) => {\n if (result.status === 'rejected') {\n consola.error(`Script cluster [${String(index)}] failed:`, String(result.reason));\n }\n });\n consola.info(\"\\n====================================\\n\" +\n \"Pipeline execution finished.\" +\n \"\\n====================================\\n\");\n } catch (error) {\n consola.error(\"\\n====================================\\n\" +\n `Fatal error in pipeline: ${String(error)}` +\n \"\\n====================================\\n\");\n }\n}","/* eslint-disable @typescript-eslint/no-unnecessary-condition */\nimport consola from 'consola';\nimport path from 'node:path';\nimport os from 'node:os';\nimport { readFile } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { InputCache } from '../types/input.js';\nimport { \n getBGPAndASN,\n buildCitiesData,\n generateData as executeAll,\n getGeoDatas,\n getListOfProxies,\n getThreatLists,\n getTorLists\n} from '../scripts/index.js';\n\nconst cacheOutput = path.join(os.homedir(), '.shield-base', '.cache.json');\n\nexport async function restartData(outputPath: string, all: boolean): Promise<void> {\n \n if (!existsSync(cacheOutput)) { \n consola.error('No cache found. Cannot restart. Please run a standard compilation first.');\n process.exit(1);\n }\n \n const cachedFile = await readFile(cacheOutput, 'utf-8');\n const cache = JSON.parse(cachedFile) as InputCache;\n \n if (!cache.selectedDataTypes || cache.selectedDataTypes.length === 0) {\n consola.warn('Cache is empty. No data sources to restart.');\n return;\n }\n\n if (all) {\n consola.info('Restarting ALL data sources...');\n await executeAll(outputPath, cache.useragent, true, cache.mmdbctlPath);\n consola.success('✨ All data successfully refreshed!');\n return;\n }\n\n consola.info(`Restarting data compilation from cache: ${cache.selectedDataTypes.join(', ')}`);\n\n const fireholSources = cache.selectedDataTypes.filter(s => s.startsWith('firehol_') || s === 'anonymous');\n const standardSources = cache.selectedDataTypes.filter(s => !s.startsWith('firehol_') && s !== 'anonymous');\n\n\n if (standardSources.includes('BGP')) {\n await getBGPAndASN(cache.useragent || '', outputPath, cache.mmdbctlPath);\n }\n if (standardSources.includes('City')) {\n await buildCitiesData(outputPath, cache.mmdbctlPath);\n }\n if (standardSources.includes('Geography')) {\n await getGeoDatas(outputPath, cache.mmdbctlPath);\n }\n if (standardSources.includes('Proxy')) {\n await getListOfProxies(outputPath, cache.mmdbctlPath);\n }\n if (standardSources.includes('Tor')) {\n await getTorLists(outputPath, cache.mmdbctlPath);\n }\n \n if (fireholSources.length > 0) {\n await getThreatLists(outputPath, cache.mmdbctlPath, fireholSources);\n }\n\n consola.success('✨ Cached data successfully refreshed!');\n return;\n}"]}