mirror of
https://github.com/AikidoSec/safe-chain.git
synced 2026-05-26 12:10:49 +00:00
Type check safe-chain package
This commit is contained in:
parent
d5dc801c00
commit
c88b1a624f
60 changed files with 1179 additions and 33 deletions
|
|
@ -1,9 +1,16 @@
|
|||
/**
|
||||
* @type {{loggingLevel: string | undefined}}
|
||||
*/
|
||||
const state = {
|
||||
loggingLevel: undefined,
|
||||
};
|
||||
|
||||
const SAFE_CHAIN_ARG_PREFIX = "--safe-chain-";
|
||||
|
||||
/**
|
||||
* @param {string[]} args
|
||||
* @returns {string[]}
|
||||
*/
|
||||
export function initializeCliArguments(args) {
|
||||
// Reset state on each call
|
||||
state.loggingLevel = undefined;
|
||||
|
|
@ -24,6 +31,11 @@ export function initializeCliArguments(args) {
|
|||
return remainingArgs;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string[]} args
|
||||
* @param {string} prefix
|
||||
* @returns {string | undefined}
|
||||
*/
|
||||
function getLastArgEqualsValue(args, prefix) {
|
||||
for (var i = args.length - 1; i >= 0; i--) {
|
||||
const arg = args[i];
|
||||
|
|
@ -35,6 +47,10 @@ function getLastArgEqualsValue(args, prefix) {
|
|||
return undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string[]} args
|
||||
* @returns {void}
|
||||
*/
|
||||
function setLoggingLevel(args) {
|
||||
const safeChainLoggingArg = SAFE_CHAIN_ARG_PREFIX + "logging=";
|
||||
|
||||
|
|
|
|||
|
|
@ -3,13 +3,46 @@ import path from "path";
|
|||
import os from "os";
|
||||
import { ui } from "../environment/userInteraction.js";
|
||||
|
||||
/**
|
||||
* @returns {number}
|
||||
*/
|
||||
export function getScanTimeout() {
|
||||
if (process.env.AIKIDO_SCAN_TIMEOUT_MS) {
|
||||
const timeout = parseInt(process.env.AIKIDO_SCAN_TIMEOUT_MS);
|
||||
if (!isNaN(timeout) && timeout >= 0) {
|
||||
return timeout;
|
||||
}
|
||||
}
|
||||
|
||||
const config = readConfigFile();
|
||||
|
||||
if (hasScanTimeout(config) && config.scanTimeout >= 0) {
|
||||
return config.scanTimeout;
|
||||
}
|
||||
|
||||
return 10000; // Default to 10 seconds
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {unknown} config
|
||||
*
|
||||
* @returns {config is {scanTimeout: number}}
|
||||
*/
|
||||
function hasScanTimeout(config) {
|
||||
return (
|
||||
parseInt(process.env.AIKIDO_SCAN_TIMEOUT_MS) || config.scanTimeout || 10000 // Default to 10 seconds
|
||||
typeof config === "object" &&
|
||||
config !== null &&
|
||||
"scanTimeout" in config &&
|
||||
typeof config.scanTimeout === "number"
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {import("../api/aikido.js").MalwarePackage[]} data
|
||||
* @param {string | number} version
|
||||
*
|
||||
* @returns {void}
|
||||
*/
|
||||
export function writeDatabaseToLocalCache(data, version) {
|
||||
try {
|
||||
const databasePath = getDatabasePath();
|
||||
|
|
@ -24,6 +57,9 @@ export function writeDatabaseToLocalCache(data, version) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {{malwareDatabase: import("../api/aikido.js").MalwarePackage[] | null, version: string | null}}
|
||||
*/
|
||||
export function readDatabaseFromLocalCache() {
|
||||
try {
|
||||
const databasePath = getDatabasePath();
|
||||
|
|
@ -55,6 +91,9 @@ export function readDatabaseFromLocalCache() {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {unknown}
|
||||
*/
|
||||
function readConfigFile() {
|
||||
const configFilePath = getConfigFilePath();
|
||||
|
||||
|
|
@ -66,20 +105,30 @@ function readConfigFile() {
|
|||
return JSON.parse(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {string}
|
||||
*/
|
||||
function getDatabasePath() {
|
||||
const aikidoDir = getAikidoDirectory();
|
||||
return path.join(aikidoDir, "malwareDatabase.json");
|
||||
}
|
||||
|
||||
|
||||
function getDatabaseVersionPath() {
|
||||
const aikidoDir = getAikidoDirectory();
|
||||
return path.join(aikidoDir, "version.txt");
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {string}
|
||||
*/
|
||||
function getConfigFilePath() {
|
||||
return path.join(getAikidoDirectory(), "config.json");
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {string}
|
||||
*/
|
||||
function getAikidoDirectory() {
|
||||
const homeDir = os.homedir();
|
||||
const aikidoDir = path.join(homeDir, ".aikido");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue